Files
document-haness/docs/clean-architecture-backend-template/tech-log-studio/assembly-ownership/case/case-thirteen-startup-rules-never-run.md
T

5.1 KiB

kind, slug, title, topic, project, status, sourceRevision, rootTreeNode, evidenceCapturedOn, assets, evidence, source
kind slug title topic project status sourceRevision rootTreeNode evidenceCapturedOn assets evidence source
CASE thirteen-startup-rules-never-run 확인한 자동설정 경로가 시작 검증기 13개 규칙을 호출하지 않는다 assembly-ownership clean-architecture-backend-template 게시 전 21234e38cdb9a926cbc92bb97a2aee2e4a7d2916 case:thirteen-startup-rules-never-run 2026-09-01
key file
thirteen-startup-rules-never-run ../../../final/evidence/rendered/thirteen-startup-rules-never-run.svg
../../../final/evidence/raw/thirteen-startup-rules-never-run.txt
원본 분석 절은 final/document.md#5-3 · final/document.md#a20 §3.1 이다.

확인한 자동설정 경로가 시작 검증기 13개 규칙을 호출하지 않는다

gRPC 플랫폼의 시작 검증기는 188줄에 13개 위반 규칙을 담고 있다. searched direct reference 기준으로 호출은 자기 테스트에서 확인했고, GrpcPlatformAutoConfiguration은 이 검증기를 직접 호출하지 않는다. 이 결과만으로 다른 lifecycle·framework discovery 경로까지 없다고 단정하지 않는다.

관계

  • 시작 검증기는 실제 lifecycle과 assembly 경로에서 실행 여부를 확인한다 이 사례의 direct-call 결과를 runtime 전체 미실행으로 과장하지 않기 위해 만든 확인 절차다.
  • @Bean이 있다는 것은 조립 증거가 아니다 검증기가 존재한다는 것과 그것이 도는 것은 별개다.

문제

GrpcPlatformStartupValidator 는 188줄이고 violations 목록에 13개 항목을 추가한다. TLS 요구, 실행기 풀 크기, 채널 프로파일, 자격증명 누출 등을 검사한다.

searched direct reference에서는 GrpcPlatformStartupValidatorTest의 테스트 호출만 확인된다.

같은 패키지의 GrpcPlatformAutoConfiguration 은 106줄이고 @Bean 이 9개인데, 그중 어느 것도 이 검증기를 부르지 않는다.

결론

검증기는 규칙과 단위 테스트를 갖고 있지만, 확인한 자동설정 경로에서는 호출되지 않는다.

이 판정은 gRPC 블록 전체가 현재 확인한 런타임 컴포지션에 속하지 않는다는 범위 안에 있다. 저장소 문서도 그 상태를 인정하므로 현재 미실행 자체를 결함으로 보지 않는다. 다만 블록을 배포하기 시작할 때는 검증기를 lifecycle에 명시적으로 연결해야 한다. 확인한 자동설정 경로는 이 검증기를 호출하지 않는다.

13개 규칙은 테스트로 고정되어 있으므로 회귀는 잡힌다. 잡히지 않는 것은 그 규칙이 실행 시점에 적용되는가다.

확인 절차로 일반화하면 direct caller에서 멈추지 않는다. @Bean·component scan·auto-configuration, lifecycle callback, application event·post processor, framework discovery를 차례로 확인하고, 실제 부팅이 가능한 환경에서는 condition report와 시작 로그까지 본다. 검증기 파일과 테스트의 존재만으로 runtime 실행 여부를 판정하지 않는다.

검증 환경

OpenJDK : 21.0.12 Gradle : 9.0.0 Spring Boot : 4.0.8 확인 방식 : 정적 도달성 확인 소스 수정 : x

재현 조건

원문은 final/evidence/raw/267-grpc-family-reachability.txt 에 있다.

  1. GrpcPlatformStartupValidator 의 줄 수와 violations 추가 지점 수를 센다.
  2. 저장소 전체에서 이 타입의 참조를 찾고 main 과 test 를 구분한다.
  3. GrpcPlatformAutoConfiguration 의 @Bean 목록에서 검증기 호출이 있는지 확인한다.

본문

validator가 5개 그룹 13개 규칙을 갖고(transport·security 4 / executor 2 / methods 4 / channels 2 / advanced isolation 1) javadoc이 그 13개를 고른 기준을 "None of them fails a smoke test"로 적는다.

다섯 그룹 13개 규칙

:::evidence key="thirteen-startup-rules-never-run" alt="분석 문서 final/document.md 에서 이 기록의 근거 절을 그대로 잘라낸 18줄. 코드베이스를 측정한 것이 아니라 원본 판정이 무엇을 적었는지를 보여 준다." caption="final/document.md 발췌 — 18줄" zoom="true" :::

확인한 자동설정 경로는 validator를 부르지 않는다

자동설정은 @Bean 9개를 만들면서 이 validator를 직접 부르지 않는다. validator 자체는 static 메서드 기반이라 일반적인 component bean 등록 경로도 보이지 않는다. 다만 다른 lifecycle·framework discovery 경로까지 이번 정적 검색으로 배제하지 않는다.

두 개의 강제가 이 하나를 통해서만 성립한다

CLAUDE.md가 인용한 "streaming method가 Stable catalog에 등록되면 startup을 거부한다"와 §2.2의 runtime 강제는 이 validator의 규칙에 의존한다. 확인한 자동설정 경로만 보면 이 규칙을 호출하지 않는다.

확인하지 못한 것

gRPC 블록이 어떤 배포에도 포함되지 않으므로 런타임 관측은 불가능하다. 이 판정은 정적 도달성에 근거한다.

build-only 가족이라 부팅 확인이 불가능하다 — 채택 시점에만 관측 가능