# Phase 3 코드 리뷰 보고서 ## 1. 리뷰 정보 | 항목 | 내용 | |---|---| | 리뷰 대상 | Phase 3 / Task 3.1~3.6 | | 기준 commit 또는 working tree | `e6f56f24` + 2026-07-30 working tree | | 리뷰 일자 | 2026-07-30 | | 리뷰어 | Codex | | 기준 문서 | `prd.md` Feature B~F, `plan-task.md` Phase 3 | | 리뷰 상태 | 판정 완료 | ## 2. 목적과 범위 - 팔로잉 크리에이터, On Air, 월간 스케줄, 최근 소식 repository와 query service를 기존 접근 정책까지 포함해 정적으로 대조했다. - `DefaultHomeFollowingQueryRepository.kt`, `HomeFollowingQueryPort.kt`, `HomeFollowingQueryService.kt`와 대응 테스트를 검토했다. - 사용자의 지시에 따라 컴파일과 테스트는 실행하지 않았다. ## 3. 발견 사항 요약 | ID | 심각도 | 상태 | 제목 | 소유 Task | 후속 goal | |---|---|---|---|---|---| | `REV-P3-001` | High | 확정 | On Air와 라이브 스케줄이 기존 라이브 입장 제한을 적용하지 않는다 | Task 3.7 | `P3-R1` | ## 4. 발견 사항 상세 ### REV-P3-001 — On Air와 라이브 스케줄이 기존 라이브 입장 제한을 적용하지 않는다 - **심각도:** High - **상태:** 확정 - **관련 요구사항:** PRD Feature C의 성별·크리에이터 입장 제한, Feature E의 기존 채널 스케줄 정책 재사용 - **소유 Task:** 신규 Task 3.7 / `P3-R1` **관찰 내용** `HomeFollowingQueryService`는 회원 id와 성인 콘텐츠 허용 여부만 port에 전달한다. `DefaultHomeFollowingQueryRepository.findOnAirLives(...)`와 live schedule 조회는 활성/채널/성인/차단 조건만 적용하며 `live_room.gender_restriction`과 크리에이터 회원의 `is_available_join_creator` 조건을 적용하지 않는다. 반면 기존 `LiveRoomQueryRepositoryImpl.getLiveRoomListNow(...)`와 `DefaultCreatorChannelHomeQueryRepository.findCurrentLive/findSchedules(...)`는 effective gender와 크리에이터 입장 제한을 적용한다. **근거** - 코드: `HomeFollowingQueryService.kt:19-30` - 코드: `DefaultHomeFollowingQueryRepository.kt:70-99`, `242-273` - 비교 코드: `LiveRoomRepository.kt:97-115` - 비교 코드: `DefaultCreatorChannelHomeQueryRepository.kt:136-145`, `225-233` - 테스트 공백: `DefaultHomeFollowingQueryRepositoryTest`의 On Air 테스트는 활성/성인/정렬만 검증한다. **정적 재현 절차** 1. 남성 회원이 여성 전용 라이브를 연 팔로잉 크리에이터를 조회한다고 가정한다. 2. 라이브를 `isActive=true`, non-empty `channelName`, 비성인으로 두면 현재 팔로잉 조회 조건을 모두 통과한다. 3. 실제 라이브 입장 정책은 성별 불일치로 입장을 거부하지만 팔로잉 탭 On Air에는 노출된다. 4. 크리에이터 회원이 `isAvailableJoinCreator=false`인 타 크리에이터 라이브를 조회하는 경우도 동일하게 노출된다. **영향** 팔로잉 탭에 터치해도 입장할 수 없는 라이브 또는 스케줄이 노출되어 기존 라이브 접근 정책과 API 결과가 불일치한다. **권장 조치** 회원의 본인인증 성별을 우선한 effective gender와 크리에이터 회원 여부를 query service에서 전달하고, 기존 QueryDSL 조건을 On Air와 live schedule에 최소 적용한다. 성별 불일치와 크리에이터 입장 불가 회귀 테스트를 먼저 추가한다. **판정 기록** - 2026-07-30 — PRD와 기존 라이브 조회 구현을 대조해 확정했다. 런타임 테스트는 사용자 지시에 따라 실행하지 않았다. ## 5. plan·goal 전환 - `plan-task.md` Phase 3에 Task 3.7, `P3-R1`, `P3-R-GATE`를 추가했다. - 기존 Task 3.1~3.6의 완료 체크와 검증 기록은 유지했다. ## 6. 리뷰 종료 판정 | 판정 항목 | 결과 | 근거 | |---|---|---| | 리뷰 범위 전체 확인 | 충족 | Phase 3 repository/service/test 정적 대조 | | 후보 항목 판정 완료 | 충족 | `REV-P3-001` 확정 | | 확정 항목 plan 반영 | 충족 | Task 3.7 / `P3-R1` | | 검증 명령과 결과 기록 | 충족 | 테스트 미실행 사유 기록 | **최종 결론:** 수정 goal 필요. **남은 항목:** `P3-R1` 구현 후 `P3-R-GATE`와 이 문서의 수정 후 검증 기록을 수행한다. ## 7. 수정 후 검증 기록 - 2026-07-30 — RED 확인: `./gradlew --no-daemon test --tests "kr.co.vividnext.sodalive.v2.home.following.application.HomeFollowingQueryServiceTest" --tests "kr.co.vividnext.sodalive.v2.home.following.adapter.out.persistence.DefaultHomeFollowingQueryRepositoryTest"` 실행 결과 effective gender·creator 여부 port 인자 미반영 컴파일 오류로 `BUILD FAILED`. - 2026-07-30 — `HomeFollowingQueryService`에서 본인인증 성별 우선 effective gender와 크리에이터 회원 여부를 `HomeFollowingQueryPort`에 전달하고, On Air와 라이브 스케줄 QueryDSL에 `genderRestriction` 및 `isAvailableJoinCreator` 조건을 적용했다. - 2026-07-30 — GREEN 확인: 같은 focused test 명령 재실행 결과 `BUILD SUCCESSFUL`. - 2026-07-30 — Gate 확인: `./gradlew --no-daemon test --tests "kr.co.vividnext.sodalive.v2.api.home.following.adapter.in.web.HomeFollowingEndToEndTest"`와 `./gradlew --no-daemon ktlintCheck` 재실행 결과 모두 `BUILD SUCCESSFUL`. - 2026-07-30 — 리뷰 게이트: Oracle reviewer가 Critical/Important blocker 없음으로 승인했다. ## 8. 후속 종료 판정 — 2026-07-30 - `HomeFollowingQueryService`가 본인인증 성별 우선 effective gender와 크리에이터 여부를 On Air·스케줄 조회에 전달하는 현재 코드를 정적으로 재확인했다. - `DefaultHomeFollowingQueryRepository`가 On Air와 라이브 스케줄에 `genderRestriction` 및 `isAvailableJoinCreator` 조건을 적용하는 현재 코드를 정적으로 재확인했다. - 이번 후속 판정에서는 컴파일과 테스트를 재실행하지 않았고, 위 `## 7. 수정 후 검증 기록`의 기존 성공 결과를 근거로 삼았다. **최종 결론:** `P3-R1` 및 `P3-R-GATE` 수정 검증 완료. **남은 항목:** 없음. ## 9. 3차 정적 리뷰 — 2026-07-30 - 팔로잉 크리에이터, On Air, 월간 스케줄, 최근 소식 조회 조건과 `P3-R1`의 성별·크리에이터 입장 제한 반영을 현재 working tree에서 다시 추적했다. - 컴파일과 테스트는 사용자 지시에 따라 실행하지 않았다. - 신규 확정 발견 사항 없음. 기존 Phase 3 완료 판정을 유지한다. ## 10. 4차 정적 리뷰 — 2026-07-30 - 팔로잉 크리에이터·On Air·월간 스케줄·최근 소식의 활성/role/차단/성인/시간 범위/정렬/limit 조건을 PRD와 다시 대조했다. - `P3-R1`의 effective gender와 크리에이터 입장 제한이 service→port→On Air·라이브 스케줄 query에 동일하게 전달되는지 확인했다. - repository/service 테스트가 KST 월간 경계, 동률 정렬, 원천 target 활성 상태와 라이브 접근 제한을 고정하는지 정적으로 확인했다. - 컴파일과 테스트는 사용자 지시에 따라 실행하지 않았다. - 신규 확정 발견 사항 없음. 기존 Phase 3 완료 판정을 유지한다.