41 lines
4.4 KiB
Markdown
41 lines
4.4 KiB
Markdown
/atp:task B2(dead code 제거) · B4(의존성/세션/운영 하드닝) · FE(프론트엔드 디자인 검토·수정) 3트랙을 진행한다. B2와 B4는 독립 파일이므로 병렬 처리하고, FE는 frontend-design 스킬 + claude-in-chrome 으로 실 화면을 검토한 뒤 수정한다.
|
|
|
|
## 공통 컨텍스트
|
|
- bibimbap: Java 21 / Spring Boot / JSP / MyBatis WAR. 화면은 `/WEB-INF/views/*.jsp`.
|
|
- dev 앱이 docker compose 로 구동 중(localhost:8080, db 5433). 코드·JSP 변경 후에는 `docker compose up -d --build app` 재배포가 필요하다(가이드: docs/development/local-dev-setup.md).
|
|
- 기준 문서: `docs/security/security-remediation-checklist.md` (B2=§B2, B4=§B4), `docs/analysis/2026-06-16-project-analysis.md`.
|
|
- 프로파일: dev + live. `spring.profiles.active=@app.profile@` (Maven 필터). `src/main/resources/{dev,live}/`.
|
|
|
|
## 트랙 1 — B2 프로토타입 dead code 제거 (독립)
|
|
1. `rg "abstracts|GameCatalog|header.jspf"` 로 실제 참조를 재확인한다.
|
|
2. `src/main/java/com/pandoli365/bibimbap/abstracts/` 패키지를 삭제(컴파일 무파손 확인).
|
|
3. `src/main/webapp/WEB-INF/jsp/fragments/header.jspf` 삭제 — 모든 JSP include 가 `/WEB-INF/views/header.jsp` 인지 먼저 확인.
|
|
4. `GameCatalog` 및 `GameController` 의 GameCatalog fallback(라인 ~111,116) 제거.
|
|
5. **없는 게임 ID 접근 동작 = HTTP 404** (결정 확정). redirect 아님.
|
|
6. 제거된 프로토타입 흐름을 최신 구조로 문서 갱신.
|
|
- 검증: `mvn test` 회귀 0. 완료 조건은 체크리스트 §B2 "완료 조건" 충족.
|
|
|
|
## 트랙 2 — B4 의존성/세션/운영 하드닝 (독립)
|
|
1. **Spring Boot**: `pom.xml` `spring-boot.version` `3.5.14-SNAPSHOT` → 최신 stable 3.5.x release 로 고정(정확 버전은 research 로 확정 — Maven Central 기준 최신 패치).
|
|
2. **snapshot repo 제거**: `pom.xml` `<repositories>`/`<pluginRepositories>` 의 spring-snapshots(라인 ~211-229) 삭제. SNAPSHOT 제거 후 불필요.
|
|
3. **세션 쿠키 하드닝**:
|
|
- base `application.properties`: `server.servlet.session.cookie.http-only=true`, `server.servlet.session.cookie.same-site=lax`.
|
|
- live 전용(`application-live.properties` 신규): `server.servlet.session.cookie.secure=true`.
|
|
4. **MyBatis TRACE 로그 격하**: 현재 base `logging.level.org.apache.ibatis=TRACE` → base 는 `WARN`, dev 전용(`application-dev.properties`)에서만 TRACE 유지. 민감 파라미터 노출 점검.
|
|
5. **CVE 스캔 도구 = OWASP Dependency-Check** (결정 확정. 오프라인·외부서비스 무의존). maven plugin 추가 + 스캔 결과·예외 기준을 `docs/security/` 에 기록.
|
|
6. **multipart 1GB = 유지** (사용자 결정). 변경하지 않되 DoS·디스크 고갈 리스크를 `docs/security/` 에 명시.
|
|
- 검증: `mvn test` 통과 + snapshot repo 없이 빌드 재현 가능. 완료 조건은 체크리스트 §B4 "완료 조건" 충족(단 multipart 항목은 "유지+리스크 문서화"로 종결).
|
|
|
|
## 트랙 3 — 프론트엔드 디자인 검토·수정 (frontend-design 스킬 + 브라우저)
|
|
- frontend-design 스킬을 로드하고, claude-in-chrome 으로 구동 중인 localhost:8080 의 실 화면을 직접 시각 검토한다(코드만 읽지 말 것).
|
|
- 대상: 핵심 사용자 동선 우선 — index(메인 허브)·game-detail·login·signup·profile. 이후 확장 가능.
|
|
- 검토 축(전부): ① 디자인 일관성·완성도(타이포·간격·색·컴포넌트, theme-init.jsp 다크/라이트) ② 반응형·모바일(breakpoint·터치타깃·가로스크롤) ③ 접근성 a11y(대비비·ARIA·포커스링·키보드 동선) ④ 시각 리프레시(룩앤필 현대화). 다른 축이 보이면 확장.
|
|
- 산출: (1) 화면별 findings 보고(스크린샷 + 축별 문제·심각도) → 사용자 합의 → (2) JSP 수정 → (3) 브라우저 재확인(L3 스모크).
|
|
- 데스크탑/모바일 뷰포트 모두 캡처.
|
|
|
|
## 실행 순서 / 게이트
|
|
- 트랙1·2 병렬(독립 파일, 충돌 0) → 각자 `mvn test`/빌드 검증.
|
|
- 트랙3 은 frontend-design 스킬 로드 후 브라우저 검토부터. 수정 전 findings 합의 게이트 1회.
|
|
- 세션 종료 전: 코드 변경 트랙 전부 L1(`mvn test`) 통과, JSP 변경은 재배포 후 브라우저 스모크. graph-refresh-checker 호출. git 잔여 커밋(작업 브랜치 표준 승인, push 는 명시 요청 시만).
|
|
- 비파괴 원칙: 삭제 전 참조 재확인, 파일 이동은 mv. 파괴적 조작은 사용자 확인 게이트.
|