--- kind: CONCEPT slug: messaging-security-c05 title: 같은 두 검사를 두 예외 계층이 나눠 갖는다 topic: delivery-and-settlement-models project: clean-architecture-backend-template status: 게시 전 sourceRevision: 21234e38cdb9a926cbc92bb97a2aee2e4a7d2916 rootTreeNode: concept:messaging-security-c05 evidenceCapturedOn: 2026-09-01 assets: - key: messaging-security-c05 file: ../../../final/evidence/rendered/messaging-security-c05.svg evidence: - ../../../final/evidence/raw/messaging-security-c05.txt source: - 원본 분석 절은 analysis/messaging/messaging-security.md#L339 이다. module: messaging-security --- # 같은 두 검사를 두 예외 계층이 나눠 갖는다 보안 판정이 두 예외 계층으로 나뉜다. BrokerTlsPolicy는 안정 코드가 붙은 MessagingConfigurationException을 쓰고, MessageSecurityValidator는 코드 없는 IllegalArgumentException을 쓴다. ## 관계 - **배선된 게이트는 자기 leaf 레인에서 검증한다** 같은 분석 리프에서 끌어낸 규칙이다. - **같은 술어가 두 타입에 있으면 하나가 다른 하나를 부른다** 같은 분석 리프에서 끌어낸 규칙이다. - **가변 필드로 상태 전이를 표현하면 가시성을 함께 정한다** 같은 분석 리프에서 끌어낸 규칙이다. - **맵 갱신 함수 안에서 I/O를 하면 그 지연이 락 범위가 된다** 같은 분석 리프에서 끌어낸 규칙이다. ## 본문 실패가 두 계층으로 나뉜다. | 코드 | 예외 | 위치 | |---|---|---| | `TLS_REQUIRED` | `MessagingConfigurationException` | `BrokerTlsPolicy` | | `HOSTNAME_VERIFICATION_REQUIRED` | `MessagingConfigurationException` | 같음 | | `TLS_PROTOCOL_NOT_ACCEPTED` | `MessagingConfigurationException` | 같음 | | `TLS_PROTOCOL_UNSPECIFIED` | `MessagingConfigurationException` | 같음 | | `APPLICATION_HOLDS_DESTRUCTIVE_GRANT` | `MessagingConfigurationException` | `BrokerAclManifest`(미사용) | | `DESTINATION_PUBLISH_DENIED` | `MessageAuthorizationException` | `DestinationAccessValidator`(미사용) | | `DESTINATION_CONSUME_DENIED` | `MessageAuthorizationException` | 같음(미사용) | | `DESTINATION_ADMIN_DENIED` | `MessageAuthorizationException` | 같음(미사용) | | (코드 없음) | `IllegalArgumentException` × 5 | `MessageSecurityValidator` | | (코드 없음) | `IllegalArgumentException` | `CredentialIds`, 각 생성자 | | (코드 없음) | `IllegalStateException` | `CredentialRuntime.material()` 소거 후 | ## BrokerTlsPolicy 참조 위치 :::evidence key="messaging-security-c05" alt="코드베이스에서 BrokerTlsPolicy 를 검색한 출력 28줄. 이 기록이 세는 참조가 그 출력에 그대로 보인다." caption="BrokerTlsPolicy 코드베이스 검색 — 28줄 · exit 0" zoom="true" ::: ## 나뉘는 지점 `BrokerTlsPolicy`는 안정 코드가 붙은 `MessagingConfigurationException`을 쓰고, `MessageSecurityValidator`는 코드 없는 `IllegalArgumentException`을 쓴다. 둘이 같은 두 검사(TLS·hostname)를 공유하는데도 그렇다 — §12.3, §17.