GraphQL은 페이스북에서 만든 쿼리 언어
스키마를 통해, 사용자만의 명령어를 만들고 사용할 수 있다.
번들 크기가 줄어, 클라이언트 속도가 빠르다!
아폴로 스튜디오를 이용해, 작성한 코드를 쉽게 테스팅 해볼 수 있다.
- Structed Query Language(이하 sql) 와 언어적 구조차이가 큼
- SQL - 데이터베이스 시스템에 저장된 데이터를 효율적으로 가져오는 것이 목적
- 주로 백엔드 시스템에서 작성하고 호출
- GQL - 웹 클라이언트가 데이터를 서버로부터 효율적으로 가져오는 것이 목적
- 주로 클라이언트 시스템에서 작성하고 호출
탄생배경
다시말해, REST 방법론이 있는데도 새로운 언어인 GraphQL 이 탄생해야했던 배경은 무엇인가?
RESTful API 로는 다양한 기종에서 필요한 정보들을 일일히 구현하는 것이 힘들었다.
예로, iOS 와 Android 에서 필요한 정보들이 조금씩 달랐고, 그 다른 부분마다 API 를 구현하는 것이 힘들었다.
이 때문에 정보를 사용하는 측에서 원하는 대로 정보를 가져올 수 있고,
보다 편하게 정보를 수정할 수 있도록 하는 표준화된 Query language 를 만들게 되었다
기존에 REST API에서는 정보를 얻기 위해 여러번 네트워크를 호출하거나, 다양한 API를 호출해야 했다.
하지만 GraphQL은 단 하나의 Endpoint를 제공하며, 단 한 번의 요청으로 모든 정보를 가져온다.
REST API 와의 차이점 ( 장점 )
GraphQL은 필요한 정보만 선택해서 가져올 수 있다.
- REST API는 필요한 정보를 가져오기위해서, 쓸데없는 정보도 같이 가져와야하는 Over-fetching 문제가 있다.
Over-fetcing
API를 호출 시 필요보다 많은 데이터(사용하지 않을)를 가져오는 것이다.
Under-fetching
하나의 endpoint로의 요청으로는 충분한 데이터를 받지 못하는 것을 말하고이로 인해서 두 개 혹은 그 이상의 endpoint에 요청을 해야한다.
GraphQL은 하나의 요청으로 여러개의 데이터를 한번에 가져올 수 있다.
- REST API는 여러개의 데이터를 가져오려면, 여러개의 요청이 필요하는 Under-fetching 문제가 있다.
Apollo란?
GraphQL이 적용된 프로젝트를 쉽게 만들 수 있게 해주는 Node.js 패키지
ApolloServer : GraphQL이 적용된 서버를 쉽게 만들어줌
ApolloClient : GraphQL을 통해, 클라이언트상의 LocalState를 이용할 수 있게 만들어줌
RESTful 과의 차이점
- GraphQL API 는 주로 전체 API를 위해서 하나의 Endpoint 를 사용한다.
(RESTful API 는 Resource 마다 하나의 Endpoint 를 가지고, 그 Endpoint 에서 그 Resource 에 대한 (거의) 모든 것을 담당한다.) - GraphQL API 는 요청할 때 사용한 Query 문에 따라 응답의 구조가 달라진다.
- GraphQL API 는 유연하다 백엔드에서 지정해놓는 틀이 거의 없기 때문이다.
graphQL 은 뷔페 RESTful API 는 세트메뉴와 같다
뷔페는 내가 먹고 싶은것만 먹을수 있지만 세트메뉴는 내가 필요하지 않은것도 들어있다.
장점
1) HTTP 요청의 횟수를 줄일 수 있다.
- RESTful 은 각 Resource 종류 별로 요청을 해야하고, 따라서 요청 횟수가 필요한 Resource 의 종류에 비례한다.
- 반면 GraphQL 은 원하는 정보를 하나의 Query 에 모두 담아 요청하는 것이 가능하다.
2) HTTP 응답의 Size 를 줄일 수 있다.
- RESTful 은 응답의 형태가 정해져있고, 따라서 필요한 정보만 부분적으로 요청하는 것이 힘들다.
- 반면 GraphQL 은 원하는 대로 정보를 요청하는 것이 가능하다.
단점
1) File 전송 등 Text 만으로 하기 힘든 내용들을 처리하기 복잡하다.
2) 고정된 요청과 응답만 필요할 경우에는 Query 로 인해 요청의 크기가 RESTful API 의 경우보다 더 커진다.
3) 재귀적인 Query 가 불가능하다. (결과에 따라 응답의 깊이가 얼마든지 깊어질 수 있는 API 를 만들 수 없다.)
GraphQL
- 서로 다른 모양의 다양한 요청들에 대해 응답할 수 있어야 할 때
- 대부분의 요청이 CRUD(Create-Read-Update-Delete) 에 해당할 때
RESTful
- HTTP 와 HTTPs 에 의한 Caching 을 잘 사용하고 싶을 때
- File 전송 등 단순한 Text 로 처리되지 않는 요청들이 있을 때
- 요청의 구조가 정해져 있을 때
'dev > 개발일지' 카테고리의 다른 글
해시 함수들 속도 || 그 외 암호시스템 (0) | 2022.02.08 |
---|---|
Node.js [ Koa ] 에대해서 || 사용법 (0) | 2022.01.14 |
프론트는 axios, 서버는 got (예정) (0) | 2021.11.26 |
apache-jmeter 오픈소스 테스트 툴 mac (0) | 2021.10.14 |
winston, morgan 함께 사용하여 로깅남기기 (0) | 2021.08.16 |