Files
sodalive-backend-spring-boot/docs/20260328_라이브진행중목록19금노출정책수정.md

6.1 KiB

라이브 진행중 목록 19금 노출 정책 수정

완료 기준 (Pass/Fail)

  • LiveRoomStatus.NOW 조회 시 사용자 성인 설정과 무관하게 19금 라이브 방이 포함된다.
  • 예약 조회(getLiveRoomListReservationWithDate, getLiveRoomListReservationWithoutDate)의 성인 설정 필터 동작은 기존과 동일하다.
  • 기존 코드 패턴을 유지하며 최소 범위로 변경된다.
  • 변경 파일 LSP 진단 에러가 0건이다. (Kotlin LSP 미지원 환경으로 lsp_diagnostics 실행 불가, 테스트/빌드 성공으로 대체 검증)
  • 관련 테스트/빌드 검증 명령이 성공한다.

구현 체크리스트

  • NOW/예약 목록 분기 및 성인 필터 전달 경로를 확인한다.
  • NOW 목록 조회 경로만 정책에 맞게 수정한다. (QA: NOW 경로 호출 인자 검증)
  • 예약 목록 조회 경로가 기존 로직을 유지하는지 검증한다. (QA: 예약 경로 호출 인자/쿼리 유지 확인)
  • 익명 사용자(member=null) NOW 조회에서 성인 필터 우회 범위가 과도하지 않도록 조건을 보강한다. (2차 가정, 3차에서 정책 정정됨)
  • 정책 정정 반영: NOW 목록은 익명 사용자도 노출 대상이며, 후속 상세/입장 단계에서 인증/성인 검증을 수행하도록 분기와 테스트를 재정렬한다.
  • FORCED_JP_MEMBER_IDS37543L 강제 매핑 회귀 테스트를 추가한다. (QA: 정책/통합 테스트에 ID 37543L 검증 추가)
  • 관련 테스트와 빌드 검증을 수행하고 결과를 문서에 기록한다.

검증 기록

1차 구현

  • 무엇을: LiveRoomService.getRoomList의 NOW 분기에서 isAdult = true를 전달하도록 수정하고, 예약 분기는 기존 isAdult 전달을 유지했다. 또한 NOW/예약 전달 정책을 검증하는 LiveRoomServiceAdultVisibilityPolicyTest를 추가했다.
  • 왜: 진행 중 라이브 목록은 사용자 성인 설정과 무관하게 19금 방을 노출하고, 예약 목록은 기존 정책대로 사용자 설정을 반영해야 하기 때문이다.
  • 어떻게:
    • 전달값 확인: grep으로 NOW/예약 분기의 isAdult 전달값 확인 (isAdult = true / isAdult = isAdult).
    • LSP 진단 시도: lsp_diagnostics for LiveRoomService.kt, LiveRoomServiceAdultVisibilityPolicyTest.kt불가(환경에 Kotlin LSP 서버 미구성)
    • 정책 단위 테스트: ./gradlew test --tests "kr.co.vividnext.sodalive.live.room.LiveRoomServiceAdultVisibilityPolicyTest"성공(BUILD SUCCESSFUL)
    • 관련 선호도 테스트: ./gradlew test --tests "kr.co.vividnext.sodalive.member.contentpreference.MemberContentPreferenceServiceTest" --tests "kr.co.vividnext.sodalive.member.contentpreference.MemberContentPreferencePolicyTest" --tests "kr.co.vividnext.sodalive.member.contentpreference.MemberContentPreferenceIntegrationTest"성공(BUILD SUCCESSFUL)
    • 전체 빌드: ./gradlew build성공(BUILD SUCCESSFUL)

2차 수정 (리뷰 피드백 반영)

  • 무엇을: LiveRoomService.getRoomList의 NOW 분기에서 isAdult 전달값을 member != null || isAdult로 조정해 로그인 사용자에게만 우회가 적용되도록 보강했다. 또한 LiveRoomServiceAdultVisibilityPolicyTest에 비로그인 NOW 조회 회귀 케이스를 추가하고, MemberContentPreferencePolicyTest/MemberContentPreferenceIntegrationTest37543L -> JP 강제 매핑 검증을 추가했다.
  • 왜: 기존 isAdult = true 고정은 익명 사용자까지 성인 진행중 라이브를 노출할 수 있어 정책 범위가 과도해질 수 있으며, 강제 JP ID 추가(37543L)는 테스트로 고정해 회귀를 방지해야 하기 때문이다.
  • 어떻게:
    • LSP 진단 시도: lsp_diagnostics for 변경된 Kotlin 파일 4개 → 불가(환경에 Kotlin LSP 서버 미구성)
    • 정책/회귀 테스트: ./gradlew test --tests "kr.co.vividnext.sodalive.live.room.LiveRoomServiceAdultVisibilityPolicyTest" --tests "kr.co.vividnext.sodalive.member.contentpreference.MemberContentPreferencePolicyTest" --tests "kr.co.vividnext.sodalive.member.contentpreference.MemberContentPreferenceIntegrationTest"성공(BUILD SUCCESSFUL)
    • 전체 빌드(ktlint 포함): ./gradlew build성공(BUILD SUCCESSFUL)

정정

  • 정정 대상: 2차 수정 (리뷰 피드백 반영)의 정책 가정(익명 NOW 노출 제한)
  • 사유: 요구사항 재확인 결과, NOW 목록에서 익명 사용자 노출은 의도된 기능이며 상세/입장 단계에서 인증 및 성인 검증을 수행하는 정책으로 확정되었다.
  • 변경 내용: NOW 분기의 익명 제한 보강(member != null || isAdult)을 제거하고, 익명 포함 우회(isAdult = true)로 복원했다. 관련 회귀 테스트도 익명 우회 기대값으로 정렬했다.

3차 수정 (정책 정정 반영)

  • 무엇을: LiveRoomService.getRoomList NOW 분기의 isAdult 전달값을 isAdult = true로 복원했다. LiveRoomServiceAdultVisibilityPolicyTest의 익명 NOW 케이스를 isAdult = true 기대로 수정하고, 테스트명/DisplayName을 정책 의미에 맞게 변경했다.
  • 왜: NOW 목록은 익명 사용자에게도 노출하되, 실제 터치 후 상세/입장 단계에서 인증 및 성인 검증(live.room.adult_verification_required)을 수행하는 것이 의도된 정책이기 때문이다.
  • 어떻게:
    • 탐색 근거 수집: Explore/Librarian + grep + sg로 NOW 노출 경로, 후속 인증 가드, 테스트 기대값을 재확인했다. (rg는 실행 환경에 미설치로 대체 탐색 수행)
    • LSP 진단 시도: lsp_diagnostics for 변경된 Kotlin 파일들 → 불가(환경에 Kotlin LSP 서버 미구성)
    • 정책/회귀 테스트: ./gradlew test --tests "kr.co.vividnext.sodalive.live.room.LiveRoomServiceAdultVisibilityPolicyTest" --tests "kr.co.vividnext.sodalive.member.contentpreference.MemberContentPreferencePolicyTest" --tests "kr.co.vividnext.sodalive.member.contentpreference.MemberContentPreferenceIntegrationTest"성공(BUILD SUCCESSFUL)
    • 전체 빌드(ktlint 포함): ./gradlew build성공(BUILD SUCCESSFUL)