--- kind: CONCEPT slug: messaging-transport-spi-c01 title: 어댑터가 코덱도 한도도 스스로 고르지 않는다 topic: state-machines-and-ownership project: clean-architecture-backend-template status: 게시 전 sourceRevision: 21234e38cdb9a926cbc92bb97a2aee2e4a7d2916 rootTreeNode: concept:messaging-transport-spi-c01 evidenceCapturedOn: 2026-09-01 assets: - key: messaging-transport-spi-c01 file: ../../../final/evidence/rendered/messaging-transport-spi-c01.svg - key: messaging-transport-spi-c01-diagram file: ../../../final/assets/diagrams/messaging-transport-spi-c01.svg evidence: - ../../../final/evidence/raw/messaging-transport-spi-c01.txt source: - 원본 분석 절은 analysis/messaging/messaging-transport-spi.md#L62 이다. module: messaging-transport-spi --- # 어댑터가 코덱도 한도도 스스로 고르지 않는다 브로커 어댑터가 구현할 SPI와 그 어댑터들의 수명주기·세대 관리를 소유한다. 벤더 의존성이 0이다. ## 관계 - **멱등 종료를 보장하는 컴포넌트는 종료 이후의 등록도 정의한다** 같은 분석 리프에서 끌어낸 규칙이다. - **같은 개념의 sentinel은 계층을 넘어 하나로 정한다** 같은 분석 리프에서 끌어낸 규칙이다. ## 본문 브로커 어댑터가 구현할 **SPI**와, 그 어댑터들의 **수명주기·세대 관리**를 소유한다. 벤더 의존성이 0이다. ## 시그니처에 나오는 것과 나오지 않는 것 :::evidence key="messaging-transport-spi-c01-diagram" alt="리프 경계 안에 SPI 타입과 세대 수명주기가 들어 있고 브로커 네이티브 타입과 코덱 선택이 경계 밖 빗금 상자로 놓인 구조" caption="시그니처에 나오는 것과 나오지 않는 것" zoom="false" ::: 가장 중요한 경계 규칙이 `MessagingTransport`의 javadoc에 있다 — 13개 타입 중 어느 것도 브로커 네이티브 타입을 시그니처에 노출하지 않는다. `BrokerPosition`(core-api)이 `Map diagnosticAttributes()`로 좌표를 문자열로만 내보내는 것과 같은 규율이다. ## MessagingTransport 참조 위치 :::evidence key="messaging-transport-spi-c01" alt="코드베이스에서 MessagingTransport 를 검색한 출력 6줄. 이 기록이 세는 참조가 그 출력에 그대로 보인다." caption="MessagingTransport 코드베이스 검색 — 6줄 · exit 0" zoom="true" ::: ## 두 번째 경계는 인코딩 위치다 `TransportPublishRequest`도 대칭이다 — "The payload arrives already encoded and the profile arrives already validated, so an adapter never chooses a codec or a limit for itself. That is what keeps two adapters from disagreeing about what 'the same message' means."