96 lines
3.9 KiB
Markdown
96 lines
3.9 KiB
Markdown
# 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)
|