-
GraphQL 이란 ?카테고리 없음 2024. 4. 23. 11:03
GraphQL
Graph 은 API를 위한 쿼리 언어이며 타입 시스템을 사용하여 쿼리를 실행하는 서버사이드 런타임이다.
쿼리 언어(Query Language)
쿼리 언어는 정보를 얻기 위해 보내는 질의문을 만들기 위해 사용되는 컴퓨터 언어이다. 가장 잘 알려져 있는 예시로는 데이터베이스
시스템에 저장된 데이터를 가져오기 위해 사용하는 SQL이 있다.
GraphQL(Graph Query Language)
SQL이 데이터베이스 시스템으로부터 데이터를 가져오는 목적을 가진다면, GraphQL은 클라이언트가 데이터를 서버로부터 가져오는 것을 목적으로 한다.
GraphQL vs REST
그럼 구지 REST를 써서 서버에서 데이터를 가져오면 되는데 왜 GrapQL이라는 것이 생겼을까?
GraphQl과 REST의 차이점은 크게 다음과 같다.
- GrapQL은 보통 하나의 엔드포인트를 가진다.
- GraphQL은 요청할 때 사용하는 쿼리에 따라 다른 응답을 받을 수 있다.
- GraphQl은 원하는 데이터만 받을 수 있다.
엔드포인트란 무엇일까?
REST API는 보통 여러개의 엔드포인트를 가지며 각각의 엔드포인트가 응답을 반환한다.
하지만 GraphQL의 경우 하나의 엔드포인트만을 사용하며 요청하는 쿼리에 따라 다른 데이터를 반환한다.
예를 들어 학교 학생의 정보를 가져온다고 치자.
REST API -> xxxxxx.com/class -> xxxxxx.com/class/{반 index} -> xxxxxx.com/class/{반 index}/students -> xxxxxx.com/class/{반 index}/students/{학생 index} GrapQL -> xxxxxx.com/graphql (하나의 엔드포인트에 다른 쿼리를 사용함)
REST API의 경우 반에 속해있는 학생의 데이터를 가져오는 데에 다양한 엔드포인트를 가진다.
반면 GrapQL은 하나의 엔드포인트에 다른 쿼리로 요청함으로써 다른 응답을 받을 수 있다.
엔드포인트가 많아지면 관리하기 보안에 취약할 수 있다는 단점이있다.
원하는 데이터만 받기
엔드 포인트에 따라 정해진 응답 값만 받아올 수 있는 REST API와 달리 GraphQL은 쿼리 작성을 통해 필요한 데이터만 골라올 수 있다.
홍길동의 정보를 가져오는 API를 작성한다고 치자.
// REST API GET, https://xxxxxx.com/person/name?=홍길동 // RESPONE { 'name':'홍길동', 'age':'24', 'height':'198', 'cash':'100000', 'isHandsome'false }
예를 들어 나는 홍길동의 나이와 키에 대한 정보만 필요하지만 REST API를 사용할 경우 필요하지 않은 데이터까지 함께 받아야 한다.
그렇다면 GraphQL을 사용해 보자.
// GraphQL query { person(name:'홍길동'){ name height } } // GraphQL RESPONE { 'data': { 'person': { 'name': '홍길동', 'height': '198' } } }
REST API와는 달리 GraphQL은 클라이언트에서 필요한 대로 쿼리를 작성해 원하는 데이터만 가져올 수 있다.
GraphQL의 장단점
이러한 특징들로만 보았을 때 나는 무조건 GrapQL이 좋은 건 줄 알았지만 장단점이 각각 있었다.
1. HTTP 요청 횟수를 줄일 수 있다.
RESTful의 경우 필요한 리소스별로 요청해야 하는 반면, GraphQL은 원하는 정보를 하나의 쿼리에 모두 담아 요청할 수 있다.
2. HTTP응답 사이즈를 줄일 수 있다.
위에서 본 예시처럼 내가 필요한 정보들만 요청하므로 다른 정보들은 담기지 않는다. 따라서 응답 데이터 사이즈를 최소화할 수 있다.
3. 프런트엔드와 백엔드 개발자의 부담을 덜 수 있다.
실제로 나는 프로젝트를 하면서 백엔드개발자와 엔드포인트를 효율적이게 하기 위해 많은 커뮤니케이션을 하였지만
GraphQL의 경우 API개발 부담을 덜 수 있을 거 같다.
단점
1. 고정된 요청과 응답만 필요할 때에는 query로 인해 요청의 크기가 Restful보다 커질 수 있다.
2. 캐싱이 복잡하다.
결론
REST가 가지는 문제점들을 해결한 게 GraphQL이지만, 아직까진 GraphQL이 완벽하게 REST를 대체할 수는 없다.
REST와 GraphhQL의 장단점이 다르므로 서비스에 맞는 방식으로 골라야 할 것 같다.