GraphQL은 API를 위한 쿼리 언어로 웹 클라이언트가 데이터를 서버로 부터 효율적으로 가져올 수 있게 해주며 gql의 문장은 주로 클라이언트 시스템에서 작성하고 호출 한다.
쿼리와 결과가 정확히 동일한 형태인 것을 볼 수 있다.
이것이 GraphQL의 핵심인데 서버에서 클라이언트가
요청하는 필드를 정확히 알고있기 때문에
"항상" 기대 한 결과를 얻을 수 있다.
GraphQL의 위와 같은 이점으로 데이터를 필요한 만큼만 불러올 수 있다.
REST API가 가지는 가장 흔한 문제 중 하나가 바로 데이터를 더 가져오거나, 덜 가져오는 문제인데 이런 일이 발생하는 이유는 클라이언트가 데이터를 다운받는 유일한 방법이 바로 고정된 데이터 구조를 반환하는 엔드포인트에 요청하는 것이기 때문이다.
어플리케이션에서 실제로 필요한 것보다 더 많은 정보를
클라이언트가 다운받는 것.
예를 들어, 화면에 영화 리스트들을 표시해야 하는데 단지
각 영화의 제목만 필요한 경우를 가정했을때.
REST API를 사용한다면 일반적인 경우 /movies 엔드포인트에 요청을 보내면 영화 정보가 구성된 JSON 배열을 반환받을 것이다.
하지만 클라이언트에서는 각 영화의 제목만 필요한 상황이므로, 이 응답 데이터에는 영화의 개봉일, 관람객수 등과 같이 실제로는 필요없는 정보까지 가져오게 됨으로써 데이터를 과하게 불러오게(Overfetch) 되는 것이다.
특정 엔드포인트가 필요한 정보를 충분히 제공하지 못하는 경우를 말한다.
위에서 언급한 동일한 어플리케이션에서,
영화 리스트 중 하나를 선택 했을 때 영화에 대한 정보와 함께 선택된 영화의 예고편을 추가로 노출해줘야 할 경우
REST API는
/movies/movie-id/trailer 엔드포인트를 추가적으로 제공한다.
필요한 정보를 모두 표시하려면 어플리케이션은 /movie 엔드포인트에 요청을 보내고, 그 다음 각 영화에 대하여 movies/movie-id/trailer 엔드포인트에 요청을 보내야 한다.
하지만 GraphQL를 이용하면 이러한 많은 정보를 한번의 요청으로
해결 할 수 있다.