GraphQL 오류 처리의 핵심: 유니언, 오류, __typename
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
개발 툴
대상자
GraphQL 백엔드/프론트엔드 개발자, API 설계자
난이도: 중급 이상 (GraphQL 유니언, 타입 시스템 이해 필요)
핵심 요약
- GraphQL 오류 처리에서
__typename
을 활용한 유니언 타입 구분 ValidationError
와User
타입의 유니언으로 오류 구조 명확화__typename
을 통해 유니언 타입의 안전한 구분과 타입스크립트 추론 적용
섹션별 세부 요약
1. 기존 오류 처리의 한계
- 일반적인
data
/errors
필드로 오류 처리 시, 오류 메시지의 구조적 불확실성 발생 - 백엔드에서
email이 중복
오류 시, 프론트엔드에서error.message
만으로 필드 특정 불가 - GraphQL 서버가 임의의 오류 형식 반환 가능 → 스키마 검증 기능 약화
2. 오류를 데이터로 처리하는 방법
__typename
필드를 활용한 유니언 타입 반환
```graphql
signUp(input: $input) {
__typename
... on User { id email name }
... on ValidationError { field message }
}
```
- 프론트엔드에서
data.signUp.__typename
으로 타입 구분 및 필드 접근 가능 ValidationError
타입의 경우field
/message
필드를 타입스크립트 추론으로 안전하게 사용
3. 유니언 타입 구분 전략
__typename
을 기반으로 한 타입 가드
```typescript
if (data.signUp.__typename === 'ValidationError') {
setError(data.signUp.field, data.signUp.message);
}
```
isValidationError
함수의 불안정성(예:message
필드 중복 시 오류) 방지- 타입 시스템을 통한 안전한 오류 구분으로 코드 유지보수성 향상
결론
- GraphQL 오류 처리에서
__typename
을 반드시 활용해 유니언 타입의 명확한 구분과 타입 안전성 확보 ValidationError
와User
타입을 유니언으로 반환해 오류 정보의 구조적 명확성 제공- 타입스크립트 추론과 결합해 코드 안정성과 유지보수성 향상 가능