GraphQL이란 무엇일까?

LUCAS·2023년 8월 6일
0

필자는 회사의 업무에 GraphQL을 활용하고 있다.
프론트엔드 엔지니어로서 활용하는 것은 그다지 어렵지 않았지만, 가끔씩 "이 기술에 대해 한번 알아보고 싶다"라는 생각이 자주 들게 되었다.

그러면 지금부터는 내가 가진 궁금증을 작성하고 이를 하나씩 조사하는 방식으로 문서에 기술하도록 하겠다.

GraphQL의 어원은 무엇일까?

나는 기술에 대해 알아볼 때, 먼저 그 기술의 명칭을 주의깊게 살펴보는 습관을 가지고 있다.
일반적으로 해당 기술의 특색, 특징을 가장 잘 표현하도록 네이밍하는 것이 관례라 여기기 때문이다.

GraphQL에대한 첫 느낌은 어색했다.
Graph + Query + Language의 조합이라고는 생각되는데, Graph는 어떠한 의미로 혼용되는지 궁금하게 되었다.

Graph란?

우리 회사의 AI Chat bot 리티는 아래와 같이 답변했다.

그래프(Graph)란, 객체 간의 관계를 표현하기 위한 자료구조입니다. 노드(Node)와 엣지(Edge)로 이루어진 그래프는, 객체 간의 관계를 직관적으로 파악할 수 있으며, 객체 간의 연결 관계를 표현하기 위한 다양한 알고리즘에서 활용됩니다.

요약하자면 더 유연하고 복잡한 데이터 구조를 다루기 위해 개발된 쿼리 언어로 보여진다.

유연하고 복잡한 데이터 구조?

기술은 항상 부족한 무언가를 개선하기위해 필히 등장해왔다.
그럼 GraphQL이 개선하고자 하는 것은 무엇인가?

기존 REST API 통신의 한계

기존 REST API의 문제점을 알아보자.

  1. 특정 기능을 위해 여러번 API가 호출 됨
  2. 특정 요청에 Fit한 응답을 돌려주기 위해서는 API를 새로 만들어야함
  3. API 유지보수의 어려움

한 문장으로 요약하면, 관리해야할 Endpoint의 증가로 인하여 발생되는 문제점이라 할 수 있다.

그럼 GraphQL은 이를 어떻게 해결할 수 있는가?

GraphQL의 특징

Graphql의 가장 큰 특징은 다음 그림과 같이 Endpoint가 하나라는 점이다.
GraphQL의 특징

기존에 REST API에서는 정보를 얻기 위해 여러번 네트워크를 호출하거나, 다양한 API를 호출해야 했다.
하지만 GraphQL은 단 하나의 Endpoint를 제공하며, 단 한 번의 요청으로 모든 정보를 가져온다.

GraphQL의 장점

1. 하나의 Endpoint

한 개의 Endpoint를 지님으로서, API나 View를 따로 구성할 필요가 없습니다.
요청을 보낼 때는 정해진 한 군데로만 요청을 보내면 되고, 그 외의 API를 신경쓸 필요가 없어져, 유지보수가 용이해진다.

2. Fit한 Data

GraphQL은 한 번의 요청으로 원하는 모든 데이터를 서버로부터 요청해서 가져온다.
따라서 기존에 REST API만을 사용할 때 발생하는 Overfetching이나 Underfetching 등의 문제가 발생하지 않는다.

  • Overfetching: 원하는 Data 이상의 정보를 요청받는 것, Data의 정제에 리소스가 낭비된다.
  • Underfetching: 원하는 Data의 정보를 요청받기 위해 여러번 요청을 보내는 것, 네트워크를 통해 여러번의 접근을 하여 리소스가 낭비된다.

GraphQL의 단점

1. HTTP 캐싱

HTTP의 캐싱 전략은 각각 URL에 각자의 정책을 설정하는 방식으로 이루어지는데, RESTFUL API는 이를 그대로 사용이 가능하다.

그러나 GraphQL은 하나의 URL로 처리하기에, HTTP에서 제공하는 캐싱 전략을 그대로 사용하는 것은 불가능하다.

따라서 GraphQL만의 캐싱 방법을 제공하게 되는데, 개표적으로는 영속쿼리(persisted query), 아폴로엔진(Apollo Engine) 등이 있다.

Apollo?
GraphQL Apollo는 GraphQL API를 쉽게 구축하고 관리할 수 있도록 도와주는 오픈소스 프레임워크입니다.
pollo는 캐싱, 오류 처리, 서버 사이드 렌더링 등 다양한 기능을 제공하여 GraphQL API를 보다 쉽고 효율적으로 구축할 수 있게 도와준다.
또한 Apollo는 다양한 프로그래밍 언어와 프레임워크에서 사용할 수 있는 클라이언트 라이브러리를 제공하여, 다양한 환경에서 쉽게 GraphQL API를 사용할 수 있도록 돕는다.

2. 요청 필터링의 어려움

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

profile
안녕하세요! FE개발자 최근원입니다.

0개의 댓글

관련 채용 정보