# 20260327 멤버 콘텐츠 선호 기본값 조정 ## 목적 - `MemberContentPreference` 신규 생성 기본값을 다음 정책으로 고정한다. - 기존 회원 + `member.auth != null` 인 경우: `isAdultContentVisible = true`, `contentType = ContentType.ALL` - 그 외: `isAdultContentVisible = false`, `contentType = ContentType.ALL` ## 구현 체크리스트 - [x] 기본값 시드 로직을 `member.auth` 기준 정책으로 단순화한다. - QA: row 미존재 + 인증/미인증 케이스에서 저장값이 각각 `true/ALL`, `false/ALL`인지 테스트로 확인 - [x] 레거시 조회 파라미터(`isAdultContentVisible`, `contentType`)가 신규 row 기본값에 영향을 주지 않도록 정리한다. - QA: `resolveForQuery` 호출 시 파라미터 전달 여부와 무관하게 정책 기본값으로 생성되는지 확인 - [x] 관련 단위/통합 테스트 기대값을 정책에 맞게 수정한다. - QA: `MemberContentPreferenceServiceTest`, `MemberContentPreferenceIntegrationTest` 통과 - [x] 회귀 검증을 실행한다. - 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 검증으로 정합성을 확인했다.