Categories
컴퓨터

Graph Query 학습 (1)

GraphQL(Graph Query Language)은 Facebook이 2012년에 개발하여 2015년 9월 14일에 공개한 데이터 질의어(Query Language) 이다.

공식 사이트의 소개를 보자.

A query language for your API

GraphQL is a query language for APIs and a runtime for fulfilling those queries with your existing data. GraphQL provides a complete and understandable description of the data in your API, gives clients the power to ask for exactly what they need and nothing more, makes it easier to evolve APIs over time, and enables powerful developer tools.

GraphQL Official Website

위키피디아에서는 아래와 같이 소개하고 있다.

그래프QL(영어: GraphQL)[1]은 페이스북이 2012년에 개발하여 2015년에 공개적으로 발표된 데이터 질의어이다.[2] 그래프QL은 REST 및 부속 웹서비스 아키텍쳐를 대체할 수 있다.[1] 클라이언트는 필요한 데이터의 구조를 지정할 수 있으며, 서버는 정확히 동일한 구조로 데이터를 반환한다. 그래프QL은 사용자가 어떤 데이터가 필요한 지 명시할 수 있게 해 주는 강타입 언어이다. 이러한 구조를 통해 불필요한 데이터를 받게 되거나 필요한 데이터를 받지 못하는 문제를 피할 수 있다.

위키피디아(한글) – 그래프QL (링크)

GraphQL의 장점으로는 크게 두 가지가 있다.

  1. HTTP(S) 요청 횟수를 줄일 수 있다 (RESTful API 보다)
  2. HTTP(S) 응답 크기를 줄일 수 있다 (원하는 데이터만 선택해서 응답을 받을 수 있다)

GraphQL을 처음 들었던 게 2~3년 전인데 아직도 실무에서 널리 사용되고 있는 것 같지는 않다. 아래 영상에서 원하는 데이터만 콕 집어서 가져올 수 있다는 점을 장점으로 얘기하기는 했는데 사실 2012년에 사용했던 RESTful API 구현체인 Open Data Protocol도 사전에 쿼리를 직접 작성하지 않고도 원하는 데이터만 정확히 가져올 수 있다.

GraphQL이 뭔가요? – 얄팍한 코딩사전

아래 영상은 노마드 코더 유튜브 채널을 운영하는 개발자가 왜 RESTful 대신에 GraphQL을 선택했는지 소개한다.

  1. 생산성 (RESTful 에 비해 개발할 내용이 60% 정도 줄어듬)
  2. React와 호환성이 좋음
  3. Redux 를 완벽히 대체할 수 있음

아래 링크도 GraphQL 개념을 잡는데 도움이 되었다.

끝으로 노마드 코드에서 간단한 실습을 제공해서 따라하고 있다. 아무래도 만들면서 배우는 게 가장 좋으니까.

위 재생목록의 두 번째 영상에서는 over-fetching과 under-fetching 에 개념을 소개한다.

Over-fetching은 사용하지 않을 데이터까지 요청을 할 수 밖에 없는 API의 불편함을 의미한다. 즉, 요청한 정보보다 더 많은 불필요한 데이터를 받는 것이다. 첨언하자면 개인정보보호에서는 최소한의 데이터 수집을 의무화하기 때문에 개인정보보호 측면에서도 바람직하지 않다.

Under-fetching은 원하는 데이터를 얻기 위해 한 번의 요청이 아닌 여러 번의 요청을 해야하는 것을 의미한다.

GraphQL은 이러한 over-fetching과 under-fetching을 해결한다.

NoSQL은 Schema가 없지만 RDB에는 Schema가 있다. 마찬가지로 GraphQL도 Schema가 있다. 한글로는 스키마(Schema)라고 읽는데, 이는 데이터 모델(Data Model)이라고 생각하면 된다. 즉, 서버가 사용자에게 보내거나, 사용자가 서버로부터 받을 Data에 대한 Metadata라고 생각하면 되겠다. 메타데이터는 데이터를 설명하는 데이터이다. 프로그래밍으로 치면 구문에 대해 설명을 하기 위해 주석을 작성하는데, 이와 유사하다고 생각해도 되겠다.

또한 GraphQL에서는 Query와 Mutation 이라는 두 가지 용어가 있다. Query는 어떤 정보를 요청할 때 사용하는데 이러한 Specification은 서버에 저장되어 있다. 반면에, Mutation은 이러한 정보를 변경할 때 사용한다.

Query는 아래와 같이 작성하며, 필드에 있는 ‘!’는 필수값을 의미한다.

type Query {
     name: String!
 }

또한 GraphQL에는 Resolver를 정의해야 하는데 이는 Data를 어떻게 가져올지 프로그래밍하는 것을 의미한다. 말 그대로 Query(질의)를 Resolve(해결)하는 게 Resolver(해결사)다.

Schema를 정의하고 Resolver를 작성한 후 GraphQL 서버를 실행하면 기본적으로 4000번 포트로 서버가 열린다. 브라우저에서 http://localhost:4000 을 실행하면 아래와 같이 인터렉티브한 쿼리 창이 실행된다.

오늘은 여기까지 하고 마친다. 다음에 들을 강의는 나의 첫번째 GraphQL서버 만들기 #5 Extending the Schema 로 여기를 누르면 강의를 이어서 볼 수 있다.

Hits: 213

By 라이언양

라이언양 연구실 주인

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다