TL;DR
GraphQL 스키마 거버넌스는 스키마가 변경되면서도 계속 유용하게 쓰일 수 있도록 유지하는 릴리스 규율입니다. 각 릴리스 전에 스키마 수정 사항을 분류하고, 대표적인 클라이언트 작업을 테스트하며, 사용 중단 경로를 공개하고, 문서를 검증합니다. Apidog와 같은 공유 워크스페이스는 설계, 요청, 테스트, 문서, 목 작업을 한 곳에 모아줍니다.
- GraphQL 스키마를 내부 구현 세부사항이 아닌 공개 계약으로 취급하세요.
- 변경 사항이 클라이언트에 도달하기 전에 호환성을 깨는 변경을 감지하세요.
- 오래된 필드를 사용 중단하기 전에 대체 필드를 먼저 추가하세요.
- 후보 스키마와 응답 계약에 대해 저장된 작업을 테스트하세요.
- 소유권, 검토 결정, 소비자 영향, 제거 날짜를 기록하세요.
- 클라이언트 팀이 무엇을 언제 변경해야 하는지 알려주는 릴리스 노트를 발행하세요.
서론
GraphQL 스키마 거버넌스는 API 릴리스가 예고 없이 모바일 앱, 웹 클라이언트, 통합, 내부 서비스를 망가뜨리지 않도록 막아줍니다. GraphQL은 클라이언트 쿼리를 유연하게 만들어주지만, 클라이언트가 의존하게 되는 순간 모든 필드, 인자, 열거형 값, null 허용 규칙, 입력 객체가 여전히 계약의 일부가 됩니다.
그 계약은 자주 변경됩니다. 제품 팀이 displayName의 이름을 바꿉니다. 백엔드 팀이 선택적 입력을 필수로 만듭니다. 결제 서비스가 열거형 값을 제거합니다. 각 수정은 스키마 편집기에서는 무해해 보이지만 프로덕션의 저장된 작업을 무효화할 수 있습니다.
GraphQL 명세는 GraphQL의 타입 시스템, 검증 규칙, 스키마 진화 관련 사항을 설명합니다. 이는 팀에게 공통 언어를 제공합니다. 거버넌스는 릴리스 프로세스를 제공합니다. 누가 변경을 검토하는지, 팀이 클라이언트 영향을 어떻게 평가하는지, 어떻게 테스트하는지, 그리고 예상치 못한 장애 없이 오래된 필드를 어떻게 은퇴시키는지 말입니다.
이 글은 GraphQL 입문보다 릴리스 통제에 초점을 맞춥니다. 팀에 먼저 요청 수준의 워크플로가 필요하다면 Apidog에서 GraphQL API를 테스트하는 방법을 참고하세요. 다음 단계는 그 테스트들을 지속 가능한 스키마 변경 프로세스의 일부로 만드는 것입니다.
GraphQL 스키마 거버넌스란 무엇인가?
GraphQL 스키마 거버넌스는 릴리스 전에 스키마 변경을 검토, 테스트, 문서화, 승인하는 반복 가능한 프로세스입니다. 클라이언트를 망가뜨리는 수정 사항을 식별하고, 승인된 마이그레이션 경로를 요구하며, 소유권을 가시적으로 유지합니다. 목표는 예측 가능한 스키마 진화입니다. 클라이언트는 오래된 계약이 사라지기 전에 이동할 시간과 지침을 받습니다.

