최근 REST API와 함께 많이 사용되고 있는 통신 방법인 GraphQL에 대해 정리해보자.
출처: https://2020.stateofjs.com/en-US/technologies/datalayer/
GraphQL(이하 GQL)은 2012년 Facebook에서 개발되고 2015년에 오픈소스로 공개된 쿼리 언어이다.
SQL이 서버가 DB에서 데이터를 가져오는 것을 목적으로 만들어진 쿼리 언어라면,
GQL은 웹 클라이언트가 서버에서 데이터를 가져오는 것을 목적으로 만들어진 쿼리 언어이다.
GQL은 일반적으로 네트워크 레이어의 L7 HTTP POST 메서드와 Websocket 프로토콜을 활용하나,
필요에 따라 L4의 TCP/UDP 또는 L2형식의 이더넷 프레임을 활용 할 수도 있다.
REST API의 GET 요청
query 예시
// 요청
query {
person {
name
}
}
// 응답
{
"data": {
"person": {
"name": "ignis"
}
}
REST API의 GET 이외 나머지 HTTP Method 요청(POST, PUT(PATCH), DELETE) 담당
mutation 예제
// 요청
mutation {
createPerson(input: {
name: "test"
}) {
...요청 결과
}
}
// 응답
REST API는 URL + HTTP Method + Resource(사용자 id 등)를 조합하므로 다양한 Endpoint가 존재하지만,
GQL은 /grapgql 이라는 단 하나의 Endpoint만 존재한다.
출처: https://2020.stateofjs.com/en-US/technologies/datalayer/또한, GQL은 REST API와 달리 원하는 자료만 호출 가능하므로,
클라이언트 백엔드간의 네트워크 비용이 줄어든다는 장점이 있다.
Node.js 서버의 경우, apollo-server-express를 활용
React 클라이언트의 경우, apollo-client를 활용