GraphQL
What is GraphQL?
- GraphQL은 무언가를 다운 받아서 사용하는 것이 아니다. 하나의 specification, 즉 설명이다. : GraphQL Specification
- GraphQL은 domain specific language이다. 사람들이 원하는 방식대로 구현하게 하는 언어이다.
- 에어비앤비, 메타, 깃헙, 페이팔, 라쿠텐, 트위터 등등 수많은 대기업이 GraphQL을 사용한다.
GraphQL이 해결한 문제들
REST api가 가진 문제
- Ask for what you need, get exactly what. (Overfetching)
- Get many resources in a single request. (Underfetching)
- REST api는 오버페칭, 언더페칭과 같은 문제를 가진다. GraphQL은 이를 해결했다.
Overfetching
Overfetching(오버페칭)
: URL에 request를 넣었을 때 내가 쓰지도 않을 데이터까지 포함해서 불필요하게 너무 많은 데이터를 송신받는 것. 이로 인해 데이터 전송이 느려지고 백엔드가 지나치게 많은 일을 수행해야 한다.
- 우리가 GraphQL query를 API에 보내면 우리는 정확히 요청한 것만 받는다. 즉 GraphQL에서는 필요한 data를 요청한다. 그냥 단순히 data를 달라고 request하는 게 아니라 말이다.
- REST api였다면 엄청나게 많은 JSON 데이터를 한번에 다 받았어야 했을 것이다.
Underfetching
Underfetching(언더페칭)
: 우리가 필요한 것보다 데이터를 적게 받는 일. 즉 API Request가 내가 필요한 정보 data를 다 주지 않는 일.
- 모든 api는 overfetching의 문제를 갖고 있고 그 중 몇몇은 underfetching의 문제를 가진다.
- 특히 REST api는 필요한 데이터를 얻을 때까지 복수의 request를 넣어야 하는 경우가 있다. url을 반복적으로 fetch하는 것이다. REST api를 사용할 때는 하나의 url이 줄 수 있는 것보다 많은 데이터가 필요할 수 있다는 것이다. api request가 늘어난다면 multiple url에서 loading이 필요할 것이고 작업속도는 늘어난다.
- GraphQL은 이를 해결해서 작업 속도를 빠르게 만든다.
GraphQL 실습
- GraphQL 실습
![](https://velog.velcdn.com/images/yoneeki1177/post/154bb932-ac9b-42c2-b1d0-fc68752e2c9e/image.png)
- 이 화면에서 root를 클릭해보면 GraphQL 문법의 형태가 나타난다. 빨간 색으로 적은 글씨가 해당 GraphQL 쿼리의 REST api 형태일 것이다.
![](https://velog.velcdn.com/images/yoneeki1177/post/78cae517-131a-48f5-ace6-fe33c0ec93e3/image.png)
- 테스트 1
![](https://velog.velcdn.com/images/yoneeki1177/post/4f36eae4-a0e8-4280-abe7-03f7898f088f/image.png)
- GraphQL은 오버페칭과 언더페칭에 대한 해결말고도 모든 것이 type을 가지고 있다는 것, 그리고 자동완성 등의 장점을 가진다.
- 위의 그림을 보면 우리는 allFilms에서 필요한 두 가지를 선택했고, 그리고 더 자세히 살펴보면 films라는 array에서 필요한 것을 정해서 리퀘스트했다.
- 테스트 2
![](https://velog.velcdn.com/images/yoneeki1177/post/d36bab0b-134a-4adb-8786-1ed233c4ae0e/image.png)
![](https://velog.velcdn.com/images/yoneeki1177/post/857a9c7d-059e-49c0-aac2-1a0c8ffa7035/image.png)