--- kind: CONCEPT slug: messaging-schema-protobuf-c04 title: 계약 등록 실패가 시작 시점에 난다 topic: schema-and-wire-models project: clean-architecture-backend-template status: 게시 전 sourceRevision: 21234e38cdb9a926cbc92bb97a2aee2e4a7d2916 rootTreeNode: concept:messaging-schema-protobuf-c04 evidenceCapturedOn: 2026-09-01 assets: - key: messaging-schema-protobuf-c04 file: ../../../final/evidence/rendered/messaging-schema-protobuf-c04.svg evidence: - ../../../final/evidence/raw/messaging-schema-protobuf-c04.txt source: - 원본 분석 절은 analysis/messaging/messaging-schema-protobuf.md#L229 이다. module: messaging-schema-protobuf --- # 계약 등록 실패가 시작 시점에 난다 계약 등록: new ProtobufMessageContract(class, parser) → 빈 입력 파싱 → 클래스 일치 확인 → 실패 시 MessagingConfigurationException encode: requireRegistered → Message이고 등록 클래스인지 → requireFits(getSerializedSize()) → writeTo(sink) → EncodedMessage(bytes, PROTOBUF, SchemaReference) decode: requireRegistered → 요청 클래스 정확 일치 → encoded.length 상한 → parser.parseFrom ## 관계 - **검증되지 않는 스키마 파일은 문서임을 파일 안에 적는다** 같은 분석 리프에서 끌어낸 규칙이다. - **신뢰할 수 없는 입력 쪽 경계를 먼저 테스트한다** 같은 분석 리프에서 끌어낸 규칙이다. ## 본문 세 경로가 있다. **계약 등록:** `new ProtobufMessageContract(class, parser)` → 빈 입력 파싱 → 클래스 일치 확인 → 실패 시 `MessagingConfigurationException` **encode:** `requireRegistered` → `Message`이고 등록 클래스인지 → `requireFits(getSerializedSize())` → `writeTo(sink)` → `EncodedMessage(bytes, PROTOBUF, SchemaReference)` **decode:** `requireRegistered` → 요청 클래스 정확 일치 → `encoded.length` 상한 → `parser.parseFrom` ## MessagingConfigurationException 참조 위치 :::evidence key="messaging-schema-protobuf-c04" alt="코드베이스에서 MessagingConfigurationException 를 검색한 출력 5줄. 이 기록이 세는 참조가 그 출력에 그대로 보인다." caption="MessagingConfigurationException 코드베이스 검색 — 5줄 · exit 0" zoom="true" :::