티스토리 뷰
GraphQL
- API 를 위한 쿼리 언어
- 클라이언트에게 요청한만큼의 데이터를 제공하는 것에 우선순위를 둠
- 단일 API 호출로 다양한 데이터 소스에서 데이터를 끌어오는 요청을 구성할 수 있도록 지원
- 기존 쿼리에 영향을 미치지 않고 필드를 추가 / 폐기할 수 있는 유연성 제공
- 필요한 데이터만을 쿼리할 수 있도록 함 (기존의 API 호출 방식은 서버에서 정의한 데이터 구조만을 한번에 하나씩 가져올 수 있음)
- API 개발자는 클라이언트가 서비스를 통해서 쿼리할 가능성이 있는 모든 데이터를 설명하는 스키마를 생성하는데, 여기서 GraphQL 스키마는 개체 유형으로 구성됨. 어떤 종류의 개체를 요청할 수 있고, 어떤 필드가 있는지 정의
- 쿼리가 수신되면 GraphQL 은 스키마에 대해서 쿼리를 검증 => 쿼리를 실행
- API 쿼리 구문 정의 / 검증 뿐만 아니라 다양한 의사결정을 설계자에게 맡김.
예를 들어, id 에 따른 저자 관련 정보를 가져올 때 아래와 같이 가져오면 된다.
query Author($id:Int){
author(id:$id){
name
email
}
}
그러나 여기서 주소도 가져오고 싶다면, 단순히 아래처럼 필드를 추가해주면 된다.
query Author($id:Int){
author(id:$id){
name
email
address
}
}
https://www.redhat.com/ko/topics/api/what-is-graphql
GraphQL(그래프 QL) 개념, 사용, 용어, 장단점 및 무료 다운로드
GraphQL이란 쿼리 언어이며, 애플리케이션 프로그래밍 인터페이스(API) 서버 런타임으로서 데이터를 제공합니다. swagger 및 javascript api 언어 호출을 사용합니다.
www.redhat.com
REST vs GraphQL vs gRPC
1. Rest
장점
- 성능 : 빠른 반복과 표준 표현이 필요한 시스템에 적함
- 확장성 : 많은 수의 구성 요소와 구성 요소 간의 상호 작용 지원
- 단순성 : 아키텍처를 단순화 / 분리하는 균일한 인터페이스가 존재
- 대부분의 개발자가 이미 익숙
- 빠른 학습이 가능
단점
리소스가 복잡할 수록 여러 API를 사용해야 하거나 응답이 무거울 가능성이 존재
REST에 대한 표준을 잘 만들어야 함.
- 엔드포인트로 리소스를 제공하기 때문에 하나의 API 가 아니라 전체적인 엔드포인트를 보며 문맥 및 의미하는 바가 잘 표현되었는지 검증해야 함
2. gRPC
구글에서 설계 / 개발한 Google Remote Procedure Call
대부분의 권한은 클라이언트에 의존 / 처리 및 계산은 원격 서버에 의존
장점
- 데이터를 가볍고 빠르게 요청할 수 있음
- 클라이언트가 원격 시스템이 로컬인것처럼 직접 메소드 호출 가능
- 프로토콜 버퍼를 사용하여 데이터 전송을 하기 위해서 JSON, XML 이 아닌 직렬화된 데이터로 인터페이스를 정의
- 안정적이고 빠른 HTTP/2 를 사용
정해진 양의 데이터 / 클라이언트가 저전력이거나 리소스를 보존하려는 시스템에 적합
ex) IoT 장치
3. GraphQL
정확한 요청에 초점을 맞추고 필요한 것을 정확하게 전달하기 위한 방식
클라이언트 중심의 접근 방식
장점
- 클라이언트가 원하는 데이터 / 원하는 방식과 형식을 결정
- 클라이언트가 요청한 것만 전달
- 크로스 플랫폼이며 12개 이상의 언어를 지원 (유연함)
깃헙이 사용 중임 2016년에 전환됨
Rest는 원하는 데이터를 위해 여러 요청을 해야 하고 / 요청에서 데이터를 과도하게 가져오는 경향이 있음
https://giljae.com/2022/08/05/Restful-vs-gRPC-vs-GraphQL.html
Restful vs gRPC vs GraphQL - Giljae Joo (주길재)
얼마전 프로젝트 진행 시, RESTful의 엔드포인트에 대해서 문제가 생겼었다. 구현상에 문제는 없지만 Addressability를 보장해야 하는 DX관점에서의 문제였다. 지금이야 REST로 API를 만들어서 제공하지
giljae.com
'TIL - 2022' 카테고리의 다른 글
스프링부트 시큐리티 security (0) | 2022.08.26 |
---|---|
TIL 20220824 (GCP 로 장고, mysql 서버 연결) (0) | 2022.08.25 |
TIL 20220810 (Exception Handler 구현, JsonInclude) (0) | 2022.08.12 |
TIL 20220809 (FieldError, 웹소켓, MSA, ResponseEntity) (0) | 2022.08.09 |
TIL 20220803 (페이로드, CORS, JWT, HTTP 헤더 set-cookie, 장고의 Lazy-loading) (0) | 2022.08.03 |