GraphQL에 대해 알아보는 글을 포스팅합니다. 이 글에선 Graphql에 대한 기본적인 소개와 REST API와의 비교를 통한 차이점을 알아보도록 합니다.

 

 

 

1. 소개

 

 

GraphQL은 페이스북에서 만든 쿼리 언어입니다. GrpahQL은 JavaScript 개발 환경에서 Data Layer와 관련하여 항상 언급되는 주제입니다만, 현재를 기준으로 아직 성숙한 쿼리 언어라곤 할 수 없습니다. 하지만 등장한 지 얼마 되지 않았음에도 불구하고, GraphQL의 인지도와 인기는 매우 빠르게 상승하고 있음을 확인할 수 있습니다.

 

JS - DataLayer 인지도, 관심도, 만족도 순위

 

GraphQL 설문 응답 자료

 

Graph QL(이하 gql)은 Structed Query Language(이하 sql)와 마찬가지로 쿼리 언어입니다. 하지만 gql과 sql의 언어적 구조 차이는 매우 큽니다. 또한 gql과 sql이 실전에서 쓰이는 방식의 차이도 매우 큽니다. 

gql과 sql의 언어적 구조 차이가 활용 측면에서의 차이를 가져왔습니다. 이 둘은 애초에 탄생 시기도 다르고 배경도 다릅니다. 

sql은 데이터베이스 시스템에 저장된 데이터를 효율적으로 가져오는 것이 목적이고, gql은 웹 클라이언트가 데이터를 서버로부터 효율적으로 가져오는 것이 목적입니다. sql의 문장(statement)은 주로 백앤드 시스템에서 작성하고 호출하는 반면, gql의 문장은 주로 클라이언트 시스템에서 작성하고 호출합니다.

 

sql 쿼리 예시

SELECT USER_EMAIL, USER_NAME FROM USERS WHERE USER_KEY = 1;

 

gql 쿼리 예시

query{
    users(user_key: "1"){
        user_email
        user_name
    }
}

 

서버사이드 gql 애플리케이션은 gql로 작성된 쿼리를 입력으로 받아 쿼리를 처리한 결과를 다시 클라이언트로 돌려줍니다. 

HTTP API 자체가 특정 데이터베이스나 플랫폼에 종속적이지 않은것 처럼 마찬가지로 gql 역시 어떠한 특정 데이터베이스나 플렛폼에 종속적이지 않습니다. 심지어 네트워크 방식에도 종속적이지 않습니다. 

일반적으로 gql의 인터페이스 간 송수신은 네트워크 레이어 L7의 HTTP POST 메서드와 웹소켓 프로토콜을 활용합니다. 필요에 따라서는 얼마든지 L4의 TCP/UDP를 활용하거나 심지어 L2 형식의 이더넷 프레임을 활용할 수도 있습니다.

 

gql 파이프 라인

 

 

 

2. GraphQL과 REST API

 

기존의 웹 혹은 모바일 애플리케이션의 API 를 구현할 때는, 통상적으로 REST API 가 사용됩니다.

기존의 REST API 를 사용하여 API를 구현을 한다면 우리가 클라이언트 사이드에서 어떠한 기능이 필요할 때마다 그때그때 새로운 API를 만들어야 했습니다.

문제는 나중에 어플리케이션의 규모가 커지면 수많은 Endpoint가 생성되게 됩니다. REST API는 URL, METHOD 등을 조합하기 때문에 다양한 Endpoint가 존재하게 되는 것입니다. 

 

일반적인 HTTP API 적용 스택

 

반면, gql은 단 하나의 Endpoint가 존재합니다. 또한, gql API에서는 불러오는 데이터의 종류를 쿼리 조합을 통해서 결정합니다.

예를 들면, REST API에서는 각 Endpoint마다 데이터베이스 SQL 쿼리가 달라지는 반면, gql API는 gql 스키마의 타입마다 데이터베이스 SQL 쿼리가 달라집니다.

 

GraphQL 적용 스택

 

아래의 그림과 같이 gql API를 사용하면 여러 번 네트워크 호출을 할 필요 없이, 한 번의 네트워크 호출로 처리할 수 있습니다.

 

REST API와 GraphQL API 사용의 차이점

 

 

 

 

 

 

* References

 

 

 

+ Recent posts