페이스북에서 개발, 오픈 소스로 제공된 쿼리 언어

Graph + Query Language 줄임말. Query Language 중 Server API 를 통해 정보를 주고받기 위해 사용하는 Query Language.

즉, API를 위한 쿼리 언어


필요성

그래프로 생각하기에서부터 출발

그래프는 현실 세계의 많은 현상들을 모델링할 수 있는 강력한 도구

그래프 자료구조는 우리가 특정 개념을 학습하고 이를 다른 개념과 연관시킬 때 자연스럽게 사용하는 마인드맵 구조와 비슷

그래프 자료구조


그래프는 여러 개의 점들이 서로 복잡하게 연결되어 있는 관계를 표현한 자료구조

점을 Node또는 정점(vertex), 선을 간선(edge)

  • 직접적인 관계 - 두 점 사이의 선
  • 간접적인 관계 - 몇 개의 점과 선에 걸쳐 이어짐

각 노드간의 간선을 통해 특정한 순서에 따라 그래프를 재귀적 탐색 가능

GraphQL에서는 모든 데이터가 그래프 형태로 연결되어 있다고 전제. 일대일로 연결된 관계도, 여러 계층으로 이루어진 관계도 모두 그래프. 단지 그 그래프를 누구의 입장에서 정렬하는지(클라이언트가 어떤 데이터를 필요로 하느냐)에 따라 트리 구조를 이룰 수 있음

트리 구조로 정렬된 그래프와 GraphQL


따라서, GraphQL은 클라이언트 요청에 따라 유연하게 트리 구조의 JSON 데이터를 응답으로 전송 가능

GraphQL은 REST API 방식의 고정된 자원이 아닌 클라이언트 요청에 따라 유연하게 자원을 가져 올 수 있음

GraphQL로 그래프 순회

도서 목록 시스템 구축을 위한 그래프


그래프는 데이터의 조각들이나 나타내고자 하는 엔티티(책, 혹은 저자)간의 관계를 나타낼 수 있음

  • 엔티티란
    • 사물의 구조나 상태, 동작 등을 모델로 표현하는 경우, 그 모델의 구성요소
    • 위에서는 책이름, 이름
    • 이 속성은 그 자체만으로는 중요한 의미를 표현하지 못하기 때문에 단독으로 존재 불가

위 그래프는 비순환 그래프(루트와 모서리를 통해 노드를 따라 순회할 수 있으나 동일한 노드로 돌아올 수 없는 속성을 갖고 있는 특별한 그래프)


그래프에서 트리 추출하는 방법


query {
	(ISBN이 "9780674430006") {
		 이름
		저자 {
			이름
		}
	}
}

서버에 요청을 보내고, 서버가 해당 요청을 해결한다면, 돌아온 쿼리는

{
	 : {
		 이름 : "GraphQL은 어렵지 않다",
		저자 : [
			{ 이름 : "김코딩"},
			{ 이름 : "박해커"},
		]
	}
}

ISBN 번호를 사용하여 선택한 “책” 노드에서 시작

GraphQL로 쿼리한 것을 트리 구조로 도식화


GraphQL은 트리 구조로 쿼리 결과를 받기 위해 그래프를 탐색하는 쿼리 언어


GraphQL의 특징

  • HTTP를 통해 API 서버로 요청을 보내고 응답 받음
  • 응답을 받을 시, 데이터 결과를 JSON 형식으로 받음
  • 서버 개발자가 작성한 각 필드에 대응하는 resolver 함수로 각 필드의 데이터 조회 가능
  • GraphQL 라이브러리가 조회 대상 schema가 유효한지 검사

카테고리:

태그:

업데이트:

댓글남기기