--- kind: QUESTION slug: messaging-schema-protobuf-f03 title: protobuf-java 버전이 저장소에 셋이고 전역 정책이 없다 topic: schema-and-data-contracts project: clean-architecture-backend-template status: 게시 전 sourceRevision: 21234e38cdb9a926cbc92bb97a2aee2e4a7d2916 rootTreeNode: open-question:messaging-schema-protobuf-f03 questionStatus: OPEN verifiedOn: # 이 기록은 이번 회차에 실행 확인을 하지 않았다 source: - final/document.md#a19-messaging-schema-protobuf#L545 --- # protobuf-java 버전이 저장소에 셋이고 전역 정책이 없다 세 버전이 오늘 한 classpath 를 공유하지 않아 사고가 아니다. 이 leaf 를 런타임에 편입하는 순간 버전 판정이 필요해지고, 그때 참조할 전역 정책이 없다. ## 관계 - **검증되지 않는 스키마 파일은 문서임을 파일 안에 적는다** 같은 분석 리프에서 끌어낸 규칙이다. - **신뢰할 수 없는 입력 쪽 경계를 먼저 테스트한다** 같은 분석 리프에서 끌어낸 규칙이다. ## 사실 ext.protobufVersion = 3.25.5(grpc 모듈 범위로 한정), 이 leaf 4.29.3, websocket 4.33.2. lockfile 들이 세 값을 모두 고정한다. 근거 위치는 src/build.gradle:174-180 · messaging-schema-protobuf/build.gradle:9 · adapter/inbound/websocket/build.gradle:44,46 와 각 gradle.lockfile 이다. 이 leaf 의 runtime_memberships 가 [] 이라 세 버전이 한 classpath 를 공유하지 않는다. 채택 시점의 부채다. src/build.gradle 의 "the single SSOT" 라는 표현이 전역 정책의 존재를 시사하는데, 실제 범위는 그 문장 안에서 grpc 모듈로 한정된다. ## 미지수 이 leaf 를 런타임에 편입할 것인가. 저장소 안에 답이 없다. ## 선택지 편입 전까지 현 상태를 유지한다 src/messaging/CLAUDE.md 에 "편입 시 버전 정합을 먼저 판정한다" 를 적어 판정 시점을 예약한다. ext.protobufVersion 의 범위를 넓힌다 주석의 "single SSOT" 표현이 실제 범위와 맞아진다. ## 다음 검증 git grep -n 'protobuf-java\|protobufVersion' -- src --include='*.gradle' 로 세 값은 다시 확정된다. 편입 여부의 결정은 그 검색으로 답해지지 않는다.