WEB

GraphQL이란

ㅇㄱ9 2022. 2. 23. 21:09
728x90

GraphQL이란 API에 대한 쿼리 언어이며 기존 데이터로 이러한 쿼리를 수행하기 위한 런타임이다.

크게 아래와 같은 특징들이 있다. 

 

1. 필요한 것을 구체적으로 요청.

[출처]https://graphql.org/

 

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 생태계

[출처] https://landscape.graphql.org/?zoom=150

 

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 쿼리를 함께 보낸다.

 

 

------------------------

참고 사이트 

728x90
반응형