--- kind: CONCEPT slug: messaging-schema-api-c06 title: 의도적으로 스레드 안전하지 않은 타입이 하나 있다 topic: state-machines-and-ownership project: clean-architecture-backend-template status: 게시 전 sourceRevision: 21234e38cdb9a926cbc92bb97a2aee2e4a7d2916 rootTreeNode: concept:messaging-schema-api-c06 evidenceCapturedOn: 2026-09-01 assets: - key: messaging-schema-api-c06 file: ../../../final/evidence/rendered/messaging-schema-api-c06.svg evidence: - ../../../final/evidence/raw/messaging-schema-api-c06.txt source: - 원본 분석 절은 analysis/messaging/messaging-schema-api.md#L282 이다. module: messaging-schema-api --- # 의도적으로 스레드 안전하지 않은 타입이 하나 있다 `BoundedByteSink`는 의도적으로 thread-safe가 아니다 — javadoc이 명시하고 codec들이 매 `encode` 호출마다 새로 만든다. ## 관계 - **port 계약은 동시성 요구를 적는다** 같은 분석 리프에서 끌어낸 규칙이다. - **도달성 판정은 단어가 아니라 import로 확인한다** 같은 분석 리프에서 끌어낸 규칙이다. ## 본문 `BoundedByteSink`가 **의도적으로 thread-safe가 아니다.** javadoc이 명시한다 — "Not thread-safe, and not meant to be: an instance belongs to a single encode call." 실제로 codec들이 매 `encode` 호출마다 새로 만든다. ## BoundedByteSink 참조 위치 :::evidence key="messaging-schema-api-c06" alt="코드베이스에서 BoundedByteSink 를 검색한 출력 15줄. 이 기록이 세는 참조가 그 출력에 그대로 보인다." caption="BoundedByteSink 코드베이스 검색 — 15줄 · exit 0" zoom="true" ::: ## 불변인 것과 상태가 없는 것 `EncodedMessage`, `MessageContractKey`, `SchemaReference`는 불변이다. `SchemaCompatibilityValidator`는 registry 참조만 갖고 상태가 없다. ## 이 리프가 규정하지 않는 것 `MessageCodecRegistry`/`SchemaRegistry` 구현의 스레드 안전성은 이 leaf가 규정하지 않는다 — port javadoc에 그에 대한 요구가 없다. 이것은 §17의 P3 항목이다.