거버넌스는 스키마를 동결하라는 뜻이 아닙니다. 건강한 GraphQL API는 제품과 함께 변경됩니다. 이 프로세스는 안전하게 변경할 수 있게 해줍니다.
유용한 거버넌스 정책은 모든 풀 리퀘스트나 릴리스 후보에 대해 다섯 가지 질문에 답합니다:
- 스키마에서 무엇이 변경되었는가?
- 어떤 변경이 이전에 유효했던 클라이언트 작업을 실패시킬 수 있는가?
- 영향을 받는 필드와 클라이언트 마이그레이션은 누가 소유하는가?
- 어떤 저장된 작업과 응답 검사가 호환성을 입증하는가?
- 사용 중단된 필드나 열거형 값은 언제 제거할 수 있는가?
이 질문들은 막연한 “API 검토” 요청을 검토자가 검사할 수 있는 증거로 바꿔줍니다.
GraphQL에 명시적인 릴리스 프로세스가 필요한 이유
GraphQL 클라이언트는 자체 선택 집합을 구성합니다. 두 클라이언트가 동일한 쿼리 루트를 호출하면서도 완전히 다른 필드, 프래그먼트, 변수, 별칭에 의존할 수 있습니다. 서버 텔레메트리, 저장된 쿼리, 소비자 팀의 지식 모두 도움이 되지만, 어느 하나만으로 수정이 안전하다고 입증할 수는 없습니다.
어떤 변경은 서버 단위 테스트는 통과하면서도 검증 시점에 클라이언트를 실패시킬 수 있습니다. 필드를 제거하면 이를 선택하는 모든 작업이 무효가 됩니다. 필수 입력 필드를 추가하면 이를 생략하는 작업이 무효화될 수 있습니다. 열거형을 변경하면 생성된 클라이언트나 망라적 switch 분기가 서버 응답을 처리하지 못할 수 있습니다. null 허용 필드 타입을 다른 형태로 교체하면 파싱이나 UI 가정이 깨질 수 있습니다.
같은 긴장은 API 관리 작업에서도 나타납니다. GraphQL API 관리 플랫폼은 팀이 계약 결정, 문서, 검증을 API 가까이에 유지하도록 도와야 합니다. 거버넌스는 이러한 기능들이 사고 이후가 아니라 릴리스 중에 유용하게 쓰이도록 만듭니다.
논쟁하기 전에 스키마 수정 사항을 분류하세요
모든 변경을 분류로 시작하세요. 라벨이 복잡할 필요는 없습니다. 올바른 검토 경로를 만들어내면 됩니다.

