Files
sodalive-backend-spring-boot/docs/20260327_멤버콘텐츠선호신규생성정책수정.md

3.3 KiB

20260327 멤버 콘텐츠 선호 신규 생성 정책 수정

목적

  • resolveForQuery 레거시 파라미터를 기존 row 갱신 용도로 사용하지 않고, row 미존재 최초 생성 시에만 제한적으로 사용한다.
  • 최종 목표인 "MemberContentPreference 저장값만 조회에 사용" 방향으로 정책을 단순화한다.

최종 정책

  • MemberContentPreference 없음 + member.auth != null
    • 요청 파라미터(isAdultContentVisible, contentType)가 있으면 전달값으로 생성한다.
    • 요청 파라미터가 없으면 isAdultContentVisible = true, contentType = ContentType.ALL로 생성한다.
  • MemberContentPreference 없음 + member.auth == null
    • isAdultContentVisible = false, contentType = ContentType.ALL로 생성한다.
  • MemberContentPreference 있음
    • resolveForQuery로 들어온 요청 파라미터는 무시하고 저장값만 사용한다.

구현 체크리스트

  • MemberContentPreferenceService 생성 경로(initializeDefaultPreference)가 초기값을 정책 기반으로 받을 수 있도록 수정
    • QA: resolveForQuery 호출 시 row 유/무에 따른 생성값이 테스트에서 일치하는지 확인
  • resolveForQuery에서 기존 row에 대한 레거시 파라미터 반영/캐시 무효화 제거
    • QA: 기존 row + 파라미터 입력 시 저장값 불변 및 캐시 미무효화 테스트 통과
  • 관련 단위/통합 테스트 갱신
    • QA: MemberContentPreferenceServiceTest, MemberContentPreferenceIntegrationTest 통과
  • 회귀 검증 실행
    • QA: ./gradlew test, ./gradlew ktlintCheck, ./gradlew build 성공

구현 완료 후 기록

1차 구현

  • 무엇을:
    • MemberContentPreferenceServicePreferenceSeed를 도입해 row 미존재 시 초기 생성값을 호출 목적에 맞게 주입하도록 변경했다.
    • resolveForQuery는 더 이상 기존 row를 요청 파라미터로 갱신하지 않고, 저장값 조회 전용으로 동작하도록 수정했다.
    • row 미존재 시 seed 정책을 다음과 같이 반영했다.
      • member.auth != null + legacy 파라미터 존재: 전달값 기반 생성
      • member.auth != null + legacy 파라미터 미존재: true/ALL 생성
      • member.auth == null: 파라미터와 무관하게 false/ALL 생성
    • MemberContentPreferenceServiceTest, MemberContentPreferenceIntegrationTest를 정책에 맞게 갱신/추가했다.
  • 왜:
    • 기존 row를 조회 API 파라미터로 계속 갱신하면 "저장값 단일 기준" 목표와 충돌하므로, 레거시 파라미터 역할을 row 최초 생성 시점으로 한정하기 위해서다.
    • 기존 회원 중 row 미존재 사용자의 초기 생성 경로를 명시적으로 제어해 운영 일관성을 확보하기 위해서다.
  • 어떻게:
    • 명령:
      • ./gradlew test --tests "kr.co.vividnext.sodalive.member.contentpreference.MemberContentPreferenceServiceTest" --tests "kr.co.vividnext.sodalive.member.contentpreference.MemberContentPreferenceIntegrationTest"
      • ./gradlew test && ./gradlew ktlintCheck && ./gradlew build
    • 결과:
      • 정책 관련 단위/통합 테스트 통과.
      • 전체 회귀 검증(test, ktlintCheck, build) 통과.
      • .kt 대상 LSP 서버가 현재 환경에 없어 Kotlin LSP 진단은 수행 불가였고, 대신 Gradle 검증으로 대체했다.