Learning
토픽 160 / 192·시스템 설계 및 아키텍처 패턴

GraphQL

GraphQL

Facebook이 개발한, 클라이언트가 필요한 데이터의 구조를 직접 정의하여 요청하는 API 쿼리 언어 및 런타임

특징: 오버페칭 방지(↑), 유연성(↑), 캐싱 복잡(↓)

구성요소: Schema, Query, Mutation, Subscription, Resolver

기술요소: Apollo, Relay, 스키마 정의

핵심 개념

  • Schema: 타입 시스템 기반으로 API가 제공하는 데이터 구조와 연산을 정의 (SDL - Schema Definition Language)
  • Query (조회): 클라이언트가 필요한 필드만 명시하여 데이터 요청 (중첩 가능)
  • Mutation (변경): 데이터 생성/수정/삭제 연산, 응답으로 변경된 데이터 반환
  • Subscription (구독): WebSocket 기반 실시간 데이터 스트리밍, 이벤트 발생 시 자동 푸시
  • Resolver: 각 필드에 대한 데이터 조회/처리 함수, Schema 필드와 1:1 매핑

Over-fetching / Under-fetching 해결

  • Over-fetching: REST에서 불필요한 필드까지 응답 → GraphQL은 필요한 필드만 선택적 요청
  • Under-fetching: REST에서 하나의 화면에 여러 API 호출 필요 → GraphQL은 단일 쿼리로 연관 데이터 한번에 조회
  • N+1 문제: 중첩 Resolver가 반복 DB 호출 → DataLoader로 배치 처리/캐싱으로 해결

GraphQL vs REST 비교

적용사례: 모바일 앱(대역폭 절약), 복잡한 데이터 요구사항, BFF 패턴, 대시보드

비교: GraphQL(쿼리/유연/단일엔드포인트) vs REST(자원/단순/HTTP캐싱) vs gRPC(RPC/바이너리/고성능)

연관: API, 프론트엔드, BFF, Apollo, Relay