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