GraphQL이란?
GraphQL은 Graph Query Language의 약자로 이름에서 확인 가능하듯 SQL과 같은 쿼리 언어입니다. 이러한 쿼리 언어로 작성된 메시지를 통해 서버 또는 클라이언트의 작업을 수행해 주는 라이브러리가 존재하는데 이는 GrpahQL 공식 사이트에서 언어 및 환경마다 사용할 수 있는 라이브러리를 확인할 수 있습니다.
클라이언트가 필요한 데이터에 대한 쿼리를 선언하여 GraphQL에 넘기면 GraphQL은 쿼리를 해석하여 서버에서 필요한 데이터를 가져온 후 클라이언트에 해당 데이터를 반환하는 방식입니다.
GraphQL은 API 쿼리 언어일 뿐, SQL도 NoSQL도 아닙니다!
Schema
스키마는 데이터 구조를 정의한 것으로 어떤 데이터들이 사용될 수 있고, 어떤 요청 및 구독이 전달 및 실행될 수 있는지가 명시되어 있습니다. 각 작업을 선언해둔 스키마를 바탕으로 구현할 코드를 작성하게 됩니다.
Query
데이터를 조회할 때 사용됩니다.
아래와 같은 방법으로 데이터를 조회하는 쿼리를 작성하여
아래와 같은 응답을 받을 수 있습니다.
Mutation
데이터를 추가, 수정, 삭제할 때 사용됩니다.
Subscriptions
특정 리소스가 업데이트 될 때마다 알림을 받을 수 있습니다.
웹 소켓을 통해 실시간으로 데이터를 업데이트할 수 있습니다.
GraphQL의 파이프라인
- GraphQL Query
- Query Language Processor (Parse/Validate)
- GraphQL Resolver: RDB/NoSQL
- Output (JSON)
GrpahQL의 장단점
장점 (+ RESTful API와 비교를 통한)
GraphQL은 하나의 엔드포인트만 사용하기 때문에 하나의 요청으로 여러 정보를 가져올 수 있습니다. 또한 RESTful API의 경우 필요 없는 데이터까지 불러오게 되는 Overfetching와 하나의 요청으로 충분한 데이터를 불러올 수 없는 Underfetching이 발생하여 오버헤드가 큰 서비스에 적합하지 않지만 GrpahQL은 클라이언트가 필요로 하는 정보만을 선택하여 요청할 수 있고, 하나의 요청으로 필요한 모든 데이터를 가져올 수 있기 때문에 오버헤드가 큰 서비스에 적합합니다.
단점
요청들이 복잡한 메시지로 구성되어 있기 때문에 캐싱의 어려움이 존재하며, 복잡한 쿼리를 해석하여 작업을 실행하기 때문에 서버에 큰 부담을 줄 수 있습니다.
참고