3.6 KiB
3.6 KiB
최근 공지사항 v2 PRD
문서 정보
| 항목 | 내용 |
|---|---|
| 상태 | 구현·HTTP 15개·패키징·lint 검증 완료, 전체 회귀 시간 초과로 최종 Gate 미완료, 미배포 |
| 작성일 | 2026-10-28 |
| 결정권자 | 요청 사용자 |
| 계약 | api-contract.md |
| 구현 계획 | plan-task.md |
| 클라이언트 전달 | client-prompt.md |
목표와 문제
기존 /notice/latest는 공지 하나 또는 null을 반환한다. 이 계약과 홈 응답을 유지하면서 클라이언트가 최근 활성 공지 최대 3개를 익명으로 조회할 수 있는 별도 API를 제공한다. 최신은 작성 시각이 아니라 기존 공지 정책인 id 내림차순이다.
확정 요구사항과 수용 기준
| ID | 요구사항 | 수용 기준 | 추적 |
|---|---|---|---|
| NOTICE-001 | 익명 GET /api/v2/notices/latest |
HTTP 200, ApiResponse<List<NoticeItem>> |
계약 §1, P1-T1 |
| NOTICE-002 | 활성 공지 중 id 내림차순 최대 3개 | 활성 4개 이상과 더 큰 비활성 id fixture에서 정확한 3개 반환, createdAt 정렬 금지 | 계약 §2, P1-T1 |
| NOTICE-003 | 기존 필드와 날짜 보존 | id/title/content/date 전체 일치, 본문 생략 없음, UTC→Asia/Seoul yyyy-MM-dd 날짜 경계 검증 |
계약 §2, P1-T1 |
| NOTICE-004 | 적은 데이터도 배열 | 0/1/2개 및 전부 비활성 시 각각 0/1/2개와 빈 배열 | 계약 §3, P1-T1 |
| NOTICE-005 | 기존 동작·권한 보존 | v1 객체/null 유지, 익명 POST와 인접 보호 경로는 401 | 계약 §4, P1-T1 |
구현 제약과 제외
- Kotlin 1.6.21, Java 17, Spring Boot 2.7.14 및 기존 의존성을 사용한다.
- 신규 v2 controller와 읽기 전용 service가 기존
ServiceServiceNoticeRepository.getNoticeList(PageRequest.of(0, 3))를 호출한다. 기존NoticeItem과ApiResponse를 재사용한다. - 공개 보안 허용은 정확히 새 GET 한 경로만 추가한다. 공지 본문은 기존 활성 공지의 공개 데이터이며 새 사용자·인증 데이터는 취급하지 않는다.
- v1 공지 함수, 홈 응답, 기존 repository 쿼리, DB 스키마, 공통 JSON·오류 정책과 의존성은 변경하지 않는다.
- UI·캐러셀·자동 fallback·캐시·페이지네이션·신규 DTO·port·범용 facade·배포는 제외한다.
검증과 배포 상태
실제 SecurityConfig, RANDOM_PORT HTTP 서버, TestRestTemplate, 실제 repository, 로컬 H2와 embedded Redis로 통합 검증한다. 새 구현 클래스 참조 없이 HTTP로 먼저 실패를 확인한다. H2는 기존 MySQL 날짜 함수 alias로 쿼리를 실행하며 운영 MySQL 실검증은 별도다.
공지 HTTP 11개와 기존 배포 엔드포인트 HTTP 4개가 통과했고, bootJar와 전체 ktlintCheck가 성공했다. 전체 build --continue는 test 단계에서 20분 제한으로 종료되어 전체 회귀는 미검증이다. 최종 Gate 상태와 독립 리뷰는 구현 계획에 기록한다. 구현·로컬 검증은 배포 완료를 뜻하지 않으며 클라이언트는 배포 확인 전 명시적 mock을 사용한다.
Decision Log
| 날짜 | ID | 결정 | 근거 |
|---|---|---|---|
| 2026-10-28 | NOTICE-D1 | 기존 목록 쿼리를 page 0/size 3으로 호출 | 기존 쿼리에 활성 필터·id 역순·offset/limit·날짜 projection이 존재 |
| 2026-10-28 | NOTICE-D2 | 기존 v1과 홈은 전혀 수정하지 않음 | 사용자 승인 범위 및 객체/null 호환성 |
| 2026-10-28 | NOTICE-D3 | 전체 Gate는 부모 실행자가 수행 | 명시적 작업 분담, 이 작업은 focused HTTP 검증까지만 수행 |