| 변경 유형 | 예시 | 클라이언트 위험 | 기본 릴리스 조치 |
|---|---|---|---|
| 추가형 | Order.trackingUrl 추가 |
낮음, 단 클라이언트가 알 수 없는 응답 필드를 거부하는 경우 제외 | 문서화하고 테스트 |
| 사용 중단형 | User.fullName을 사용 중단으로 표시하고 User.displayName 추가 |
중간 | 대체 필드와 마이그레이션 날짜 공개 |
| 호환성 파괴형 | User.fullName 제거 |
높음 | 소비자 마이그레이션 증거가 나올 때까지 차단 |
| 동작 변경형 | 필드는 유지하되 권한 부여나 페이지네이션 동작을 변경 | 높음 | 계약 변경으로 취급하고 영향받는 경로를 테스트 |
| 모호형 | 필드의 타입이나 입력 시맨틱 변경 | 높음 | 설계 검토와 호환성 테스트 요구 |
이 표는 출발점입니다. 추가형이라고 여겨지는 변경도 여전히 중요할 수 있습니다. 예를 들어 일부 생성된 클라이언트나 엄격한 응답 검증기는 알 수 없는 필드를 문제로 취급합니다. Apidog의 응답 검증 설정은 기본적으로 추가 객체 속성을 허용합니다. 정책상 예상치 못한 속성을 확인해야 한다면 해당 응답 스키마에 대해 additionalProperties를 Deny로 설정하거나 프로젝트 설정을 의도적으로 변경하세요.
기본적으로 릴리스를 중단해야 하는 변경
검토는 다음 중 하나라도 포함되면 명시적 승인을 요구해야 합니다:
- 필드, 인자, 입력 필드, 뮤테이션, 쿼리, 인터페이스 구현, 유니언 멤버, 열거형 값 제거.
- 대체 필드를 추가하고 이전 이름을 사용 중단하는 대신 필드 이름 변경.
- 이전에 선택적이던 입력을 필수로 만들기.
- 필드의 타입, null 허용 기대치, 형식, 권한 부여 동작, 페이지네이션 동작, 오류 계약 변경.
- 기존 필드 이름을 다른 비즈니스 의미로 재사용.
- 클라이언트가 의도적으로 생략하는 기본값 변경.
규칙은 간단합니다. 클라이언트 쿼리나 클라이언트측 가정이 어제는 동작했는데 내일 실패할 수 있다면, 증거가 반대를 입증할 때까지 호환성 파괴형으로 분류하세요.
사용 중단을 마이그레이션 계약으로 활용하세요
사용 중단은 실제 앞으로 나아갈 경로를 포함할 때 효과가 있습니다. 대체 필드, 소유자, 마감일, 마이그레이션 노트 없는 “사용 중단”은 단지 호환성 파괴 변경을 미룰 뿐입니다.
고객 이름 정리 사례를 생각해보세요. 필드 이름을 제자리에서 바꾸지 마세요:
# Avoid removing fullName in the same release.
type Customer {
fullName: String!
}
대체 필드를 추가하고, 이유를 설명한 뒤, 공지된 기간 동안 두 필드를 모두 지원하세요:
type Customer {
displayName: String!
fullName: String! @deprecated(reason: "Use displayName. Removal planned after client migration.")
}
대체 필드는 스키마 주석 그 이상이 필요합니다. 문서에 추가하고, 1자 클라이언트를 업데이트하고, 고가치 소비자를 식별하고, 도입을 추적하세요. 마이그레이션 종료 기준이 충족된 후에만 오래된 필드를 제거하세요.
GraphQL 스키마 거버넌스 워크플로 구축하기
반복 가능한 워크플로에는 체크포인트가 있습니다. 급한 릴리스 중에 한 사람이 모든 클라이언트 세부사항을 기억하는 데 의존하지 않습니다.
1. 단일 진실 공급원과 명명된 소유자 설정
하나의 승인된 스키마 소스를 유지하고 카탈로그, 결제, ID, 이행 등 각 경계 영역에 소유자를 지정하세요. 소유자가 모든 리졸버를 작성할 필요는 없습니다. 다만 해당 영역의 계약 질문에 답하고 변경을 승인해야 합니다.
스키마 변경과 함께 다음 세부사항을 기록하세요:
- 스키마 영역과 소유 팀.
- 변경 분류.
- 영향받는 필드나 작업을 사용하는 것으로 알려진 소비자.
- 대체 필드 또는 마이그레이션 지침.
- 가장 이른 제거 날짜.
- 후보 릴리스가 동작함을 입증하는 테스트.
이 기록은 필드가 버려진 공개 영역이 되는 것을 막아줍니다.
2. 후보 스키마를 diff하고 위험 할당
현재 릴리스와 후보 간의 스키마 diff를 생성하거나 검토하세요. 줄 단위 diff에서 멈추지 마세요. 결과를 클라이언트 영향으로 변환하세요.
변경된 각 타입에 대해 기존 쿼리가 무효가 될 수 있는지, 기존 JSON 응답의 형태가 바뀔 수 있는지, 타입 시스템 변경 없이 동작이 바뀌는지 물어보세요. 권한 부여 규칙이 흔한 예입니다. 이전에 보이던 필드가 권한 부여 오류나 null을 반환하기 시작해도 스키마는 동일하게 유지될 수 있습니다.
다음과 같은 짧은 변경 기록을 사용하세요:
change: remove Customer.fullName
type: breaking
owner: customer-platform
replacement: Customer.displayName
deprecated_since: 2026-08-21
planned_removal: 2026-11-21
known_consumers:
- ios-storefront
- partner-portal
release_checks:
- saved-operation-suite
- client-migration-confirmations
- published-release-notes
날짜는 예시입니다. 정책은 릴리스 주기, 클라이언트 업데이트 속도, 계약상 약속에 맞는 사용 중단 기간을 설정해야 합니다.
3. 스키마 구문뿐 아니라 실제 작업을 테스트하세요
스키마는 파싱되면서도 클라이언트를 망가뜨릴 수 있습니다. 각 주요 소비자나 사용자 여정에 대해 대표적인 작업 모음을 유지하세요. 프래그먼트, 변수, 페이지네이션, 권한 경계, 오류, 선택적 필드를 포함하세요.
스토어프론트의 경우 모음에 다음이 포함될 수 있습니다:
query ProductPage($sku: ID!, $first: Int!) {
product(sku: $sku) {
id
displayName
price {
amount
currency
}
relatedProducts(first: $first) {
nodes {
id
displayName
}
}
}
}
후보 환경에 대해 작업을 실행하세요. HTTP 상태, GraphQL 오류, 필수 응답 값, 타입 기대치, 클라이언트에 중요한 비즈니스 규칙을 검증하세요. HTTP 200과 errors 배열이 있는 응답은 많은 사용 사례에서 성공적인 GraphQL 작업이 아닙니다.
실제 엣지 케이스를 다루는 요청 픽스처를 사용하세요: 빈 목록, null 선택 필드, 삭제된 리소스, 권한 거부, 로케일 차이, 오래된 커서. 저장된 작업은 릴리스 결정을 뒷받침하는 증거가 됩니다.
4. 문서를 게이트의 일부로 만드세요
문서는 스키마와 동일한 검토 날짜가 필요합니다. 존재하지만 설명, 예시, 권한 노트, 마이그레이션 지침이 없는 필드는 클라이언트 팀이 의도를 역설계하도록 만듭니다.
영향받는 각 필드나 입력에 대해 확인하세요:
- 설명이 리졸버 동작이 아닌 비즈니스 의미를 설명하는가?
- null 허용과 기본값 기대치가 명확한가?
- 사용 중단된 필드가 대체 필드를 명시하는가?
- 관련 예시가 새 필드를 사용하는가?
- 변경 로그가 조치, 대상, 제거 날짜를 설명하는가?
여기서 팀은 인트로스펙션이 가능할 때만 작동하는 GraphQL 스키마라는 흔한 문제도 방지합니다. 공개된 참조 자료와 릴리스 노트는 외부 클라이언트와 제한된 환경을 위해 독립적으로 이해될 수 있어야 합니다.
5. 릴리스하고, 관찰하고, 증거에 따라 제거하세요
제거 마감 전에 변경 분류와 마이그레이션 노트를 공개하세요. 가능하면 스키마 인식 텔레메트리로 클라이언트 마이그레이션을 추적하고, 외부 소비자는 파트너 확인을, 1자 팀은 완료 증거를 확인하세요.
종료 날짜가 되면 저장된 작업 모음을 다시 실행하세요. 중요한 작업이 여전히 사용 중단된 필드를 사용한다면 제거를 연기하세요. 오래된 필드는 피할 수 있는 클라이언트 장애보다 비용이 적습니다.
Apidog로 검토를 반복 가능하게 만드세요
Apidog는 API 팀에게 설계, 디버깅, 테스트, 문서, 목을 위한 하나의 워크스페이스를 제공합니다. GraphQL 거버넌스 프로세스에서 유용한 목표는 릴리스 단계마다 별도 도구를 쓰는 것이 아니라 공유된 검토 흔적입니다.
Apidog에서 Body > GraphQL을 통해 GraphQL 요청을 만들고 Fetch Schema를 사용해 스키마를 로드하세요. GraphQL 편집기는 가져온 스키마를 사용해 필드와 타입 제안을 제공하고 이에 대해 쿼리를 검사합니다. 팀 워크플로를 구성하기 전에 공식 GraphQL 요청 문서를 읽어보세요.
실용적인 릴리스 설정은 다음과 같습니다:
- 각 중요 흐름에 대해 대표적인 쿼리와 뮤테이션을 저장하세요.
- 환경별 변수를 쿼리 밖에 두어 작업 형태가 안정적으로 유지되게 하세요.
- 상태, 헤더, JSON 응답 형태, 필수 필드, 열거형, 오류 동작에 대한 검증을 추가하세요.
- 검사를 후보 환경용 릴리스 모음으로 그룹화하세요.
- 승인 전에 스키마 diff와 변경 기록과 함께 실패한 검사를 검토하세요.
- 동일한 승인된 API 계약에서 문서와 마이그레이션 노트를 공개하세요.
응답 검증은 상태, 형식, 스키마 적합성을 확인합니다. 문서화된 검사에는 JSON 및 XML 응답에 대한 필수 필드, 타입, null 허용, 열거형 값, 범위, 패턴이 포함됩니다. GraphQL 응답 본문은 JSON을 사용하므로 유용합니다. 이는 GraphQL 스키마 diff 도구나 소비자 인벤토리를 대체하지 않습니다. 둘 모두와 함께 사용하세요.
팀이 요청 수준 테스트에서 시작한다면 GraphQL 테스트 및 목 도구가 테스트 계층을 구성하는 데 도움이 될 수 있습니다. 거버넌스는 그 테스트 주변에 릴리스 기록, 소유권, 사용 중단 정책을 추가합니다.
설계, 요청, 응답 검증, 문서, 목 워크플로를 하나의 워크스페이스에서 원한다면 Apidog 다운로드하세요. 거버넌스 정책은 저장소에 두고, 워크스페이스를 사용해 각 릴리스 검토에 구체적인 테스트 증거를 제공하세요.
더 큰 GraphQL API를 위한 고급 기법
소비자 등급 정의
모든 클라이언트가 동일한 릴리스 위험을 지니지는 않습니다. 영향과 업그레이드 속도로 소비자를 분류하세요:
| 소비자 등급 | 예시 | 호환성 파괴 제거 전 필수 증거 |
|---|---|---|
| 1등급 | 수익 경로, 모바일 앱, 규제 대상 통합 | 마이그레이션 확인 및 엔드투엔드 작업 테스트 통과 |
| 2등급 | 내부 웹 애플리케이션 또는 예약된 통합 | 저장된 작업 통과 및 소유자 승인 |
| 3등급 | 실험적 클라이언트 또는 샌드박스 소비자 | 공개된 사용 중단 공지 및 합리적인 마이그레이션 기간 |
등급은 작은 내부 실험이 결제 흐름과 동일한 릴리스 부담을 지우지 않도록 막아줍니다. 또한 중요한 외부 통합이 추적되지 않는 쿼리처럼 취급되는 것을 막아줍니다.
스키마 외부의 동작 변경 추적
스키마 diff는 모든 계약 변경을 감지할 수 없습니다. 다음에 대한 검토 질문을 추가하세요:
- 권한 부여 및 필드 수준 접근.
- 페이지네이션 순서, 커서 수명, 페이지 크기 상한.
- 캐싱 동작 및 무효화 시점.
- 오류 확장 및 사용자에게 보이는 오류 메시지.
- 속도 제한 동작 및 재시도 지침.
- 유효한 작업을 불안정한 작업으로 만드는 리졸버 성능.
계획된 각 동작 변경에 대해 대상 테스트를 작성하세요. 이는 표면적인 “스키마 호환성 파괴 변경 없음” 라벨이 릴리스 통과가 되는 것을 방지합니다.
페더레이션 경계를 계약 경계로 취급하세요
여러 팀이 서브그래프에 기여한다면, 모든 공유 엔티티, 키, 서브그래프 간 필드에 명시적인 소유권이 필요합니다. 필드는 한 팀에 로컬로 보일 수 있지만 다른 서브그래프가 이를 확장하거나 소비합니다.
변경 기록에 영향받는 서브그래프 목록을 요구하세요. 구성된 스키마 동작과 경계를 넘는 엔드투엔드 작업을 테스트하세요. 깨끗한 로컬 스키마 검사가 구성된 그래프가 작동함을 입증하지는 않습니다.
예외 경로 설정
필드가 데이터를 노출하거나 보안 문제를 일으키거나 심각한 운영상 피해를 초래할 때 긴급 제거가 필요합니다. 거버넌스에는 예외 경로가 있어야 팀이 압박 속에서 문서화와 테스트를 건너뛰지 않습니다.
예외 기록에는 위험, 승인한 소유자, 영향받는 소비자, 완화 조치, 후속 계획을 명시해야 합니다. 정상적인 사용 중단 기간이 불가능할 때는 소비자에게 직접 알리세요. 그런 다음 회귀 테스트를 추가해 같은 실수가 반복되지 않게 하세요.
대안과 한계
스키마 레지스트리, 페더레이션 게이트웨이, 생성된 클라이언트, CI 스키마 diff 검사 모두 도움이 될 수 있습니다. 그러나 어느 것도 전체 프로세스를 대체하지는 않습니다.
| 접근법 | 잘하는 것 | 입증하지 못하는 것 |
|---|---|---|
| 스키마 diff | 구조적 수정 발견 | 실제 클라이언트 작업과 동작이 여전히 작동하는지 |
| 생성된 클라이언트 컴파일 | 일부 1자 타입 오류 감지 | 외부 소비자 마이그레이션 또는 런타임 동작 |
| 요청 테스트 모음 | 대표 작업 확인 | 모든 추적되지 않은 소비자와 소유권 결정 |
| 변경 로그만 | 계획된 작업 전달 | 호환성 파괴 수정이 릴리스해도 안전한지 |
| 거버넌스 워크플로 | 검토, 테스트, 소유권, 사용 중단 연결 | 증거를 제공할 도구와 팀이 여전히 필요함 |
API에 신뢰할 수 있는 증거를 만들어내는 가장 작은 스택을 선택하세요. 팀이 새 서비스에 GraphQL이 맞는지 결정하고 있다면 REST vs GraphQL vs gRPC에서 클라이언트 주도 쿼리 모델을 REST 및 gRPC와 비교하세요. 프로토콜 선택과 릴리스 거버넌스는 별개의 결정입니다. 모든 공개 계약에는 여전히 둘 모두가 필요합니다.
실제 사용 사례
모바일 앱이 이름이 바뀐 프로필 필드를 필요로 함
프로필 팀이 조직 계정이 다른 이름 지정 모델을 사용하기 때문에 fullName을 displayName으로 교체하려 합니다. 거버넌스 경로는 이름 변경 커밋 후 릴리스가 아닙니다.
displayName을 추가하고, 사용 중단 이유와 함께 fullName을 유지하고, 모바일 쿼리를 업데이트하고, 전환 중 두 필드를 모두 테스트하고, 앱 버전별 도입 데이터를 수집하세요. 지원되는 앱 버전이 더 이상 의존하지 않거나 공개된 지원 기간이 끝난 후에만 fullName을 제거하세요.
체크아웃 뮤테이션에 새로운 입력 요구사항이 생김
결제 팀이 CheckoutInput.taxRegion을 필수로 만들려 합니다. 기존 앱 버전은 값을 생략합니다. 입력을 즉시 필수로 만들면 그렇지 않으면 유효한 체크아웃 작업이 검증에 실패할 수 있습니다.
마이그레이션 중에는 입력을 선택적으로 유지하고, 서버 폴백 동작을 정의하고, 새 요구사항을 공개하고, 클라이언트를 업데이트하고, 구 및 신 요청 형태에 대한 테스트 케이스를 추가하세요. 클라이언트가 이동한 후 계획된 호환성 파괴 릴리스에서 필수 규칙을 적용하세요.
파트너가 문서화되지 않은 필드 변경을 경험함
파트너는 응답 필드를 문자열로 파싱하지만 백엔드는 구조화된 객체를 반환하려 합니다. 내부 클라이언트가 이미 이동했더라도 파트너는 런타임에 실패할 수 있습니다.
소유 팀은 파트너를 1등급 소비자로 기록하고, 기존 필드를 제자리에서 변경하는 대신 대체 필드를 추가하고, 파트너에게 테스트 환경을 제공하고, 제거 전에 저장된 파트너 작업을 검증하세요. 문서와 직접 소통은 릴리스 증거의 일부입니다.
하나의 릴리스 체크리스트로 시작하세요
작게 시작하세요. 클라이언트 작업이 가장 활발한 GraphQL 영역을 선택하고 이번 달 모든 스키마 수정에 변경 기록을 요구하세요. 변경을 분류하고, 대표 작업을 저장하고, 사용 중단을 문서화하고, 제거에는 명명된 승인자를 요구하세요.
그런 다음 체크리스트를 릴리스 습관으로 만드세요. Apidog는 요청, 응답 검증, 문서, 목 시나리오, 테스트 증거를 함께 유지할 수 있으며, 저장소는 거버넌스 정책의 소스로 남습니다. 결과는 긴급 롤백 감소와 모든 API 소비자에 대한 더 명확한 기대입니다.
FAQ
무엇이 호환성을 깨는 GraphQL 스키마 변경으로 간주되나요?
릴리스 전에는 유효했던 클라이언트 작업이 릴리스 후 실패할 수 있을 때 변경은 호환성 파괴입니다. 필드나 인자 제거가 명확한 예입니다. 이전에 선택적이던 입력을 필수로 만들기, 호환성 평가 없이 타입 변경, 열거형 값 제거, 필드 동작 변경도 클라이언트를 망가뜨릴 수 있습니다.
GraphQL 필드 추가는 항상 안전한가요?
일반적으로 선택적 필드를 추가하는 것은 기존 작업을 무효화하지 않습니다. 그러나 예상치 못한 응답 속성을 엄격히 거부하는 클라이언트, 생성된 코드, 문서 워크플로, 스키마 도구에 영향을 줄 수 있습니다. 추가를 분류하고, 문서화하고, 엄격한 검증을 사용하는 소비자를 테스트하세요.
GraphQL 필드는 얼마나 오래 사용 중단 상태로 유지해야 하나요?
클라이언트 릴리스 주기, 지원 약속, 소비자 위험으로 기간을 설정하세요. 도입이 느린 모바일 앱은 매일 배포되는 내부 서비스보다 더 많은 시간이 필요합니다. 마감일을 공개하고, 중요한 소비자를 식별하고, 마이그레이션 증거가 완료된 후에만 필드를 제거하세요.
GraphQL 인트로스펙션이 문서를 대체할 수 있나요?
아니요. 인트로스펙션은 도구가 스키마를 발견하도록 도와주지만, 명확한 설명, 예시, 권한 노트, 변경 로그, 마이그레이션 지침을 대체하지 않습니다. 외부 또는 잠긴 환경에서는 인트로스펙션을 제한할 수도 있으므로, 공개된 참조 자료는 계약을 스스로 설명해야 합니다.
프로덕션 전에 GraphQL 호환성 파괴 변경을 어떻게 테스트하나요?
스키마 diff를 실행한 다음, 후보 환경에 대해 저장된 대표 쿼리와 뮤테이션을 실행하세요. GraphQL 오류, 필수 데이터, 타입, 열거형 값, null 동작, 권한, 비즈니스 결과를 검증하세요. 일반적인 스모크 테스트만이 아니라 영향이 큰 클라이언트 작업을 포함하세요.
응답 검증이 모든 GraphQL 회귀를 감지하나요?
아니요. 검증하기로 선택한 문서화된 응답 계약을 감지할 뿐입니다. 모든 소비자를 식별하거나, 전체 GraphQL 스키마를 비교하거나, 문서화되지 않은 동작 변경을 스스로 감지하지는 않습니다. 응답 검증을 작업 테스트, 스키마 검토, 소유권, 사용 중단 프로세스와 함께 사용하세요.
