Files
sodalive-android/docs/20260328_멤버정보응답하위호환수정.md

3.3 KiB

20260328_멤버정보응답하위호환수정.md

개요

  • 이전 서버의 /member/info 응답에 countryCode, isAdultContentVisible, contentType가 없어도 신규 앱이 동일하게 동작하도록 하위 호환을 보장한다.

요구사항 해석(확정)

  • GetMemberInfoResponse의 신규 필드 3개는 구서버 응답에서 누락될 수 있으므로 nullable로 처리한다.
  • MainViewModel.getMemberInfo() 동기화 시 누락된 값은 로컬 저장값(없으면 안전 기본값)으로 대체한다.

완료 기준 (Acceptance Criteria)

  • AC1: 구서버 응답(JSON에 신규 3개 필드 누락) 역직렬화가 실패하지 않는다.
  • AC2: 구서버 응답 수신 시 SharedPreferenceManager.countryCode/isAdultContentVisible/contentPreference가 null로 오염되지 않고 기존 동작을 유지한다.
  • AC3: 관련 단위 테스트와 디버그 빌드가 성공한다.

구현 체크리스트

  • app/src/main/java/kr/co/vividnext/sodalive/settings/notification/GetMemberInfoResponse.kt
    • 신규 필드(countryCode, isAdultContentVisible, contentType)를 nullable + default null로 변경
  • app/src/main/java/kr/co/vividnext/sodalive/main/MainViewModel.kt
    • 멤버 정보 동기화 시 신규 필드 null-safe fallback 적용
  • app/src/test/java/kr/co/vividnext/sodalive/settings/notification/GetMemberInfoResponseCompatibilityTest.kt
    • 구서버 응답 누락 필드 역직렬화 및 fallback 동작 검증 테스트 추가
  • 검증 실행
    • lsp_diagnostics(수정 파일)
    • ./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.settings.notification.GetMemberInfoResponseCompatibilityTest"
    • ./gradlew :app:testDebugUnitTest
    • ./gradlew :app:assembleDebug

검증 기록

  • 기록 템플릿(후속 누적):

    • YYYY-MM-DD
      • 무엇/왜/어떻게:
      • 실행 명령/도구:
        • 명령 또는 사용 도구
      • 결과:
  • 2026-03-28

    • 무엇/왜/어떻게: 구서버(/member/info)에서 신규 필드 3종이 누락돼도 신규 앱이 동일 동작하도록 응답 모델 nullable 처리 + 멤버 정보 동기화 fallback 로직을 적용했고, 역직렬화 호환 테스트를 추가했다.
    • 실행 명령/도구:
      • apply_patch(GetMemberInfoResponse.kt, MainViewModel.kt, GetMemberInfoResponseCompatibilityTest.kt, docs/20260328_멤버정보응답하위호환수정.md)
      • lsp_diagnostics(GetMemberInfoResponse.kt, MainViewModel.kt, GetMemberInfoResponseCompatibilityTest.kt)
      • ./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.settings.notification.GetMemberInfoResponseCompatibilityTest"
      • ./gradlew :app:testDebugUnitTest
      • ./gradlew :app:assembleDebug
      • ./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.settings.notification.GetMemberInfoResponseCompatibilityTest" :app:assembleDebug
      • read(app/build/test-results/testDebugUnitTest/TEST-kr.co.vividnext.sodalive.settings.notification.GetMemberInfoResponseCompatibilityTest.xml)
    • 결과:
      • lsp_diagnostics.kt LSP 서버 미구성으로 실행 불가를 확인했다.
      • 호환성 테스트 2건(구서버 누락 필드 역직렬화/신규 필드 정상 매핑)이 모두 통과했다.
      • 전체 단위 테스트와 디버그 빌드가 모두 성공했고, 마지막 재검증 명령에서도 성공을 재확인했다.