그래프QL (GraphQL)

1. 그래프QL (GraphQL)의 개념 및 특징

개념특징
데이터 접근성 보장을 위해 서버에서 정확히 지정된 구조로 데이터를 반환하도록 필요 데이터 구조를 지정하는 데이터 질의어– 오버페칭과 언더페칭 해결
– 하나의 엔드포인트에 여러 API 요청
– 오브젝트의 필요한 필드만 요청
– 클라이언트 로직 간결화
  • 그래프QL은 그래프(Graph)가 현실 세계의 데이터를 표현하는 적합한 방법이라는 사실에 착안하여 메타(구 페이스북)에서 만든 질의 언어이며, 소프트웨어 요소 간 커뮤니케이션 품질을 향상시켜 개발, 유지관리, 확장에 용이
  • 클라이언트-서버 구조에서 클라이언트는 종종 서버에 여러 리소스를 요청하는데, 그래프QL은 다중 요청의 복잡성을 해결해주고 필요 데이터만 응답받아 질의 효율화

 

2. 그래프QL의 동작 과정과 구성요소

(1) 그래프QL의 동작 과정

  • 그래프QL 런타임 계층에서 클라이언트의 쿼리 요청을 받아 처리하고 백엔드에서 DB 등 다른 서비스와 통신하여 결과를 응답

(2) 그래프QL의 구성요소

구분구성요소역할
데이터 질의쿼리 (Query)– 데이터 읽기에 사용(R)
뮤테이션 (Mutation)– 데이터 생성/변조/삭제에 사용(CUD)
데이터 구조스키마 (Schema) / 타입 (Type)– API를 통해 제공되는 데이터 구조 관리
스칼라 타입 (Scalar Type)– Object field값의 Scalar Type을 정의
데이터 접근 / 공유리졸버 (Resolver)– 위치와 접근 방법 기반 외부 데이터 접근
인트로스펙션 (Introspection)– 서버에 정의된 스키마 실시간 공유
  • 그래프QL은 백엔드 서버에 부하를 주며, 리졸버를 직접 구현해야하는 단점이 있으나 프론트-백엔드 간 커뮤니케이션 품질 향상을 통해 전체적인 소프트웨어 품질 확보 가능

 

3. 그래프QL과 유사 기술 비교

(1) 그래프QL과 기존 SQL 비교

비교 항목그래프QL기존 SQL
목적– 웹클라이언트가 서버의 데이터에 효율적 접근– 데이터베이스에 효율적 접근
쿼리 생성 / 호출– 클라이언트에서 생성 및 호출– 백엔드에서 생성 및 호출
로직 제공– 개발자가 로직을 구현하여 사용– DBMS에서 제공된 로직 사용

(2) 그래프QL과 REST 장단점 비교

비교 항목그래프QLREST
장점– 효율적 데이터 요청, 유연한 쿼리
– 단일 엔드포인트와 스키마/타입
– 간단하고 직관적인 설계
– 표준화와 캐싱/브라우징 지원
단점– 백엔드의 복잡성으로 성능저하
– REST에 비해 파일 업로드 어려움
– 불필요 데이터 및 불일치 발생 가능
– 다양한 데이터 요청 시 다수 요청
  • 그래프QL은 REST의 한계로 인해 개발되었지만, HTTP 캐싱 활용이 어려우며 에러 발생 시 핸들링이 어렵고 백엔드 부하와 설계 복잡성 증가로 인해 REST 완전 대체는 불가능하므로 그래프QL과 REST의 장단점 기반 적절한 방식 선택 필요
  • 그래프QL 도입 시 서비스 복잡성, 요청 데이터 형태 및 요청 횟수와 서버 아키텍처를 고려하여 도입 여부 결정

 
[참고]

  • 한빛미디어, GraphQL in Action
  • KakaoTech, GraphQL 개념잡기

콘텐츠 사용 시 출처 표기 부탁 드리고, 댓글은 큰 힘이 됩니다^^