GraphQL과 REST API는 무엇이 다른가요? (한국어)

Ina·2020년 11월 7일
4

문서 번역

목록 보기
2/4
post-thumbnail

본 포스팅은 "A Brief Introduction to GraphQL-How is it different from a REST API?" by Luke Waring on Medium을 우리말로 번역한 글입니다. GraphQL에 대한 소개를 REST API와의 차이점을 중심으로 가볍게 설명하는 글입니다. 불필요하다고 생각되는 부분은 생략 및 의역하였습니다.

몇 달 전, 소프트웨어 개발자 채용공고들의 직무 설명을 훑어보던 중 생소한 용어와 개념들 때문에 많이 혼란스러웠던 기억이 있습니다. 그리고 채용공고에 계속 등장하던 기술이 있었으니! 바로 GraphQL입니다.

그렇다면 GraphQL은 무엇일까요? 공식 문서에서 GraphQL의 정의를 한번 살펴 보겠습니다.



📖 GraphQL 공식문서 중 -

“GraphQL은 API용 쿼리 언어이자, 기존 데이터로 이러한 쿼리를 수행하기 위한 런타임입니다.

GraphQL은 API의 데이터에 대한 완전하면서 이해하기 쉬운 설명을 제공하고, 클라이언트가 필요한 것을 정확히 요구할 수 있는 권한을 제공하고, 시간이 지남에 따라 API를보다 쉽게 발전시키며, 강력한 개발자 도구를 가능케합니다."



이 문장 속에는 두 가지 핵심 요소가 있습니다. 바로,

  1. GraphQL은 "API 용 쿼리 언어"입니다.
  2. "클라이언트가 필요한 것을 정확히 요구할 수 있는 권한을 제공합니다."

위 두 가지 입니다.

그럼 간단한 예시를 통해 두번째 문장을 다시 한번 살펴보겠습니다.

어떤 블로그 어플리케이션이 있다고 생각해봅시다. 이 앱은 <게시물, 사용자, 팔로어> 정보를 가집니다. 앱에서는 특정 사용자의 게시물들의 제목과 해당 사용자의 신규 팔로워 3명을 표시해줍니다.

먼저 일반적인 RESTful API를 사용하여 이 정보를 가져오는 방법을 생각해보겠습니다.

RESTful API를 사용한다면 각 리소스(게시물/사용자/팔로워 정보)를 개별적으로 요청해야겠죠. 아래 그림처럼요.


출처 : https://www.howtographql.com/basics/1-graphql-is-the-better-rest/


반면에, GraphQL을 사용하면 단 하나의 쿼리를 사용하여 필요한 정보에만 액세스 할 수 있습니다.


출처 : https://www.howtographql.com/basics/1-graphql-is-the-better-rest/


GraphQL이 REST와 다른 또 한 가지는, 데이터에 대한 요청사항이 어디(클라이언트 or 서버)에서 정의되는지입니다.

RESTful API는 데이터 구조가 API 자체에 의해 정의됩니다.

그러나 GraphQL을 사용하면 아래와 같이 클라이언트가 데이터 요구 사항을 정의하게 됩니다.


자, GraphQL과 REST의 차이점을 보여주는 간단한 예를 살펴 보았으니, 프로젝트에서 실제로 GraphQL을 어떻게 사용하는지 잠깐 살펴보겠습니다. (음.. 아쉽게도 실제 사용방법은 위의 도표처럼 간단하고 직관적이지는 않습니다 😢 )

일단 GraphQL을 사용하려면 여러 계층의 도구가 필요합니다. 여기에 대해서 더 자세히 알고 싶으시다면 Steven Mercatante가 GraphQL 필수 스택인 <클라이언트, 게이트웨이, GraphQL 서버, 기존 서버, 데이터베이스-GraphQL 서버, 데이터베이스>를 포함해서 훌륭하게 설명한 글이 있으니 아래 링크로 한번 확인해보세요)

👉 The GraphQL Stack, explained
A visual explanation of the GraphQL stack, and how all the pieces fit together.

GraphQL은 Ruby 및 JavaScript를 포함한 프로그래밍 언어들을 위한 여러 서버/클라이언트 라이브러리도 제공합니다. Ruby의 경우 graphql-ruby gem이 있고, JavaScript 클라이언트의 경우 가장 많이 사용되는 라이브러리인 Relay와 Apollo-Client도 있습니다.

정리

요약하면, GraphQL은 일반적으로 RESTful API와 관련된 데이터 오버 페칭/언더 페칭을 해결하는 등 기존 API 접근 방식에 비해 많은 이점을 제공해줍니다.

다만, 이러한 이점을 얻으려면 개발자가 GraphQL로 인한 추가적인 복잡성을 감당해야 한다는 점을 유의해야겠네요.


GraphQL에 대해 소개하는 정말 간략한 글이었습니다. 정말 채용공고에 GraphQL 없는 곳이 없던데 이제는 정말 필수인가봅니다 🙃

profile
프론트엔드 개발자. 기록하기, 요가, 등산

0개의 댓글