--- kind: CASE slug: analysis-finding-a09-f004 title: 그러나 R0 경계가 문서에만 있고 compile 경로에서 닫히지 않는다 topic: file-transfer-and-storage project: clean-architecture-backend-template status: 게시 전 sourceRevision: 21234e38cdb9a926cbc92bb97a2aee2e4a7d2916 rootTreeNode: case:analysis-finding-a09-f004 evidenceCapturedOn: 2026-09-01 body: case-analysis-finding-a09-f004.body.md assets: - key: analysis-finding-a09-f004 file: ../../../final/evidence/rendered/analysis-finding-a09-f004.svg evidence: - ../../../final/evidence/raw/analysis-finding-a09-f004.txt source: - 원본 분석 절은 final/document.md#a09#L485 이다. --- # 그러나 R0 경계가 문서에만 있고 compile 경로에서 닫히지 않는다 직접 전송 능력이 아직 배선되지 않았다고 README 가 선언한다. 그런데 설정은 그 능력을 계속 받아들이고 런타임은 자격증명을 쥔 서명자를 실제로 만든다. 만들어진 제공자를 꺼내 가는 코드는 없다. ## 관계 - **두 개의 outbox 중 하나만 조립되어 있다** 같은 형태의 미조립 사례다. - **production 판정이 두 개의 리터럴 프로파일 이름에 걸려 있다** 같은 리프의 다른 사례이자 반대 사례다. - **문서가 선언한 경계는 코드가 닫아야 경계다** 이 사례가 그 규칙의 형태다. ## 문제 README 가 직접 업로드와 직접 다중 파트가 아직 배선되지 않았다고 적는다. 그 선언이 코드로도 강제되는지 확인했다. ## 결론 강제되지 않는다. 네 단계로 확인된다. 첫째, 두 능력은 목적지 요구사항으로 선언할 수 있고 바인딩 컴파일러가 그것을 제공자 능력으로 번역한다. 둘째, 제공자 바인딩의 프로파일 컴파일은 자체 호스팅 구현에 대해서만 이 두 주장을 거부한다. 정확한 판본이 조건부 관리 변형을 기본 지원한다고 주장할 수 없다는 이유다. 클라우드 프로파일에는 대응하는 거부가 없다. 셋째, 그러면 제공자 기여자가 두 스위치 중 하나라도 켜져 있을 때 서명자를 할당하고 직접 전송 제공자와 직접 다중 파트 제공자를 만들어 선택 팩토리에 넣는다. 넷째, 그 둘을 팩토리에서 꺼내 가는 코드가 없다. 전수 검색 결과가 0 이다. 즉 클라우드 바인딩에서 직접 업로드를 요구하는 배포는 시작을 통과하고 서명자를 할당하고 두 제공자를 조립하고, 직접 전송 포트는 여전히 하나도 얻지 못한다. README 가 말한 미배선은 사실이다. 그 사실을 강제하는 것이 문서뿐이다. 이 리프 안에 정반대의 사례가 있어서 대비가 분명하다. 개발용 제공자는 운영 프로파일에서 컴파일 시점에 거부된다. 자체 호스팅 구현의 능력 과대 주장도 컴파일 시점에 거부된다. 같은 파일이 같은 종류의 자격 없음 판정을 클라우드와 직접 전송 조합에 대해서만 하지 않는다. 판정은 P2 다. 데이터 위험은 없다. 없는 포트는 호출될 수 없다. 위험은 둘이다. 운영자가 켰다고 믿는 기능이 없다는 것과, 아무도 쓰지 않는 서명 자격증명 핸들이 프로세스 수명 동안 살아 있다는 것이다. 수정은 셋 중 하나다. 조정자를 조건부로 조립하거나, 미배선 동안 두 능력 요구를 제공자 종류와 무관하게 컴파일 단계에서 거부하거나, 능력이 켜져도 서명자를 만들지 않도록 조립을 뒤로 미루는 것이다. ## 검증 환경 확인 방식 : 바인딩 컴파일러와 제공자 기여자 코드 확인, 소비자 전수 검색 소스 수정 : x ## 재현 조건 원문은 final/evidence/raw/154 계열에 있다. 1. README 의 미배선 선언을 읽는다. 2. 두 능력이 목적지 요구사항으로 선언 가능한지 확인한다. 3. 프로파일 컴파일에서 어느 제공자에 대해 거부가 있는지 확인한다. 4. 제공자 기여자가 어떤 조건에서 서명자를 만드는지 확인한다. 5. 만들어진 두 제공자를 팩토리에서 꺼내는 코드를 검색한다. ## 본문 R0 경계가 문서에만 있고 compile 경로에서 닫히지 않는다. ## 문서에만 있는 R0 경계 :::evidence key="analysis-finding-a09-f004" alt="분석 문서 final/document.md#a09 에서 이 기록의 근거 절을 그대로 잘라낸 15줄. 코드베이스를 측정한 것이 아니라 원본 판정이 무엇을 적었는지를 보여 준다." caption="final/document.md#a09 발췌 — 15줄" zoom="true" ::: ## 데이터 위험은 없다 없는 port는 호출될 수 없다. P2. ## 위험 둘 (a) 운영자가 켰다고 믿는 기능이 없다는 것, (b) 아무도 쓰지 않는 서명 자격증명 핸들이 프로세스 수명 동안 살아 있다는 것. ## 수정 방향 셋 coordinator를 조건부로 조립하거나, R0인 동안 `DIRECT_UPLOAD`/`DIRECT_MULTIPART` 요구를 compile 단계에서 provider 종류와 무관하게 거부하거나, capability가 켜져도 presigner를 만들지 않도록 조립을 뒤로 미루는 것. ## 확인하지 못한 것 클라우드 바인딩으로 실제로 띄워 서명자가 살아 있는 것을 확인하지 않았다. 조립 조건상 그 결과가 나온다.