-
GraphQL이란
GraphQL은 Facebook에서 개발된 오픈소스 기술로 데이터 질의 (Query + Schema) 언어이다. 클라이언트는 GraphQL 서버로 쿼리를 전송하고, 서버는 해당 쿼리를 해석하고 데이터를 반환한다. 이 때, 클라이언트가 요청한 필드만 반환되므로 over fetching을 줄여 효율적이다.
또한, GraphQL은 스키마를 사용하여 데이터 모델을 정의하기 때문에 클라이언트와 서버 간의 일관성 있는 데이터 통신을 보장한다. 이를 통해 클라이언트가 서버가 제공하는 데이터 중 원하는 데이터를 가져오는 것이 가능해집니다.GraphQL vs Rest API
Rest API는 HTTP 요청방식 (GET, POST, PUT DELETE 등)을 사용하여 데이터를 요청하고 응답받는다. 이 때, 상황에 따라 다른 Method를 사용해야하고 api별로 각각의 end point를 갖는다.
GraphQL은 동일하게 HTTP 요청방식을 사용하지만 POST만 사용하고 단일 end point를 사용한다. 그리고 요청 시 body에 Schema에 맞춰 Query를 사용하여 요청하기 때문에 일관성 있는 통신이 가능하다.
User라는 data에 대해 CRUD API를 구현을 통해 간단한 예를 들어보자
- REST API의 경우 아래와 같은 4개의 end point가 필요하고 client <-> server 간 data type을 명시적으로 보여줄 수 없다.
- [GET] /api/v1/user
- [POST] /api/v1/user
- [PUT] /api/v1/user/:id
- [DELETE] /api/v1/user/:id
- GraphQL의 경우 아래와 같은 1개의 end point만 사용하고 client <-> server간의 data 일관성을 유지할 수 있다.
- [POST] /graphql
//body의 내용 //create mutation{ createUser(input: createUserDto){ // createUserDto == {name: string, email: string} id name email } } #read query{ getUser{ id name email } } #update mutation{ updateUser(input: updateUserDto){ // updateUserDto == {name: string, email: string} id name email } } #delete mutation{ deleteUser(id: $id) }
Data 효율성
- Rest API를 사용하면 같은 url을 사용할 경우 항상 동일한 정보를 받게 된다. 하지만 이 경우 모든 data가 필요하지 않을 수 있는데 이 때 over fetching이 발생한다.
- GraphQL을 사용한다면 설정한 query에 따라 정보를 받게 된다. 만약 id, name, email을 요청하지 않고 name만 요청할 경우 서버에서는 name만 reponse에 담아서 준다. 따라서 overfetching을 막을 수 있다.
캐싱
- Rest API는 [GET]을 사용할 경우 캐싱이 가능하다.
- GraphQL은 캐싱을 하기 위해서는 client 혹은 server 개발자가 따로 캐싱 처리를 해주어야 한다.
앞으로 GraphQL에 대해 좀 더 정리해 나가도록 하겠다.
'Graphql' 카테고리의 다른 글
GraphQL에 대하여 ( Resolver & Dataloader / Aliases & Fragment) (1) 2023.06.03 GraphQL에 대하여 (Interface & Union Type) (0) 2023.05.07 GraphQL (Schema & Type) (0) 2023.04.23 DataLoader (0) 2022.10.09 - REST API의 경우 아래와 같은 4개의 end point가 필요하고 client <-> server 간 data type을 명시적으로 보여줄 수 없다.