GraphQL
- Graph + Query Language
- Facebook에서 개발한 오픈 소스로 제공되는 API를 위한 쿼리 언어
그래프를 사용하는 이유
- 그래프라는 자료구조가 인간의 뇌 구조 및 언어적인 설명과 가장 비슷 (마인드맵 구조와 유사)
- 실제 현실 세계의 많은 현상들을 모델링하기 가장 강력한 도구
- GraphQL에서는 모든 데이터가 그래프 형태로 연결되어 있다고 전제
- 모든 그래프는 한 노드를 루트로 정해서 트리 형태로 정렬할 수 있다는 점에 착안
- 그래프를 누구의 입장에서 정렬하느냐 = 클라이언트가 어떤 데이터를 필요로 하느냐 = 어떤 노드가 루트가 되느냐
GraphQL의 특징
- REST API 방식의 고정된 자원이 아닌 클라이언트 요청에 따라 유연하게 자원을 가져올 수 있다.
- HTTP를 통해 API 서버로 요청을 보내고 응답을 받는다.
- 응답 데이터는 (트리 구조인) JSON 형식으로 받는다.
- 서버 개발자가 작성한 각 필드에 대응하는 resolver 함수로 각 필드의 데이터를 조회할 수 있다.
- GraphQL 라이브러리가 조회 대상 schema가 유효한지 검사한다.
GraphQL의 장단점 (REST API와 비교)
장점
1. 하나의 endpoint 요청
/graphql
이라는 하나의 endpoint로 요청을 받는다.
- 서버는 요청에 따라 query , mutation을 resolver 함수로 전달해서 요청에 응답한다.
- 모든 클라이언트 요청은
POST
메소드를 사용한다.
2. No! under & overfetching
- 여러 개의 endpoint 요청을 할 필요없이 하나의 endpoint에서 쿼리를 이용해 원하는 데이터를 정확하게 API에 요청하고 응답으로 받을 수 있다.
3. 강력한 playground
- graphql 서버를 실행하면 playground라는 GUI를 이용해 resolver 와 schema 를 한 눈에 보고 테스트 해 볼 수 있다. (POSTMAN 과 비슷)
4. 클라이언트 구조 변경에도 지장이 없음
- 클라이언트 구조가 바뀌어도 필요한 데이터를 결정하고 받는 주체가 클라이언트이기 때문에 서버에 지장이 없다.
- 클라이언트에서는 무슨 데이터가 필요한 지에 대해서만 요구사항을 쿼리로 작성하면 된다.
Learn GraphQL In 40 Minutes