Files
sodalive-backend-spring-boot/docs/20260625_메인_홈_팔로잉_탭_API/reviews/phase-3-review.md

7.0 KiB

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에 genderRestrictionisAvailableJoinCreator 조건을 적용했다.
  • 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와 라이브 스케줄에 genderRestrictionisAvailableJoinCreator 조건을 적용하는 현재 코드를 정적으로 재확인했다.
  • 이번 후속 판정에서는 컴파일과 테스트를 재실행하지 않았고, 위 ## 7. 수정 후 검증 기록의 기존 성공 결과를 근거로 삼았다.

최종 결론: P3-R1P3-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 완료 판정을 유지한다.