GraphQL을 공부하게 된 계기
취업을 준비하면서 GraphQL을 사용하는 기업들이 많다는 것을 알게 되었고 실제로
과제 테스트에 GraphQL을 이용한 서버를 구축하라는 조건이 있는 경우가 심심찮게 보여서 GraphQL에 대해 공부해 보았다.
GraphQL이란?
API란 서버와 통신하기 위한 인터페이스이다.
예를 들어, 핸드폰에 있는 인스타그램 어플은 페이스북 서버와 여러가지 데이터들을 주고 받을텐데 이러한 데이터를 주고 받는 통신을 API라고 한다.
그리고 GraphQL은 이러한 통신 방법 중 하나이다.
GraphQL이 만들어진 이유
GraphQL은 대표적인 API인 REST API의 문제점을 해결하기 위해서 만들어졌다.
REST API에 대한 내용은 이 글에서는 다루지 않겠지만 문제점과 특징 정도는 짚고 넘어가는 것이 좋을 것 같다.
REST API의 특징과 문제점
이러한 REST API의 특성 상 문제점들이 발생하는데 바로 Over Fetcing과 Under Fetching이다.
Over Fetching이란 요청에 대한 응답값이 필요한 데이터보다 많을 경우를 의미한다.
영화들의 데이터를 주고 받는다고 가정을 해보자.
필요한 데이터가 영화의 제목과 감독이더라도 REST API는 고정된 응답값을 주기 때문에 불필요한 데이터들도 받을 수 밖에 없다.
{
"data": {
"allFilms": {
"films": [
{
"id": "ZmlsbXM6MQ==",
"title": "A New Hope",
"episodeID": 4,
"director": "George Lucas",
"producers": [
"Gary Kurtz",
"Rick McCallum"
],
"releaseDate": "1977-05-25"
},
{
"id": "ZmlsbXM6Mg==",
"title": "The Empire Strikes Back",
"episodeID": 5,
"director": "Irvin Kershner",
"producers": [
"Gary Kurtz",
"Rick McCallum"
],
"releaseDate": "1980-05-17"
},
{
"id": "ZmlsbXM6Mw==",
"title": "Return of the Jedi",
"episodeID": 6,
"director": "Richard Marquand",
"producers": [
"Howard G. Kazanjian",
"George Lucas",
"Rick McCallum"
],
"releaseDate": "1983-05-25"
},
하지만 GraphQL을 사용하였을 경우에는
{
allFilms {
films {
title
director
}
}
}
이러한 쿼리를 보내게 되고
{
"data": {
"allFilms": {
"films": [
{
"title": "A New Hope",
"director": "George Lucas"
},
{
"title": "The Empire Strikes Back",
"director": "Irvin Kershner"
},
{
"title": "Return of the Jedi",
"director": "Richard Marquand"
},
필요한 데이터들만 받아 볼 수 있다.
GraphQL은 한번의 특정 경로에 따라 데이터를 응답하는 방식이 아니기 때문에 한번의 요청으로도 필요한 데이터들을 전부 받아 볼 수가 있다.
정리
1. GraphQL은 보통 하나의 엔드포인트를 가진다.
2. GraphQL은 요청 쿼리에 따라서 다른 응답을 받을 수 있다.
3. GraphQL은 원하는 데이터만 받아 볼 수 있다.