graphQL이란?
- Graph QL(이하 gql)은 Structed Query Language(이하 sql)와 마찬가지로 쿼리 언어입니다. 하지만 gql과 sql의 언어적 구조 차이는 매우 큽니다. sql은 데이터베이스 시스템에 저장된 데이터를 효율적으로 가져오는 것이 목적이고, gql은 웹 클라이언트가 데이터를 서버로 부터 효율적으로 가져오는 것이 목적입니다. sql의 문장(statement)은 주로 백앤드 시스템에서 작성하고 호출 하는 반면, gql의 문장은 주로 클라이언트 시스템에서 작성하고 호출 합니다.

Q: REST를 잘 사용하지만 왜 GreapQL을 사용해야하나요?
A: REST의 부족한 기술을 보완하기 위해서 나왔다. 하지만 뭐가 더 낫다는 게 아니라 상황에 맞게 사용하면 된다.(npm과 yarn 처럼)
graphQL의 흐름

graphQL의 장점
- 프론트엔드 개발자는 백엔드 개발자가 REST API 개발을 마칠 때까지 기다리지 않아도 된다.
- 주로 개발 과정은 REST API 개발 > API에 호출해서 데이터 이용
하지만 GraphQL은 병렬로 작업 가능하다.
- Overfetching / Underfetching을 막아준다.
- Overfetching: endpoint로 요청하여 응답 받은 정보가 사용하지 않을 불필요한 데이터를 담고 있는 경우(get 데이터 정보 초과)
- Underfetching: 하나의 endpoint로 필요한 모든 데이터 요청을 처리하지 못한다는 의미(get 데이터 정보 부족)
- REST는 필요한 데이터를 만들기 위해서 여러 번 요청을 보내야 하는데, GraphQL은 한 번의 요청으로 데이터를 가져올 수 있다.

graphQL의 단점
- 프런트엔드 개발자가 따로 배워야한다.
- 백엔드에 Schema 및 Type을 정해줘야 한다.
- REST API 보다 데이터를 캐싱하는 게 까다롭다.
- REST API는 URL을 사용하여 리소스에 엑세스하므로 리소스 URL이 식별자로 있으므로 리소스 수준에서 캐시할 수 있다. 하지만 GraphQL에서는 동일한 엔터티에서 작동하더라도 각 쿼리가 다를 수 있기 때문에 매우 복잡하다.(GraphQL 위에 구축된 대부분의 라이브러리는 효율적인 캐싱 메커니즘을 제공한다.)