close
[IT 기술] GraphQL 의 개념 및 특징 장단점
본문 바로가기
그럴듯한 정보

[IT 기술] GraphQL 의 개념 및 특징 장단점

by SweetFist 2024. 3. 4.
반응형

안녕하세요, 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 하나라는 점입니다.

 

<REST API와 GraphQL API의 사용 비교>


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 지속적으로 성장하는 생태계로서, 완성된 명세가 존재하지 않습니다. 따라서 외의 것들은 직접 개발할 밖에 없게 됩니다.
대표적인 예로 파일 업로드가 있는데, 다만 이에 대해 몇가지 대안이 있습니다.

- 요청 필터링의 어려움

GraphQL 클라이언트가 필요한 데이터를 스스로 결정하여 요청하게 됩니다.
따라서 GraphQL 다양한 요청형태에서 잘못된 요청을 필터링하기가 까다롭습니다.

 

 

* 참고

- 카카오 기술블로그(https://tech.kakao.com/2019/08/01/graphql-basic/)

 


 

끝.