본문 바로가기
개발/개발지식

GraphQL이 무엇일까?

by 그레이웅 2022. 11. 11. 15:42
반응형

 

최근 GraphQL이라는 키워드를 많이 보게 되었다. 그리고 문득 궁금증이 생겼다.

과연 GraphQL이 무엇일까?

graphQL 로고

 

[GraphQL 공식 홈페이지]

https://graphql-kr.github.io/

 

GraphQL: API를 위한 쿼리 언어

GraphQL은 API에 있는 데이터에 대한 완벽하고 이해하기 쉬운 설명을 제공하고 클라이언트에게 필요한 것을 정확하게 요청할 수 있는 기능을 제공하며 시간이 지남에 따라 API를 쉽게 진화시키고

graphql-kr.github.io

 

GraphQL? 

GraphQL(Graph Query Language)의 약자이다.

GraphQL이란 페이스북에서 개발한 쿼리 언어이다.

Server API를 구성할 때 사용된다. 우리는 보통 REST API를 많이 사용하는 것처럼 GraphQL도 그와 한 맥락과 비슷 한 API이다.

 

일반적으로 쿼리 언어라고 할 때 가장 흔한 것이 SQL이다. DB에서 데이터를 가져올때 사용한다.

다음과 같은 쿼리를 사용해 데이터를 불러온다.

SELECT user_id FROM USER

 

GraphQL은 웹 클라이언트가 데이터를 서버로부터 효율적으로 가져오는 것을 목적으로 한다.

아래는 GraphQL이 데이터를 서버로 부터 가져오는 쿼리 예제이다.

{
  user {
   user_id
  }
}

 

 

GraphQL과 REST API와의 비교

REST API는 이전 포스팅에서도 정리를 해 놓았다.

2022.10.07 - [개발/네트워크] - REST API는 무엇일까?

 

GraphQL과 REST API의 가장 큰 차이는 엔드포인트에 있다.

REST API는 URL과 METHOD를 조합해 여러 개의 엔드포인트를 가지고, 그 엔드포인트마다 각각의 쿼리가 동작을 한다.

GraphQL는 단 하나의 엔드포인트를 사용하여 불러오는 데이터 종류를 쿼리 조합을 통해 결정한다.

 

일반적인 REST API는 다음과 같은 요청을 한다.

 

GET /books/:id 
GET /authors/:id 
POST /books/:id/comments

 

GraphQL 은 단 하나의 엔드포인트를 가지고, URL 식별자 대신 GraphQL 스키마를 사용한다.

 

type Query {
  book(id: ID!): Book
  author(id: ID!): Author
}

type Mutation {
  addComment(input: AddCommentInput): Comment
}

type Book { ... }
type Author { ... }
type Comment { ... }
input AddCommentInput { ... }

 

REST API의 경우 엔드포인트를 수정할 때마다 쿼리도 수정하고, 그에 상응하는 매개변수의 값도 모두 수정해야 하기 때문에 불편하다. 하지만 GraphQL은 하나의 엔드포인트 속에서 다른 쿼리를 요청함으로 다른 응답을 받게 된다.

 

 

GraphQL의 요청 예시

 

만약 GraphQL로 쿼리 요청을 보낸다면, 다음과 같은 쿼리를 보내게 된다.

 

요청

{
  hero {
    name
  }
}

 

결과

{
  "data": {
    "hero": {
      "name": "R2-D2"
    }
  }
}

 

GraphQL의 핵심은 쿼리와 결과가 동일한 형태로 작성되어 항상 기대한 결과값을 받아 올 수 있다.

서버에서 클라이언트가 요청하는 필드를 정확히 알고 있기 때문이다.

 

 


최근 GraphQL API를 이용하는 회사의 수가 늘고 있어서 이게 뭔가? 하고 간단하게 알아보는 포스팅을 작성하였다.

아직 구체적으로 파고들지도, 자세하게 어떤 기능이 있는지 까지는 깊게 들어가 보지는 않았지만,

기본적으로 대부분은 REST API에 의존해서 개발을 하게 된다. 나도 그렇고,

REST API를 개발하다 보면 아주 많은 엔드포인트들이 존재하게 되어 관리의 힘듬을 느끼게 된다.

 

GrpahQL은 그러한 점들을 하나의 엔드포인트로 관리할 수 있게 해 주고, 자연스럽게 HTTP 요청 횟수도 줄어들게 되어 충분히 사용할 만한 가치가 있겠다고 생각하게 되었다.  최근에 GraphQL을 이용하는 회사가 늘어나는 이유도 알 것 같다.

원하는 쿼리의 결괏값만을 도출해 낼 수 있는 것도 매력이 있는 것 같다.

 

하지만 검색해보면 단점도 여김 없이 등장한다. 캐싱이 REST API보다 복잡하다는 점.

파일 업로드 구현 방법이 없다는 점(그래서 직접 개발해야 함)등이 존재한다.

 

장단점이 명확하여, 프로젝트에 크기나 활용 정도에 따라 도입 여부를 신중히 결정해야 할 것 같다.

 

 

 

 

 

 

참고 한 글 

- https://www.apollographql.com/blog/graphql/basics/graphql-vs-rest/

- https://tech.kakao.com/2019/08/01/graphql-basic/

- https://jongminfire.dev/graph-ql%EC%9D%B4%EB%9E%80

반응형

댓글