--- kind: CONCEPT slug: messaging-schema-protobuf-c07 title: 실패의 종류가 바뀌면 운영자가 읽을 정보가 사라진다 topic: schema-and-wire-models project: clean-architecture-backend-template status: 게시 전 sourceRevision: 21234e38cdb9a926cbc92bb97a2aee2e4a7d2916 rootTreeNode: concept:messaging-schema-protobuf-c07 evidenceCapturedOn: 2026-09-01 assets: - key: messaging-schema-protobuf-c07 file: ../../../final/evidence/rendered/messaging-schema-protobuf-c07.svg evidence: - ../../../final/evidence/raw/messaging-schema-protobuf-c07.txt source: - 원본 분석 절은 final/document.md#a19-messaging-schema-protobuf#L458 이다. module: messaging-schema-protobuf --- # 실패의 종류가 바뀌면 운영자가 읽을 정보가 사라진다 ProtobufMessageContract javadoc이 두 결함을 보존한다. 두 번째가 특히 이 저장소의 반복 주제다 — 실패의 종류가 바뀌면 운영자가 읽을 정보가 사라진다. ## 관계 - **검증되지 않는 스키마 파일은 문서임을 파일 안에 적는다** 같은 분석 리프에서 끌어낸 규칙이다. - **신뢰할 수 없는 입력 쪽 경계를 먼저 테스트한다** 같은 분석 리프에서 끌어낸 규칙이다. ## 본문 `ProtobufMessageContract` javadoc이 두 결함을 보존한다. 두 번째가 특히 이 저장소의 반복 주제다 — **실패의 종류가 바뀌면 운영자가 읽을 정보가 사라진다.** `messaging-core-api`의 `FailureDescriptor` 설계, `MessageContractKey`의 2단 에러, JSON codec의 `unwrapTooLarge`가 전부 같은 관심사다. ## ProtobufMessageContract 참조 위치 :::evidence key="messaging-schema-protobuf-c07" alt="코드베이스에서 ProtobufMessageContract 를 검색한 출력 12줄. 이 기록이 세는 참조가 그 출력에 그대로 보인다." caption="ProtobufMessageContract 코드베이스 검색 — 12줄 · exit 0" zoom="true" ::: ## proto 파일의 주석이 남긴 규칙 셋 "Field numbers are the contract, not the field names ... Tags are never reused, and removed fields are reserved so that a later edit cannot take the number back." 이 규칙 셋 중 둘(개명 안전, 태그 재사용 위험)이 테스트로 증명되고 하나(reserved)는 증명되지 않는다.