What is GraphQL?

GraphQL은 facebook이 2012부터 개발한 하나의 사양(specification)이다. 그리고 2015년에 오픈소스로 공개되었다. github에도 spec문서와 그 사양을 따르는 JS소스가 개시되어 있다. GraphQL을 본격적으로 배우기 위해서는 무슨 문제를 해결하고자 신기술이 등장하였고 해당 문제를 해결하기 위한 이해가 선행되어야 신기술을 배울 수 있다. 그리고 graphQL은 rest API가 가지고 있는 가장 큰 문제점인 over fetching과 under fetcing을 직접적인 해결책을 제시해준다.


Over Fetching

Rest API의 첫번째 문제점인 over fetching은 사용자가 GET요청을 하면 사용하지도 원하지도 않는 모든 데이터를 전달한다. 여기서 서버는 필요로하지 않는 데이터를 전달하기위해 많은 일을 수행해야하고 또한 많은 데이터 전달로 인한 경제적 손실을 입게 된다. 뿐만아니라 네트워크상의 과부화도 부추겨 응답이 안좋아지게 된다.

반면, graphQL은 원하는 데이터만 요청하여 받을 수 있게되어 과잉 데이터 전달로 인한 문제점을 해결할 수 있따.


Under Fetching

Under fetching은 over fetcing과 반대로 데이터를 부족하게 받는 문제점이다. 예를 들어 rest API로 영화의 장르를 받아 온다고 가정한다. 그런데 영화의 장르를 보았느데 장르가 글자로 되어 있지 않고 숫자로 표현된 코드라고 한다면 사용자는 코드를 표현한 장르를 따로 보여주는 rest API를 또 요청해야하는 상황이 생긴다.

이러한 상황이된다면 over fetching보다 더 많은 데이터를 받을 수 있게 되고 두가지 URL 요청을 했는데 하나가 응답하지 않으면 영화 코드를 해석하지 못할 수 있다. GraphQL은 처음 문제점을 그대로 가져와 원하는 데이터를 명확하게 표기하여 데이터 정보가 부족한 요청을 피하게 되고 또한 적은 데이터로 통신되는 API이기에 모바일에서도 반응이 빠르다.


Try GraphQL

GraphQL API를 작성하지 않아도 북마크로 통해 graphQL API가 어떻게 동작하는지 경험할 수 있다.

SWAPI GraphQL API

해당 북마크로가서 Root에 정의된 fields들을 JSON과 비슷한 형태로 입력하고 실행하면 요청한 요소의 데이터가 출력이 되는걸 확인 할 수 있다.

{
allPeople{
  people{
    name
    hairColor
    eyeColor
    birthYear
  }
}
  allStarships{
    starships{
      name
      model
      starshipClass
    }
  }
}