정보처리기사 기출 핵심 [51] GraphQL 심화와 Federation 아키텍처 완전 정복

GraphQL 심화란?

GraphQL은 REST의 Over-fetching·Under-fetching 문제를 해결하는 쿼리 언어입니다. 정보처리기사에서는 GraphQL의 핵심 개념과 마이크로서비스 환경에서의 Federation 아키텍처를 중점적으로 출제합니다.

GraphQL 핵심 개념

타입 시스템

  • SDL(Schema Definition Language): type Query·Mutation·Subscription 루트 타입. scalar·enum·interface·union·input 타입
  • Resolver: 각 필드의 데이터 반환 함수. 부모 객체(parent), 인수(args), 컨텍스트(context), 정보(info) 4인자
  • Introspection: __schema·__type 쿼리로 스키마 자기 기술. GraphiQL·Apollo Sandbox 활용
  • Directive: @deprecated·@include·@skip. 커스텀 디렉티브로 권한·캐싱 구현

N+1 문제와 DataLoader

  • N+1 문제: 목록 조회 후 각 항목의 관계 데이터를 개별 쿼리. 100개 게시글 = 101번 DB 쿼리
  • DataLoader: 요청 배치(Batching)와 캐싱으로 해결. batch 함수로 한 번에 여러 ID 조회
  • 쿼리 복잡도 제한: depth limit·complexity score로 악의적 복잡 쿼리 방어
  • Persisted Queries: 쿼리 문자열 대신 해시 ID 전송. 대역폭 절약 + 화이트리스팅

Apollo Federation

Federation 개념

  • Supergraph: 여러 subgraph를 하나의 통합 스키마로 노출. Apollo Router가 라우팅
  • Subgraph: 독립적인 GraphQL 서비스. @key 디렉티브로 엔티티 정의
  • Entity: @key로 식별되는 타입. 여러 subgraph에 걸쳐 확장 가능
  • @external·@requires·@provides: Subgraph 간 필드 의존성 표현 디렉티브

Federation 동작 방식

  • Query Planning: Router가 쿼리를 분석해 여러 subgraph에 분산 실행 계획 수립
  • Entity Resolution: _entities 쿼리로 다른 subgraph의 엔티티 데이터 요청
  • Schema Composition: Rover CLI로 subgraph 스키마 합성. 충돌 감지

GraphQL 보안

  • 인증·권한: Directive 기반 @auth. context에서 JWT 검증 후 resolver에서 확인
  • Query Depth Limit: 중첩 깊이 제한으로 DoS 방어
  • Rate Limiting: complexity 기반 토큰 버킷. 단순 요청 수 제한보다 정교함
  • Introspection 비활성화: 프로덕션에서 스키마 노출 방지

시험 핵심 포인트

  • GraphQL vs REST: 단일 엔드포인트, 클라이언트가 필요한 필드 명시, Over/Under-fetching 없음
  • N+1 해결: DataLoader의 배치 + 캐싱
  • Federation @key: 엔티티를 여러 subgraph에서 공유하는 기준 필드
  • Subscription: WebSocket 기반 실시간 데이터 스트림

마무리

GraphQL Federation은 마이크로서비스 환경에서 일관된 API 게이트웨이를 구현하는 현대적 방법입니다. 각 팀이 독립적으로 subgraph를 개발·배포하면서 통합 스키마를 유지할 수 있습니다.

Leave a Comment