- 본 시리즈에서는 How to GraphQL의 Tutorial 문서들을 차례대로 번역합니다.
- 이 글은 GraphQL Fundamentals - Introduction을 번역한 글입니다.
- 오역 또는 의역이 있을 수 있습니다. 미리 양해 부탁드리며, 수정이 필요한 부분은 댓글로 요청해주세요.
GraphQL은 REST를 대체하는 보다 효율적이고 강력하면서 유연한 새로운 API 표준입니다. GraphQL은 Facebook이 개발하고 오픈 소스로 공개되었으며, 전세계의 수많은 사람들과 기업들로 구성된 거대한 커뮤니티에 의하여 유지되고 있습니다.
API는 오늘날의 소프트웨어 인프라에서 흔히 볼 수 있는 구성 요소로 거듭났습니다. 요약하자면, API는 클라이언트가 서버로부터 데이터를 불러오는 방법을 정의합니다.
GraphQL의 핵심은 클라이언트가 필요한 데이터를 정확하게 특정하여 API에 요청하는 선언적인 데이터 불러오기를 가능하게 만드는 것입니다. 고정된 형태의 데이터 구조를 반환하는 엔드포인트 여러 개를 제공하는 것이 아니라, GraphQL 서버는 단 하나의 엔드포인트만을 노출시키고, 클라이언트가 요청한 데이터들만을 정확하게 반환합니다.
오늘날 대부분의 어플리케이션들은 데이터베이스 상에 데이터를 저장하고 있는 서버로부터 데이터를 불러오는 작업이 필요합니다. API는 어플리케이션의 필요에 따라 저장된 데이터에 접근할 수 있는 인터페이스를 제공해야만 합니다.
GraphQL은 종종 데이터베이스에 관련된 기술이라는 오해를 받고는 합니다. 하지만 GraphQL은 데이터베이스가 아닌, API를 위한 쿼리 언어입니다. 이런 맥락에서 GraphQL은 데이터베이스 종류와 상관 없이 작동하며(Agnostic), API가 사용되는 모든 맥락에서 효율적으로 사용될 수 있습니다.
GraphQL을 사용하는 가장 큰 이유를 이 블로그 글에서 확인해보세요.
REST는 서버가 데이터를 노출시키는 대중적인 방법으로 여겨져 왔습니다. REST라는 개념이 막 만들어졌을 시절에는 클라이언트 어플리케이션이 상대적으로 간단한 형태였고, 개발 속도가 오늘날과는 달랐습니다. 따라서 REST는 대부분의 어플리케이션에 아주 잘 어울렸습니다. 하지만 수십 년의 시간이 흐르면서 API를 사용하는 풍경은 극적으로 변화하였습니다. 특히, API를 설계하는 방식에 있어 큰 어려움으로 작용하는 3가지 요인이 존재합니다.
모바일 사용, 저전력 장치, 그리고 느린 네트워크 환경의 증가 등이 Facebook이 GraphQL을 개발하고자 하는 최초의 동기이었습니다. GraphQL은 네트워크 상에서 전송되어야 하는 데이터의 양을 최소화하고, 이에 따라 앞서 언급한 조건 하에 작동하는 어플리케이션의 퍼포먼스를 대체적으로 향상시켜줍니다.
클라이언트 어플리케이션을 작동시키는 프레임워크와 플랫폼들이 다양해짐에 따라, 각각의 요구 사항들을 모두 충족시키는 하나의 API를 만들고 유지한다는 것이 어려워졌습니다. GraphQL을 사용하면, 각 클라이언트는 필요한 데이터에만 정확하게 접근하는 것이 가능해집니다.
무중단 배포(Continuous Deployment)는 많은 기업들 사이에서 표준으로 자리잡았고, 빠른 순환과 빈번한 서비스 업데이트는 필수가 되었습니다. REST API를 사용할 때에는, 클라이언트 측의 특정 요구 사항이나 설계 변경에 대응하기 위하여 서버의 데이터를 노출시키는 방법을 변경해야 하는 경우가 종종 발생합니다. 이로 인하여 빠른 개발, 제품 순환이 방해받게 됩니다.
2012년, Facebook은 그들의 네이티브 모바일 앱에 GraphQL을 도입했습니다. 흥미롭게도, GraphQL은 웹 기술의 맥락 상에서 사용되는 것이 대부분이었고, 네이티브 모바일 개발 관점에서는 큰 관심을 끌지 못하였습니다.
Facebook은 React.js Conf 2015에서 처음으로 GraphQL에 대하여 발표하였고, 직후에는 GraphQL의 오픈 소스 계획을 발표하였습니다. Facebook은 매번 React를 사용하는 맥락에서만 GraphQL을 논해왔기 때문에, GraphQL이 결코 React에만 한정된 기술이 아니라는 사실을 非React 개발자들이 이해하는 데에는 다소 시간이 걸렸습니다.
[React.js Conf 2015에서 Dan Schafer와 Jing Chen이 GraphQL을 발표하는 영상]
사실, GraphQL은 API와 통신하는 클라이언트이라면 어디에서든 사용될 수 있는 기술입니다. 흥미롭게도, Netflix나 Coursera와 같은 기업들은 API 상호작용을 보다 효율적으로 개선하고자, GraphQL과 유사한 기술을 내부적으로 연구해오던 중이었습니다. Coursera는 클라이언트에게 필요한 데이터를 특정할 수 있는 유사한 기술을 구상하고 있었고, 심지어 Netflix는 그들이 만든 해결책인 Falcor를 오픈 소스화하였습니다. GraphQL이 오픈 소스로 공개된 뒤, Coursera는 그들이 지금까지 이루어놓은 작업을 모두 취소하고, GraphQL 프로젝트에 합류하였습니다.
오늘날, GraphQL은 Github, Twitter, Yelp, Shopify 등 수많은 기업들이 만든 서비스에서 사용되고 있습니다.
[생겨난 지 얼마 되지 않은 기술임에도 불구하고, GraphQL은 이미 폭넓게 사용되고 있습니다. GraphQL을 실제 서비스에 적용하고 있는 회사들을 더 알아보세요.]
GraphQL만을 전문적으로 다루는 컨퍼런스인 GraphQL Conf, 그리고 GraphQL만을 전문적으로 다루는 GraphQL 주간 뉴스레터도 존재합니다.
Quiz
다음 중 옳은 것은?
- GraphQL은 데이터베이스 관련 기술이다.
- GraphQL은 반드시 SQL과 함께 사용되어야 한다.
- GraphQL은 Facebook이 개발하였다.
- GraphQL은 Netflix와 Coursera가 함께 개발하였다.
GraphQL에 대한 얘기가 많이 나오길래 어떻게 시작해야하나 고민하고 있던 와중에 이렇게 잘 정리되어있는 글을 보니 수월하게 시작할 수 있을거 같습니다. 감사합니다~!