ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • GraphQL이란
    Graphql 2023. 4. 16. 22:19

    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

    댓글

Designed by Tistory.