# 2026-06-29 B2·B4·FE 하드닝

**세션**: sid 20260629-175705 (resumed from 20260629-174807)
**브랜치**: feat/v2
**최종 테스트**: `mvn test` 361 PASS

## 요약

3트랙 병렬 작업: B2 프로토타입 dead code 제거, B4 의존성/세션/운영 하드닝, FE 프론트엔드 디자인 개선.

---

## B2. 프로토타입 dead code 제거

### 삭제된 파일

| 파일 | 이유 |
| --- | --- |
| `src/main/java/com/pandoli365/bibimbap/abstracts/Service.java` | 참조 0, 세션키 `"id"` 불일치(활성코드는 `"userId"`) — 인증 우회 함정 |
| `src/main/java/com/pandoli365/bibimbap/abstracts/Request.java` | 참조 0, dead |
| `src/main/java/com/pandoli365/bibimbap/abstracts/Result.java` | 참조 0, dead |
| `src/main/java/com/pandoli365/bibimbap/abstracts/ErrorResult.java` | 참조 0, dead |
| `src/main/webapp/WEB-INF/jsp/fragments/header.jspf` | include 참조 0, Spring Security 의존성 없는 환경에서의 orphan |
| `src/main/java/com/pandoli365/bibimbap/game/GameCatalog.java` | 빈 배열 stub, 영구 도달불가 분기 |

### 동작 변경

- **없는 게임 ID 접근**: 기존 `GameCatalog` fallback(redirect:/ 또는 정적뷰) → **HTTP 404** (`ResponseStatusException(NOT_FOUND)`). 사용자 확정(D-B2-404).
- `ApiExceptionControllerAdvice` 에 `ResponseStatusException` 핸들러 추가 — 기존 `Exception` catch-all 이 404를 500으로 덮던 결함 수정.

### 테스트

- `GameLikeControllerTest.gameDetailThrowsNotFoundWhenGameMissing` 회귀 가드 추가.
- 런타임 스모크: `GET /game/99999` = 404, `GET /game/3` = 200.

---

## B4. 의존성/세션/운영 하드닝

### pom.xml

| 변경 | 이전 | 이후 |
| --- | --- | --- |
| Spring Boot 버전 | `3.5.14-SNAPSHOT` | `3.5.16` (GA) |
| spring-snapshots repository | 있음 | **제거** |
| spring-snapshots pluginRepository | 있음 | **제거** |
| OWASP Dependency-Check plugin | 없음 | `12.2.2` 추가(빌드 비bind, 수동 실행) |

### application.properties (공통 base)

| 변경 | 이전 | 이후 |
| --- | --- | --- |
| ibatis/mybatis 로그 | `TRACE` | `WARN` |
| 세션 쿠키 HttpOnly | 미설정 | `true` |
| 세션 쿠키 SameSite | 미설정 | `lax` |

### 신규 파일

- `src/main/resources/application-dev.properties` — ibatis `TRACE` 로그 복원(로컬 개발 전용).
- `src/main/resources/application-live.properties` — `server.servlet.session.cookie.secure=true` (운영 전용).

### 런타임 확인

`Set-Cookie: JSESSIONID=...; Path=/; HttpOnly; SameSite=Lax` 확인.

### 결정 기록

- D-B4-cfgloc: 설정 위치 = Spring 표준 `application-{profile}.properties`. 기존 `db.properties`(DB 전용) 공존.
- D-B4-multipart: 1GB 유지, 리스크 문서화 → [security/multipart-size-risk.md](../security/multipart-size-risk.md).
- D-B4-cve: OWASP Dependency-Check 오프라인 비bind → [security/owasp-dependency-check-guide.md](../security/owasp-dependency-check-guide.md).

---

## FE. 프론트엔드 디자인 개선

### 변경 내용

| 항목 | 변경 |
| --- | --- |
| F1 — index 검색 위계 | `.advanced-search` 를 `<details>` 접이식으로 래핑. prefill(쿼리 파라미터) 시 `open` 속성 자동 부여 |
| F2 — 다크모드 input 대비 | 입력 테두리 `border-color: rgba(255,255,255,0.26)` 강화. 적용 뷰: login·signup·index·game-detail |
| F5 — 터치타깃 | 체크박스 font-size `1.15rem`. 적용 뷰: login·signup |

### 확인

브라우저 스모크: 다크모드 토글 후 input 대비 개선, 검색 접이식 동작, 터치타깃 확대 확인.

---

## 참조

- 보안 체크리스트: [security/security-remediation-checklist.md](../security/security-remediation-checklist.md)
- OWASP DC 가이드: [security/owasp-dependency-check-guide.md](../security/owasp-dependency-check-guide.md)
- Multipart 리스크: [security/multipart-size-risk.md](../security/multipart-size-risk.md)
- Local dev 함정: [development/local-dev-setup.md](../development/local-dev-setup.md)
