GraphQL

Bedakim·2020년 5월 10일
0
post-thumbnail

GraphQL

GraphQL은 API를 위한 쿼리 언어로 웹 클라이언트가 데이터를 서버로 부터 효율적으로 가져올 수 있게 해주며 gql의 문장은 주로 클라이언트 시스템에서 작성하고 호출 한다.

쿼리와 결과가 정확히 동일한 형태인 것을 볼 수 있다.
이것이 GraphQL의 핵심인데 서버에서 클라이언트가
요청하는 필드를 정확히 알고있기 때문에
"항상" 기대 한 결과를 얻을 수 있다.

GraphQL의 위와 같은 이점으로 데이터를 필요한 만큼만 불러올 수 있다.
REST API가 가지는 가장 흔한 문제 중 하나가 바로 데이터를 더 가져오거나, 덜 가져오는 문제인데 이런 일이 발생하는 이유는 클라이언트가 데이터를 다운받는 유일한 방법이 바로 고정된 데이터 구조를 반환하는 엔드포인트에 요청하는 것이기 때문이다.

Overfetch

어플리케이션에서 실제로 필요한 것보다 더 많은 정보를
클라이언트가 다운받는 것.

예를 들어, 화면에 영화 리스트들을 표시해야 하는데 단지
각 영화의 제목만 필요한 경우를 가정했을때.

REST API를 사용한다면 일반적인 경우 /movies 엔드포인트에 요청을 보내면 영화 정보가 구성된 JSON 배열을 반환받을 것이다.

하지만 클라이언트에서는 각 영화의 제목만 필요한 상황이므로, 이 응답 데이터에는 영화의 개봉일, 관람객수 등과 같이 실제로는 필요없는 정보까지 가져오게 됨으로써 데이터를 과하게 불러오게(Overfetch) 되는 것이다.

Underfetch

특정 엔드포인트가 필요한 정보를 충분히 제공하지 못하는 경우를 말한다.

  • 이 경우 클라이언트는 필요한 정보를 모두 확보하기 위하여 추가적인 요청을 보내야만 하는데 그러면 리스트를 불러온 뒤, 리스트 내 각각의 요소들에 대하여 한번씩 더 추가적으로 요청을 보내야 하는 상황이 발생 한다.

위에서 언급한 동일한 어플리케이션에서,
영화 리스트 중 하나를 선택 했을 때 영화에 대한 정보와 함께 선택된 영화의 예고편을 추가로 노출해줘야 할 경우

REST API
/movies/movie-id/trailer 엔드포인트를 추가적으로 제공한다.
필요한 정보를 모두 표시하려면 어플리케이션은 /movie 엔드포인트에 요청을 보내고, 그 다음 각 영화에 대하여 movies/movie-id/trailer 엔드포인트에 요청을 보내야 한다.

하지만 GraphQL를 이용하면 이러한 많은 정보를 한번의 요청으로
해결 할 수 있다.

profile
좌충우돌 우당탕탕 험난한 개발 여정기

0개의 댓글