Files
sodalive-backend-spring-boot/docs/20260327_멤버콘텐츠선호기본값조정.md

7.0 KiB

20260327 멤버 콘텐츠 선호 기본값 조정

목적

  • MemberContentPreference 신규 생성 기본값을 다음 정책으로 고정한다.
    • 기존 회원 + member.auth != null 인 경우: isAdultContentVisible = true, contentType = ContentType.ALL
    • 그 외: isAdultContentVisible = false, contentType = ContentType.ALL

구현 체크리스트

  • 기본값 시드 로직을 member.auth 기준 정책으로 단순화한다.
    • QA: row 미존재 + 인증/미인증 케이스에서 저장값이 각각 true/ALL, false/ALL인지 테스트로 확인
  • 레거시 조회 파라미터(isAdultContentVisible, contentType)가 신규 row 기본값에 영향을 주지 않도록 정리한다.
    • QA: resolveForQuery 호출 시 파라미터 전달 여부와 무관하게 정책 기본값으로 생성되는지 확인
  • 관련 단위/통합 테스트 기대값을 정책에 맞게 수정한다.
    • QA: MemberContentPreferenceServiceTest, MemberContentPreferenceIntegrationTest 통과
  • 회귀 검증을 실행한다.
    • QA: ./gradlew test --tests "kr.co.vividnext.sodalive.member.contentpreference.MemberContentPreferenceServiceTest" --tests "kr.co.vividnext.sodalive.member.contentpreference.MemberContentPreferenceIntegrationTest", ./gradlew build 성공

구현 완료 후 기록

1차 구현

  • 무엇을:
    • MemberContentPreferenceService.initializeDefaultPreference의 기본 seed를 member.auth != null 기준으로 변경해 인증 회원은 true/ALL, 그 외는 false/ALL로 생성되도록 수정했다.
    • resolveForQuery의 신규 row 생성 seed 계산에서 legacy 파라미터를 제거하고 member.auth 기반 고정 정책(true/ALL 또는 false/ALL)만 사용하도록 정리했다.
    • MemberContentPreferenceServiceTest, MemberContentPreferenceIntegrationTest의 관련 시나리오를 정책에 맞게 수정했다.
  • 왜:
    • 요청사항이 “기존 회원가입 + member.auth != null이면 true/ALL, 그 외는 false/ALL”로 명확하여, 신규 row 기본값이 요청 파라미터에 영향을 받지 않도록 일관된 기준으로 통일해야 했기 때문이다.
  • 어떻게:
    • 명령:
      • ./gradlew test --tests "kr.co.vividnext.sodalive.member.contentpreference.MemberContentPreferenceServiceTest.shouldSeedPreferenceToTrueAndAllWhenRowMissingAndAuthenticatedRegardlessOfLegacyParams"
      • ./gradlew test --tests "kr.co.vividnext.sodalive.member.contentpreference.MemberContentPreferenceServiceTest" --tests "kr.co.vividnext.sodalive.member.contentpreference.MemberContentPreferenceIntegrationTest"
      • ./gradlew build
    • 결과:
      • 정책 핵심 시나리오 단일 테스트 통과.
      • 대상 단위/통합 테스트 통과.
      • 전체 build(테스트/ktlint 포함) 통과.
      • .kt 확장자용 LSP 서버가 현재 환경에 없어 lsp_diagnostics는 실행 불가였고, 대신 Gradle 검증으로 정합성을 확인했다.

연계 작업(동일 기능)

