{ "version": "1.1", "id": "production-vs-optin", "title": "app-bootstrap의 main 클래스패스에는 어댑터 11개가 포함되고 참조 어댑터 3개는 의존 목록 밖에 있다", "question": "app-bootstrap의 main 프로젝트 의존에 포함된 어댑터와 의존 목록 밖의 opt-in 참조 어댑터는 어떻게 구분되는가?", "type": "concept", "direction": "LR", "audience": [ "멀티모듈 Spring Boot 애플리케이션 설계자", "클린 아키텍처 구현 독자" ], "summary": "main 프로젝트 의존은 어댑터 11개를 클래스패스에 올리고, grpc·graphql·websocket 세 참조 어댑터는 의존성을 선언하지 않는 방식으로 opt-in한다.", "alt": "왼쪽의 app-bootstrap main 의존 포함 어댑터 11개와 오른쪽의 main 의존 목록 밖 grpc·graphql·websocket 세 개를 비교한 그림. 클래스패스 구성 비교이며 활성 빈 수를 뜻하지 않는다.", "long_description": "왼쪽 비교 항목은 app-bootstrap의 main 프로젝트 의존에 포함되어 main 클래스패스에 들어오는 어댑터 11개를 나타낸다. 클래스패스 포함과 실제 빈 활성화는 별개이며 런타임 조건이 활성화를 추가로 결정한다. 오른쪽 비교 항목은 현재 main 의존 목록에 없는 grpc, graphql, websocket 세 참조 어댑터를 나타낸다. 이 셋은 클래스패스에 등록되면 기본 활성화되므로 의존성 선언을 하지 않는 것이 opt-in 수단이다. 두 수치는 main 의존 선언을 비교한 것이며 실행 시 활성 빈 전체를 측정한 값이 아니다.", "source_context": { "document": "/home/donghyeon/workspace/ai-tool/topic-arrange/executable-clean-architecture/claridoc-rewrite/document.md", "document_sha256": "81fb5cb8cd16eaae6916a0d0f2b3cddfabc39e58a87559466b52f922ca95a95b", "anchor": { "kind": "marker", "value": "production-vs-optin", "line": 502 } }, "composition": { "profile": "comparison", "diagram_only": true, "reference_ids": [ "contract-comparison" ], "rationale": "본문이 main 프로젝트 의존에 포함된 집합과 의존 목록 밖의 opt-in 집합을 명시적으로 비교하므로, 호출 관계나 시간 순서를 만들지 않고 같은 필드로 두 집합을 정렬하는 비교 문법이 독자의 질문에 가장 직접적으로 답한다." }, "groups": [], "nodes": [ { "id": "main-classpath-adapters", "label": "main 의존 포함 · 11", "kind": "concept", "role": "option", "description": "app-bootstrap의 main 프로젝트 의존에 포함되어 main 클래스패스에 들어오는 어댑터 집합", "details": [ "수량: 11개", "프로젝트 의존: 선언됨", "클래스패스: 포함", "어댑터: 포함 대상 11개", "활성화: 클래스패스와 별도", "측정 범위: main 의존 선언" ], "emphasis": "primary", "evidence": [ { "start_line": 449, "end_line": 456 }, { "start_line": 476, "end_line": 480 }, { "start_line": 500, "end_line": 501 }, { "start_line": 517, "end_line": 517 } ], "assumption": false }, { "id": "omitted-optin-adapters", "label": "main 의존 목록 밖 · 3", "kind": "concept", "role": "option", "description": "저장소에는 있지만 app-bootstrap의 main 프로젝트 의존에는 선언되지 않은 참조 어댑터 집합", "details": [ "수량: 3개", "프로젝트 의존: 선언하지 않음", "클래스패스: 제외", "어댑터: grpc · graphql · websocket", "활성화: 등록하면 기본 활성", "측정 범위: main 의존 선언" ], "emphasis": "warning", "evidence": [ { "start_line": 481, "end_line": 489 }, { "start_line": 500, "end_line": 501 }, { "start_line": 517, "end_line": 517 } ], "assumption": false } ], "edges": [], "legend": [], "metadata": { "rationale": "14개 어댑터를 각각 카드로 반복하면 비교 필드가 흐려지고 밀도 예산을 넘으므로, 두 집합을 수량·의존 상태·클래스패스 상태·활성화 의미·측정 범위로 정렬했다." } }