--- kind: CASE slug: messaging-spring-boot-starter-f01 title: 같은 자동 설정 안에서 검증기 하나만 감싸이지 않는다 topic: runtime-reachability-and-composition project: clean-architecture-backend-template status: 게시 전 sourceRevision: 21234e38cdb9a926cbc92bb97a2aee2e4a7d2916 rootTreeNode: case:messaging-spring-boot-starter-f01 evidenceCapturedOn: 2026-09-01 assets: - key: messaging-spring-boot-starter-f01 file: ../../../final/evidence/rendered/messaging-spring-boot-starter-f01.svg - key: messaging-spring-boot-starter-f01-diagram file: ../../../final/assets/diagrams/messaging-spring-boot-starter-f01.svg evidence: - ../../../final/evidence/raw/messaging-spring-boot-starter-f01.txt source: - 원본 분석 절은 final/document.md#a19-messaging-spring-boot-starter#L281 이다. module: messaging-spring-boot-starter priority: P2 --- # 같은 자동 설정 안에서 검증기 하나만 감싸이지 않는다 KafkaMessagingAutoConfiguration 은 검증기 셋을 만든다. KafkaTransactionProfileValidator 에는 대응하는 StartupProfileValidation 이 없다. ## 관계 - **검증기는 발행이 아니라 주입이 강제다** 같은 분석 리프에서 끌어낸 규칙이다. ## 문제 KafkaMessagingAutoConfiguration 은 검증기 셋을 만든다. KafkaTransactionProfileValidator 에는 대응하는 StartupProfileValidation 이 없다. ## 결론 즉 컨텍스트가 그 검증기를 발행하고 아무도 주입하지 않는다 — StartupProfileValidation 의 javadoc 이 서술한 이전 상태와 정확히 같은 형태다. RabbitMessagingAutoConfiguration 은 검증기 하나이고 그것을 감싼다. 그러므로 이 가족에서 감싸이지 않은 검증기는 이 하나다. 트랜잭션 프로파일 검증이 무엇을 막는지는 그 클래스가 안다 — 비트랜잭션 생산자 위의 정확히 한 번 주장 같은 조합이다. 그 검증이 지금 돌지 않는다. 수정은 한 블록이다. 같은 파일의 kafkaProfileStartupValidation 형태를 복사해 세 번째 검증기를 감싼다. ## 검증 환경 OpenJDK : 21.0.12 java -version 으로 확인 Gradle : 9.0.0 src/gradle/wrapper/gradle-wrapper.properties 의 distributionUrl 로 확인 확인 방식 : KafkaMessagingAutoConfiguration 참조 6건 검색과 세 검증기의 감싸기 여부 대조 소스 수정 : x ## 재현 조건 원문은 final/document.md#a19-messaging-spring-boot-starter#L281 에 있다. ## 본문 `KafkaMessagingAutoConfiguration` 은 검증기 셋을 만든다. `KafkaTransactionProfileValidator` 에는 대응하는 `StartupProfileValidation` 이 없다. ## 한 곳만 빠진 감싸기 :::evidence key="messaging-spring-boot-starter-f01-diagram" alt="KafkaProfileValidator 와 RabbitProfileValidator 가 감싸인 것 안에 놓이고 KafkaTransactionProfileValidator 가 바깥에 빗금으로 놓인다" caption="한 곳만 빠진 감싸기" zoom="false" ::: 즉 컨텍스트가 그 검증기를 발행하고 아무도 주입하지 않는다 — `StartupProfileValidation` 의 javadoc 이 서술한 이전 상태와 정확히 같은 형태다. ## KafkaMessagingAutoConfiguration 참조 위치 :::evidence key="messaging-spring-boot-starter-f01" alt="코드베이스에서 KafkaMessagingAutoConfiguration 를 검색한 출력 6줄. 이 기록이 세는 참조가 그 출력에 그대로 보인다." caption="KafkaMessagingAutoConfiguration 코드베이스 검색 — 6줄 · exit 0" zoom="true" ::: ## 이 가족에서 감싸이지 않은 검증기는 이 하나다 `RabbitMessagingAutoConfiguration` 은 검증기 하나이고 그것을 감싼다. 트랜잭션 프로파일 검증이 무엇을 막는지는 그 클래스가 안다 — 비트랜잭션 생산자 위의 정확히 한 번 주장 같은 조합이다. ## 수정은 한 블록이다 같은 파일의 `kafkaProfileStartupValidation` 형태를 복사해 세 번째 검증기를 감싼다. ## 확인하지 못한 것 TLS·SASL 을 요구하는 실제 브로커에 붙여 재현하지 않았다. 조립되는 설정 맵 성분과 보안 설정기가 만드는 성분의 교집합이 0 이라는 것으로 판정했다.