GraphQL은 쿼리 언어이자 애플리케이션 프로그래밍 인터페이스(API)를 위한 서버측 런타임으로, 클라이언트에게 요청한 만큼의 데이터를 제공하는데 우선 순위를 둡니다.
GraphQL은 API를 더욱 빠르고 유연하며 개발자 친화적으로 만들기 위해 설계됐다.
또한 REST를 대체할 수 있는 GraphQL은 개발자가 단일 API 호출로 다양한 데이터 소스에서 데이터를 끌어오는 요청을 구성할 수 있도록 지원합니다.
또한 GraphQL은 API 유지 관리자에게 기존 쿼리에 영향을 미치지 않고 필드를 추가하거나 폐기할 수 있는 유연성을 부여합니다.
개발자는 자신이 선호하는 방식으로 API를 빌드할 수 있으며, GraphQL 사양은 이러한 API가 예측 가능한 방식으로 작동하도록 보장합니다.
API 개발자는 GraphQL을 사용해 클라이언트가 서비스를 통해 쿼리할 가능성이 있는 모든 데이터를 설명하는 스키마를 생성합니다.
GraphQL 스키마는 개체 유형으로 구성되어 어떤 종류의 개체를 요청 할 수 있으며 어떠한 필드가 있는지 정의합니다.
쿼리가 수신되면 GraphQL은 스키마에 대해 쿼리를 검증한 후 검증된 쿼리를 실행합니다.
API 개발자는 스키마의 각 필드를 리졸버라고 불리는 기능에 첨부합니다.
GraphQL 장점
- GraphQL 스키마는 GraphQL 애플리케이션에 신뢰할 수 있는 단일 소스를 하나 설정합니다. 조직은 이를 통해 전체 API에 페더레이션할 수 있게 됩니다.
- GraphQL 호출은 단일 왕복으로 처리되며 클라이언트는 오버페칭 없이 요청한 결과만 얻습니다.
- 엄격하게 정의된 데이터 유형은 클라이언트와 서버 간 통신 오류를 줄여줍니다.
- GraphQL은 세부 검사를 수행합니다. 클라이언트는 사용 가능한 데이터 유형 목록을 요청할 수 있습니다. 자동 생성 문서의 경우 이상적인 방식이죠.
- GraphQL은 애플리케이션 API가 기존 쿼리를 중단하지 않고도 진화할 수 있도록 허용합니다.
- REST API로 사용할 수 없는 기능을 제공하기 위해 대부분의 오픈소스 GraphQL 확장 기능을 사용할 수 있습니다.
- GraphQL은 특정 애플리케이션 아키텍처를 지정하지 않으므로 기존 REST API에 추가하여 기존 API 관리 툴과 연동할 수 있습니다.
GraphQL 단점
- REST API에 친숙한 개발자의 경우 GraphQL를 학습하는 데 시간이 필요합니다.
- GraphQL은 데이터 쿼리의 상당 작업을 서버측으로 옮겨 서버 개발자 작업의 복잡성이 커집니다.
- 구현 방식에 따라 GraphQL은 REST API이 아닌 다른 API관리 적략을 필요로 할 수 있습니다.
- 캐싱이 REST보다 훨씬 복잡합니다.
- API 유지관리자의 경우 유지 관리 가능한 GraphQL 스키마를 작성하기 위한 추가 태스크를 수행해야한다.