2차 구현 - resolveForQuery 조회 파라미터 제거

  • 무엇을:
    • MemberContentPreferenceService.resolveForQuery 시그니처에서 미사용 파라미터 2개 (isAdultContentVisible, contentType)를 제거하고 member 단일 파라미터로 정리했다.
    • 시그니처 변경에 맞춰 서비스/컨트롤러/테스트의 resolveForQuery 호출부 인자 전달 코드를 일괄 정리했다.
  • 왜:
    • 실제로 사용되지 않는 파라미터를 제거해 함수 계약을 단순화하고, 호출부 가독성과 유지보수성을 높이기 위해서다.
  • 어떻게:
    • 명령:
      • ./gradlew compileKotlin compileTestKotlin
      • ./gradlew test --tests "kr.co.vividnext.sodalive.member.contentpreference.MemberContentPreferenceServiceTest" --tests "kr.co.vividnext.sodalive.member.contentpreference.MemberContentPreferenceIntegrationTest"
      • ./gradlew build
      • lsp_diagnostics(filePath="src/main/kotlin", extension=".kt")
    • 결과:
      • 시그니처 변경 직후 컴파일 에러로 표시된 호출부를 모두 정리한 뒤 compileKotlin/compileTestKotlin 성공.
      • 관련 단위/통합 테스트 통과.
      • 전체 build(ktlint/test 포함) 성공.
      • 현재 환경에는 Kotlin LSP 서버가 없어 lsp_diagnostics는 실행 불가였고, Gradle 컴파일/테스트/빌드로 정합성을 확인했다.

3차 구현 - 수정 파일 미사용 파라미터 정리

  • 무엇을:
    • resolveForQuery(member = member)로 단순화된 이후 미사용 상태가 된 resolvePreference 헬퍼 파라미터를 12개 파일에서 제거했다.
    • 헬퍼 호출부를 정리했고, null 회원 분기에서 실제로 파라미터를 사용하는 서비스/컨트롤러 (HomeService, LiveApiService, AudioContentController, AudioContentMainTabHomeController)는 기존 전달 로직을 유지했다.
  • 왜:
    • 사용되지 않는 파라미터는 경고와 혼선을 유발해 유지보수 비용을 높이므로, 실제 사용하는 함수 계약만 남겨 코드 의도를 명확히 하기 위해서다.
  • 어떻게:
    • 명령:
      • ./gradlew compileKotlin
      • ./gradlew test --tests "kr.co.vividnext.sodalive.member.contentpreference.MemberContentPreferenceServiceTest" --tests "kr.co.vividnext.sodalive.member.contentpreference.MemberContentPreferenceIntegrationTest"
      • ./gradlew build
      • lsp_diagnostics(filePath="src/main/kotlin", extension=".kt")
    • 결과:
      • compileKotlin 성공.
      • 관련 단위/통합 테스트 성공.
      • 전체 build(ktlint/test 포함) 성공.
      • 현재 환경에 Kotlin LSP 서버가 없어 lsp_diagnostics는 실행 불가였고, Gradle 컴파일/테스트/빌드 결과로 정합성을 확인했다.

4차 수정 - 잔여 미사용 파라미터 추가 정리

  • 무엇을:
    • 3차 정리 이후에도 남아 있던 수정 파일 내 함수 미사용 파라미터를 추가 제거했다.
    • resolvePreference(member: Member)만 사용하는 컨트롤러들의 @RequestParam("isAdultContentVisible"), @RequestParam("contentType")를 제거하고 import를 정리했다.
    • ExplorerService.getCreatorProfile의 미사용 파라미터 isAdultContentVisible을 제거하고 ExplorerController 호출부를 함께 수정했다.
  • 왜:
    • 실제 로직에서 사용되지 않는 파라미터를 제거해 함수 계약을 단순화하고, 유지보수 시 혼선을 줄이기 위해서다.
  • 어떻게:
    • 명령:
      • ./gradlew compileKotlin compileTestKotlin
      • ./gradlew test --tests "kr.co.vividnext.sodalive.member.contentpreference.MemberContentPreferenceServiceTest" --tests "kr.co.vividnext.sodalive.member.contentpreference.MemberContentPreferenceIntegrationTest"
      • ./gradlew build
      • lsp_diagnostics(filePath="src/main/kotlin", extension=".kt")
    • 결과:
      • compileKotlin, compileTestKotlin 성공.
      • 관련 단위/통합 테스트 성공.
      • 전체 build(ktlint/test 포함) 성공.
      • 현재 환경에 Kotlin LSP 서버가 없어 lsp_diagnostics는 실행 불가였고, Gradle 검증으로 정합성을 확인했다.