GraphQL이란 API에 대한 쿼리 언어이며 기존 데이터로 이러한 쿼리를 수행하기 위한 런타임이다.
크게 아래와 같은 특징들이 있다.
1. 필요한 것을 구체적으로 요청.
GraphQL 쿼리를 API로 전송하여 필요한 것을 얻을 수 있는데, 이때 GraphQL 쿼리는 항상 예측 가능한 결과를 반환한다.
GraphQL을 사용하는 앱은 서버가 아닌 앱이 반환 받을 데이터를 제어하기 때문에 빠르고 안정적이다.
2. 단일 요청으로 많은 데이터 확보
GraphQL 쿼리는 한 리소스의 속성뿐만 아니라 리소스 간의 참조를 원활하게 접근할 수 있다.
일반적인 REST API는 여러 URL 로딩이 필요한 반면, GraphQL API는 앱이 필요로 하는 모든 데이터를 하나의 요청으로 가져오기 때문에 GraphQL을 사용하는 앱은 느린 모바일 네트워크 연결에서도 빠르게 동작할 수 있다.
3. 타입 시스템을 통한 가능한 작업 설명
GraphQL API는 엔드포인트가 아닌 유형과 필드를 기준으로 구성되어 있고, 단일 엔드포인트에서 데이터의 모든 기능에 액세스할 수 있다.
GraphQL은 앱이 가능한 것만 요청하고 명확하고 유용한 오류를 제공하도록 보장하기 위해 타입을 사용한다.
앱은 수동 구문 분석 코드(manual parsing code) 작성을 방지하기 위해 타입을 사용할 수 있습니다.
4. 버전없이 API 개선 가능
기존 쿼리에 영향을 주지 않고 GraphQL API에 새 필드 및 유형을 추가할 수 있다.
GraphQL APIs는 진화하는 단일 버전(a single evolving version)을 사용하여 앱에 새로운 기능에 대한 지속적인 액세스를 제공하고 보다 깨끗하고 유지 관리가 용이한 서버 코드를 작성할 수 있게 해준다.
5. 기존 데이터와 코드 사용
GraphQL은 특정 스토리지 엔진의 제한 없이 전체 애플리케리션에 걸쳐 균일한 API를 생성한다.
여러 언어로 제공되는 GraphQL 엔진으로 기존 데이터와 코드를 활용하는 GraphQL API를 작성한다.
타입 시스템의 각 필드에 함수를 제공하고 GraphQL은 이를 최적의 동시성(optimal concurrency)으로 호출한다.
Grpahql 생태계
REST vs GraphQL 데이터 형식
- REST
: 각각의 리소스는 URL 엔드포인트로 정의되고 특정 HTTP Method로 요청하여 데이터를 검색한다.
- GET /books/1 요청에 대한 데이터
-> 리소스의 타입 또는 형태와 리소스를 가져오는 방식이 연결되어 있다. /books 라는 리소스를 요청하면 위의 JSON형식의 데이터가 주어진다.
- GraphQL
-> GraphQL에서는 리소스의 유형과 리소스를 가져오는 방식이 완전하게 분리되어 있다. 즉 Book과 Author의 형태만을 정의하였고, client에서 데이터를 어떻게 요청할 수 있는지에 대해서는 아무정보가 없다.
Book과 Author에 접근하기 위해서는 Query타입이 필요하고 아래와 같이 작성할 수 있다.
- GET /graphql?query={ book(id: "1") { title, author { firstName } } } 요청에 대한 데이터
->하나의 엔드포인트만 존재하고, 해당 엔드포인트로 요청시 원하는 리소스와 해당 리소스에서 원하는 필드를 특정하는 GraphQL 쿼리를 함께 보낸다.
------------------------
참고 사이트
'WEB' 카테고리의 다른 글
Reflow, Repaint 와 7가지 렌더링 최적화방법 (2) | 2022.04.25 |
---|---|
브라우저가 웹페이지를 그리는 방법 (렌더링) (0) | 2022.04.20 |
웹 폰트와 최적화 (0) | 2021.11.30 |
SVG파일 미리보기 (0) | 2021.10.25 |
프로그레시브 웹앱 (PWA) (0) | 2021.08.05 |