안녕하세요, SweetFist 입니다.
오늘은 IT 기술과 관련된 내용을 소개하려고 합니다.
프로그래밍 언어에는 다양한 언어가 존재하는데요, 바로 데이터를 처리하는 언어인 GraphQL입니다.
다들 데이터 질의어인 SQL에는 많이 들어보고, 자격증 시험도 있을 정도로 익숙한 언어입니다.
그렇다면 GraphQL은 무엇일까요?
1. GraphQL이란?
GraphQL은 페이스북이 2012년에 개발하여 2015년에 공개적으로 발표된 데이터 질의어입니다.
Structed Query Language(이하 sql)와 마찬가지로 쿼리 언어이지만 gql과 sql의 언어적 구조 차이는 매우 크며,
실전에서 쓰이는 방식의 차이도 매우 큽니다.
sql은 데이터베이스 시스템에 저장된 데이터를 효율적으로 가져오기 위함이고,
gql은 web 클라이언트가 데이터를 서버로부터 효율적으로 가져오는 것이 목적입니다.
sql의 statement는 대개 백앤드 시스템에서 작성 및 호출하는 반면,
gql의 statement는 주로 클라이언트 시스템에서 작성 및 호출을 합니다.
2. 기존 REST API 통신의 한계
- 특정 기능을 위해 여러번 API가 호출 됨
- 특정 요청에 fit한 응답을 돌려주기 위해서는 API를 새로 만들어야함
- API 유지보수의 어려움
한 문장으로 요약하면, 관리해야 할 EndPoint의 증가로 인하여 발생되는 문제점이 많습니다.
3. GraphQL의 특징
GraphQL의 가장 큰 특징은 다음 그림과 같이 End-Point가 하나라는 점입니다.
4. GraphQL의 장점
GraphQL은 위에서 언급한 특징을 기반으로 다음과 같은 장점을 지닙니다.
- 하나의 Endpoint
단 한 개의 Endpoint를 지님으로써, API나 View를 따로 구성할 필요가 없어집니다.
요청을 보낼때는 정해진 한 군데로만 요청을 보내면 되고, 그 외의 API를 신경쓸 필요가 없어지기 때문에 유지보수가 용이합니다.
- Fit한 Data
GraphQL은 한번의 요청으로 원하는 모든 데이터를 서버로부터 요청하여 가져옵니다.
따라서 기존에 REST API만을 사용할 때 발생하는 Overfetching이나 Underfetching등의 문제가 발생하지 않습니다.
Overfetching
원하는 data 이상의 정보를 요청받는 것, data의 정제에 리소스가 낭비
Underfetching
원하는 data의 정보를 요청받기 위해 여러번 요청을 보내는 것, 네트워크를 통해 여러번 접근을 하여 리소스 낭비
- 기종에 상관없는 API
Facebook의 GraphQL blog에서는 iOS, Android에 따라 다른 기종을 위해 제공하는 API 구현이 힘들었다고 하는데요,
RESTful API로는 일일히 다른 기종을 위해 API를 구현해야 했다고 말하며, 표준화된 쿼리언어를 개발했다고 합니다.
5. GraphQL의 단점
GraphQL의 단점으로 알려진 것들로는 다음과 같은 내용이 있습니다.
- HTTP 캐싱
HTTP의 캐싱 전략은 각각 URL에 각자의 정책을 설정하는 방식으로 이루어 지는데, RESTful API는 이를 그대로 사용이 가능합니다.
그러나 GraphQL은 하나의 URL로 처리하기에, HTTP에서 제공하는 캐싱 전략을 그대로 사용하는 것은 불가능합니다.
따라서 GraphQL만의 캐싱 방법을 제공하게 되는데, 대표적으로는 영속쿼리(persisted query), 아폴로엔진(Apollo Engine) 등이 있습니다.
- 파일 업로드
GraphQL은 지속적으로 성장하는 생태계로서, 완성된 명세가 존재하지 않습니다. 따라서 이 외의 것들은 직접 개발할 수 밖에 없게 됩니다.
대표적인 예로 파일 업로드가 있는데, 다만 이에 대해 몇가지 대안이 있습니다.
- Base64 인코딩을 사용
- Upload를 위해 분리된 API 사용
- apollo-upload-server 같이 GraphQL multipart 요청 명세를 구현하는 라이브러리를 사용
- 요청 필터링의 어려움
GraphQL은 클라이언트가 필요한 데이터를 스스로 결정하여 요청하게 됩니다.
따라서 GraphQL의 다양한 요청형태에서 잘못된 요청을 필터링하기가 까다롭습니다.
* 참고
- 카카오 기술블로그(https://tech.kakao.com/2019/08/01/graphql-basic/)
끝.
'그럴듯한 정보' 카테고리의 다른 글
[IT 기술] DB 데이터베이스 파티셔닝, 샤딩 (0) | 2024.03.16 |
---|---|
[IT 기술] 데이터베이스 - DDL, DML, DCL이란? (0) | 2024.03.08 |
일본여행 간사이 공항에서 난바역 가는법 총정리 (0) | 2024.02.27 |
해외여행 갈때 로밍하는법(skt 로밍요금제) (2) | 2024.02.24 |
회원가입했던 사이트 탈퇴 한번에 하는 법 (1) | 2024.02.08 |