GraphQL Execution

GraphQL 요청부터 Resolver까지 실행 경계

GraphQL API는 단일 엔드포인트 뒤에서 스키마 검증, 인증, Resolver 호출, 데이터 로더가 단계별로 책임을 나눕니다.

01

요청 수신

HTTP POST 본문에서 query, variables, operationName을 분리하고 크기 제한을 확인합니다.

Transport
02

파싱과 검증

문법 파싱 뒤 스키마 타입, 필드 존재, 변수 타입, depth 제한을 검증합니다.

Validation
03

컨텍스트 구성

토큰, 세션, 로더, 요청 ID를 Resolver가 공유할 컨텍스트에 넣습니다.

Context
04

Resolver 실행

필드별 Resolver가 필요한 데이터만 읽고 DataLoader로 중복 조회를 묶습니다.

Resolve
05

응답 정리

data와 errors를 GraphQL 형식으로 반환하되 민감한 내부 오류는 숨깁니다.

Result
Schema
외부 계약 클라이언트가 요청할 수 있는 타입과 필드를 명확히 제한합니다.
Breaking change 관리
Resolver
필드 구현 부모 객체, 인자, 컨텍스트를 받아 실제 도메인 로직으로 연결합니다.
비즈니스 로직 분리
DataLoader
조회 병합 같은 요청 안의 반복 조회를 batch와 cache로 묶어 N+1을 줄입니다.
요청 단위 캐시

운영 전 권한 경계

권한 위치 필드별 민감 데이터는 Resolver 또는 Guard에서 권한을 다시 확인합니다.
쿼리 비용 depth, complexity, pagination 제한이 없으면 작은 요청도 큰 부하가 됩니다.
오류 노출 스택트레이스와 DB 오류 메시지가 클라이언트로 그대로 나가지 않아야 합니다.