GraphQL
API용 쿼리 언어이다.
등장 배경 및 필요성
페이스북의 개발자들이 페이스북 앱을 구축하면서 필요성을 느껴서 개발했다.#
클라이언트에서 필요한 데이터와 서버의 쿼리 간의 간극이 있을 때 언더패치, 오버패치가 자주 발생한다.
특징
- 쿼리의 형태가 계층적이다.
- 강타입
- 인터페이스만을 제공한다.(특정 스토리지나 언어, 프레임워크 등에 종속적이지 않음)
장점
- 오버패치 예방: 클라이언트에서 정확히 필요한 데이터만을 골라서 요청할 수 있다.
- 언더패치 예방: 여러 쿼리를 한 번에 요청할 수 있다.
- 쿼리의 형태와 응답의 형태가 같으므로 클라이언트가 응답의 형태를 바로 알 수 있다.
- 새 필드나 타입 추가시 클라이언트의 수정이 요구되지 않는다.
단점
- REST API에 비하면 학습장벽이 있고 서버 구현이 복잡하다.
- 클라이언트에서 쿼리 구성에 더 많은 신중함이 요구된다.
쿼리 및 응답 예시
쿼리 예
{
book(id: "book1") {
title
summary
author {
name
age
}
}
}
응답 예
{
"data": {
"book": {
"title": "왠지 엄청 재밌는 책",
"summary": "왠지 엄청 재미있다.",
"author": {
"name": "김영선",
"age": 534
}
}
}
}
REST API와 비교
GraphQL이 추천되는 경우
- 오버패칭과 언더패칭 이슈를 줄이며 유연한 방식으로 데이터를 가져와야 함
- 여러 리소스를 한 번에 요청해야 함
- 데이터 사이 관계가 복잡함
REST API가 더 권장되는 경우
- 간단한 CRUD 작업만이 필요함
- 캐싱이 중대사항임
참고
728x90