GraphQL

김민섭·2023년 1월 21일
0

API

목록 보기
1/2
post-thumbnail

GraphQL을 공부하게 된 계기

취업을 준비하면서 GraphQL을 사용하는 기업들이 많다는 것을 알게 되었고 실제로
과제 테스트에 GraphQL을 이용한 서버를 구축하라는 조건이 있는 경우가 심심찮게 보여서 GraphQL에 대해 공부해 보았다.

GraphQL이란?

GraphQL은 FaceBook에서 제작한 API를 위한 쿼리 언어이다.

API란 서버와 통신하기 위한 인터페이스이다.
예를 들어, 핸드폰에 있는 인스타그램 어플은 페이스북 서버와 여러가지 데이터들을 주고 받을텐데 이러한 데이터를 주고 받는 통신을 API라고 한다.
그리고 GraphQL은 이러한 통신 방법 중 하나이다.

GraphQL이 만들어진 이유

GraphQL은 대표적인 API인 REST API의 문제점을 해결하기 위해서 만들어졌다.
REST API에 대한 내용은 이 글에서는 다루지 않겠지만 문제점과 특징 정도는 짚고 넘어가는 것이 좋을 것 같다.

REST API의 특징과 문제점

Rest API의 특징은 여러개의 URL을 가지고 있고 이러한 URL로 요청을 보내면 응답으로 고정된 데이터를 준다.

이러한 REST API의 특성 상 문제점들이 발생하는데 바로 Over FetcingUnder Fetching이다.

Over Fetching이란 요청에 대한 응답값이 필요한 데이터보다 많을 경우를 의미한다.
영화들의 데이터를 주고 받는다고 가정을 해보자.
필요한 데이터가 영화의 제목과 감독이더라도 REST API는 고정된 응답값을 주기 때문에 불필요한 데이터들도 받을 수 밖에 없다.

{
  "data": {
    "allFilms": {
      "films": [
        {
          "id": "ZmlsbXM6MQ==",
          "title": "A New Hope",
          "episodeID": 4,
          "director": "George Lucas",
          "producers": [
            "Gary Kurtz",
            "Rick McCallum"
          ],
          "releaseDate": "1977-05-25"
        },
        {
          "id": "ZmlsbXM6Mg==",
          "title": "The Empire Strikes Back",
          "episodeID": 5,
          "director": "Irvin Kershner",
          "producers": [
            "Gary Kurtz",
            "Rick McCallum"
          ],
          "releaseDate": "1980-05-17"
        },
        {
          "id": "ZmlsbXM6Mw==",
          "title": "Return of the Jedi",
          "episodeID": 6,
          "director": "Richard Marquand",
          "producers": [
            "Howard G. Kazanjian",
            "George Lucas",
            "Rick McCallum"
          ],
          "releaseDate": "1983-05-25"
        },

하지만 GraphQL을 사용하였을 경우에는

{
  allFilms {
    films {
      title
      director
    } 
  }
}

이러한 쿼리를 보내게 되고

{
  "data": {
    "allFilms": {
      "films": [
        {
          "title": "A New Hope",
          "director": "George Lucas"
        },
        {
          "title": "The Empire Strikes Back",
          "director": "Irvin Kershner"
        },
        {
          "title": "Return of the Jedi",
          "director": "Richard Marquand"
        },

필요한 데이터들만 받아 볼 수 있다.

Under Fetching이란 하나의 경로로는 필요한 데이터들을 전부 받지 못하여 둘 이상의 경로로 요청하는 것을 말한다.

GraphQL은 한번의 특정 경로에 따라 데이터를 응답하는 방식이 아니기 때문에 한번의 요청으로도 필요한 데이터들을 전부 받아 볼 수가 있다.

정리

1. GraphQL은 보통 하나의 엔드포인트를 가진다.
2. GraphQL은 요청 쿼리에 따라서 다른 응답을 받을 수 있다.
3. GraphQL은 원하는 데이터만 받아 볼 수 있다.

GraphQL의 장점

  1. HTTP 요청 횟수를 줄일 수 있다.
  2. HTTP 응답 값의 크기를 줄일 수 있다

GraphQL의 단점

  1. 고정된 요청과 응답값만을 주고 받을 경우에는 쿼리로 인해서 오히려 요청값이 커질 수 있다.
  2. REST API보다 캐싱이 복잡하다.

REST API의 단점을 보완하기 위해서 나왔지만 GraphQL의 단점 또한 명확하기 때문에 서비스에 알맞게 적절히 사용하는 것이 좋아 보인다.

profile
getting ready to run

0개의 댓글