---
phase: implementation
agent: implementation-advisor
agent_version: 1
generated_at: 2026-06-29T14:30:00+09:00
session_id: 20260629-142115
---

# 파일 소유권 맵 — 보안 하드닝 b1/b2

| 파일 | 담당 worker | worker id | 변경 유형 | 의존 |
|---|---|---|---|---|
| src/main/java/com/pandoli365/bibimbap/security/SsrfSafeFetcher.java | code-writer | w-h01 | modify | - |
| src/test/java/com/pandoli365/bibimbap/security/SsrfSafeFetcherTest.java | code-writer | w-h01 | modify | SsrfSafeFetcher.java (동일 worker로 묶음) |
| src/main/resources/application.properties | implementation-advisor (직접) | - | modify | - |

## concern 기록

### b1: DNS 캐시 TTL @PostConstruct 런타임 반영 한계
- `sun.net.InetAddressCachePolicy` 는 최초 `InetAddress` 조회 시 Security property를 lazy 하게 읽는다.
- @PostConstruct 가 첫 DNS 조회 전에 실행되면 정상 반영되나, 다른 빈이 먼저 조회했다면 **런타임 반영이 보장되지 않는다**.
- 이것은 **best-effort 하드닝**이다. 결정적 보장이 필요하면 JVM 레벨(`$JAVA_HOME/conf/security/java.security` 의 `networkaddress.cache.ttl=30`)이 정본.
- verification-advisor 는 L3 스모크(실제 앱 기동 후 ttl property 확인)로 반영 여부를 검증해야 한다.

### b1: 테스트 전역상태(Security.setProperty) 복원 미적용 결정
- `Security.setProperty("networkaddress.cache.ttl","30")` 은 JVM 전역 상태를 바꾼다. 동일 클래스의 다른 SSRF 테스트는 `resolve()` 를 stub 으로 주입(`TestableFetcher`)하거나 IP literal 차단을 검증하므로 차단 판정이 IP 기반이다. TTL 값 변경은 차단 결과를 바꾸지 않는다 → @AfterEach 복원 미적용(불필요한 복잡성 회피).
- jakarta vs javax: pom.xml `spring-boot.version=3.5.14-SNAPSHOT` (Jakarta EE 10) 확인 → `@jakarta.annotation.PostConstruct` 정확. javax 교체 불필요.

### env: Java 런타임 부재로 advisor 컴파일 검증 불가
- 현재 셸 환경에 JDK 미설치(`/usr/libexec/java_home` 실패) → advisor 측 `mvnw compile`/LSP 컴파일 점검 불가.
- 변경은 FQN(`java.security.Security`, `@jakarta.annotation.PostConstruct`)만 사용하여 import 무변경, 기존 클래스패스 의존만 사용 → 컴파일 가능성 높음. 실제 컴파일·테스트 게이트는 verification-advisor 영역.

### b2: @Value 기본값 유지 결정
- 기본값 `src/main/resources/static` 은 변경하지 않는다.
- 근거: `GameUploadControllerSecurityTest` 가 `@TempDir + ReflectionTestUtils.setField` 로 경로를 격리하므로 기본값과 무관하지만, 기본값을 홈경로로 바꾸면 IDE 로컬 실행 시 명시 설정 없이 홈 디렉토리에 파일이 생성되는 부작용이 있다. application.properties 명시 설정으로만 오버라이드하는 것이 최소 변경·테스트 안전 기준에 부합한다.

## worker 계획 주석

- w-h01: SsrfSafeFetcher + 단위테스트 — 파일 간 강한 의존(테스트가 소스를 참조) → 동일 worker로 묶어 순차 처리
- application.properties: 1줄 추가, 단순 — advisor 직접 처리(파일 수 1, 예상 줄수 <5)
