--- kind: CONCEPT slug: messaging-claim-check-c01 title: 위협은 실패가 아니라 잘못된 성공이다 topic: state-machines-and-ownership project: clean-architecture-backend-template status: 게시 전 sourceRevision: 21234e38cdb9a926cbc92bb97a2aee2e4a7d2916 rootTreeNode: concept:messaging-claim-check-c01 evidenceCapturedOn: 2026-09-01 assets: - key: messaging-claim-check-c01 file: ../../../final/evidence/rendered/messaging-claim-check-c01.svg - key: messaging-claim-check-c01-diagram file: ../../../final/assets/diagrams/messaging-claim-check-c01.svg evidence: - ../../../final/evidence/raw/messaging-claim-check-c01.txt source: - 원본 분석 절은 final/document.md#a19-messaging-claim-check#L57 이다. module: messaging-claim-check --- # 위협은 실패가 아니라 잘못된 성공이다 브로커 한계를 넘는 payload를 객체 저장소에 두고 메시지는 참조만 나른다. 위협 모델은 "decode perfectly into the wrong object"다. ## 관계 - **leaf의 각 public 클래스는 자기 레인에 테스트를 갖는다** 같은 분석 리프에서 끌어낸 규칙이다. - **같은 튜닝 값이 두 계층에 있으면 어느 쪽이 이기는지 정한다** 같은 분석 리프에서 끌어낸 규칙이다. ## 본문 **Claim Check 패턴** — 브로커 한계를 넘는 payload를 객체 저장소에 두고 메시지는 참조만 나른다. `messaging-reliability-api`의 `ClaimCheckReference`(storageKey·sizeBytes·sha256·expiresAt)를 값 타입으로 쓰고, 이 leaf가 그것을 만들고 검증하는 동작을 소유한다. ## payload가 지나는 경로 :::evidence key="messaging-claim-check-c01-diagram" alt="payload 와 객체 저장소와 참조와 메시지가 왼쪽에서 오른쪽으로 이어지고 화살표마다 무엇이 넘어가는지 붙은 구조" caption="payload 가 지나는 경로" zoom="false" ::: ## ClaimCheckReference 참조 위치 :::evidence key="messaging-claim-check-c01" alt="코드베이스에서 ClaimCheckReference 를 검색한 출력 33줄. 이 기록이 세는 참조가 그 출력에 그대로 보인다." caption="ClaimCheckReference 코드베이스 검색 — 33줄 · exit 0" zoom="true" ::: ## 이 리프의 위협 모델 경계 진술이 두 클래스에 있다. **"decode perfectly into the wrong object"**가 이 leaf의 위협 모델이다 — 실패가 아니라 잘못된 성공.