Files

5.1 KiB

Phase 5 리뷰 보고서

1. 리뷰 정보

항목 내용
리뷰 대상 Phase 5 / Task 5.1~5.4
기준 commit 또는 working tree 구현 commit 391acf9e, 7d0cf0a8, 현재 5123494e 기준 working tree
리뷰 일자 2026-07-31
리뷰어 Codex
기준 문서 PRD Feature E·F, plan-task.md Phase 5
리뷰 상태 보완 완료

2. 리뷰 목적과 범위

  • 대상일 조회, section lock, lock 내부 double-check, single-flight, timeout·실패 격리, refresh 후 재조회 흐름을 확인한다.
  • 구현된 동시성 계약의 직접 회귀 테스트가 존재하는지 확인한다.

3. 판정 기준

  • 구현에는 해당 경로가 존재하지만 직접 테스트가 없는 경우 완료 증거 누락인 Low로 판정한다.

4. 검토한 근거

  • 코드: RecommendationSnapshotFallbackService.kt, HomeRecommendationQueryService.kt
  • 테스트: RecommendationSnapshotFallbackServiceTest, HomeRecommendationQueryServiceTest
  • 정적 검색: single|동시|refreshFutures|double-check와 latch 기반 테스트
  • 사용자 지시에 따라 Gradle compile/test는 실행하지 않았다.

5. 발견 사항 요약

ID 심각도 상태 제목 소유 Task 후속 goal
REV-P5-001 Low 보완 완료 동일 섹션 single-flight와 lock 내부 double-check의 직접 회귀 테스트가 없다 Task R5.1 P5-R1

6. 발견 사항 상세

REV-P5-001 — single-flight와 double-check의 직접 회귀 테스트가 없다

  • 심각도: Low
  • 상태: 확정
  • 관련 요구사항: Feature E, Task 5.1·5.3
  • 소유 Task: Task R5.1

관찰 내용

구현은 section별 refreshFutures와 lock 획득 후 hasSnapshot(...) 재확인을 수행한다. 현재 테스트는 lock miss, refresh 실패, timeout 후 worker 지속, marker 선존재, AI 작업 중 CHEER 독립 실행을 검증하지만 다음 경쟁 조건을 직접 재현하지 않는다.

  • 동일 섹션의 동시 요청이 실제 refresh 1회만 공유하는지
  • 최초 조회 뒤 lock 진입 전에 다른 실행 주체가 row/marker를 저장했을 때 refresh를 생략하는지

영향

향후 executor·future·lock 코드 변경에서 중복 refresh 방지의 핵심 경쟁 조건이 깨져도 focused test가 탐지하지 못할 수 있다.

권장 조치

sleep 대신 latch와 결정적 fake를 사용해 두 경쟁 조건을 고정하고, 실패가 확인될 때만 프로덕션 코드를 최소 수정한다.

판정 기록

  • 2026-07-31 — fallback 테스트 전체와 구현의 동시성 분기를 대조해 확정했다.
  • 2026-07-31 — 동일 섹션 동시 요청 single-flight와 lock 내부 double-check를 latch 기반 테스트로 추가했다. 현 구현이 테스트를 만족해 프로덕션 코드는 변경하지 않았고, RecommendationSnapshotFallbackServiceTestBUILD SUCCESSFUL, 관련 git diff --check는 출력 없음으로 보완 완료했다.

7. 확정 항목의 plan·goal 전환

  • plan-task.md Phase 5에 Task R5.1 / P5-R1을 추가했다.

8. 리뷰 종료 판정

판정 항목 결과 근거
리뷰 범위 전체 확인 충족 fallback 코드·테스트 분기 대조 완료
후보 항목 판정 완료 충족 REV-P5-001 확정
확정 항목 plan 반영 충족 Task R5.1
검증 명령과 결과 기록 충족 정적 검색과 기존 기록 참조

최종 결론: 보완 완료

남은 항목: 없음


9. 2차 리뷰 기록 — 2026-07-31

  • 리뷰 대상: Phase 5 / Task 5.1~5.4·Task R5.1, 5123494e 기준 미커밋 working tree.
  • 검토 근거: RecommendationSnapshotFallbackService.kt:81-205, HomeRecommendationQueryService.kt:112-136, RecommendationSnapshotFallbackServiceTest, HomeRecommendationQueryServiceTest.
  • 검증 방법: 대상일 exact snapshot 조회, marker 존재 판정, section lock·double-check·single-flight, 300ms/1,500ms, timeout 후 worker 유지, refresh 실패 격리, 16명 후보 재조회를 코드·테스트와 정적 대조했다. Gradle compile/test는 실행하지 않았다.
  • 발견 사항: 확정 발견 사항 없음.
  • plan·goal 전환: 전환 항목 없음.
  • 최종 결론: 확정 발견 사항 없음.
  • 남은 항목: 없음.

10. 3차 리뷰 기록 — 2026-07-31

  • 리뷰 대상: Phase 5 / Task 5.1~5.4·Task R5.1, 5123494e 기준 미커밋 working tree.
  • 검토 근거: RecommendationSnapshotFallbackService.kt:28-245, HomeRecommendationQueryService.kt:112-136, fallback service와 query service의 대상일·marker·lock miss·timeout·실패·동시성 테스트.
  • 검증 방법: 대상일 exact snapshot, section별 lock key, 300ms lock 대기, 1,500ms 홈 대기, lock 내부 double-check, section별 single-flight, timeout 후 worker 유지, 실패 격리, refresh 후 재조회와 16명 후보 전달을 정적으로 추적했다. Gradle compile/test는 실행하지 않았다.
  • 발견 사항: 확정 발견 사항 없음.
  • plan·goal 전환: 전환 항목 없음.
  • 최종 결론: 확정 발견 사항 없음.
  • 남은 항목: 없음.