Skip to content

[Fix] 계정 전환 시 이전 계정의 로컬 캐시 삭제 #593 - #594

Merged
edv-Shin merged 1 commit into
devfrom
fix/session-data-cleanup-593
Sep 6, 2026
Merged

[Fix] 계정 전환 시 이전 계정의 로컬 캐시 삭제 #593#594
edv-Shin merged 1 commit into
devfrom
fix/session-data-cleanup-593

Conversation

@edv-Shin

@edv-Shin edv-Shin commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

#️⃣연관된 이슈

Closes #593

📝작업 내용

로그아웃을 거치지 않은 계정 전환에서 이전 계정의 캐시가 기기에 남는 문제를 고쳤습니다. 설계 문서의 목표 6과 설계 규칙 D9, 위험 요소 1이 근거입니다.

ClearSessionUseCase

  • 삭제 순서를 뒤집었습니다. 캐시를 먼저 지우고 회원ID를 나중에 지웁니다. 지금 구현은 clearAllTables()라 순서가 드러나지 않지만, 계정 스코프 삭제(DELETE WHERE memberId = ?)로 좁히는 순간 회원ID가 없어 지울 대상을 특정할 수 없습니다. 타이머와 운동 기록 쓰기가 들어오면 좁혀야 하는 쿼리입니다
  • try/finally로 감쌌습니다. 캐시 삭제가 실패해도 워커 취소와 세션 정리는 실행됩니다. 호출부 두 곳(SettingFragment.performLogout, MainViewModel.transitionToLogin)이 runCatching으로 감싸 예외를 삼키기 때문에, 순서만 바꾸고 예외를 방치하면 로그아웃을 눌렀는데 세션이 남아 다음 진입에서 자동 로그인되는 상태가 생깁니다

AuthRepositoryImpl.checkIsRegistered()

  • 회원ID 저장을 mapper 밖으로 옮겼습니다. apiCallBuildermapper가 suspend가 아니라 그 안에서는 캐시 삭제를 호출할 수 없습니다. mapper는 가입 확인된 경우의 memberId만 반환하고, 저장과 정리는 replaceMemberId()ioDispatcher 위에서 처리합니다
  • replaceMemberId()는 이전 회원ID와 다르면 캐시를 지운 뒤 저장합니다. 같은 계정 재로그인은 캐시를 유지합니다. 앱 진입마다 호출되지만 값이 같으면 아무 일도 하지 않습니다
  • 조건을 previous != memberId 하나로 뒀습니다. 이전 값이 null인 경우도 포함되는데, 로그아웃 도중 캐시 삭제만 실패해 행이 남은 상태를 흡수하려는 것입니다
  • errorCode 분기는 그대로입니다. AUTHENTICATION_FAILEDUnregistered, 나머지는 Indeterminate입니다. 이 계약의 테스트는 #590에서 다룹니다

테스트

  • ClearSessionUseCaseTest에 두 개 추가. coVerifyOrder로 캐시 삭제가 세션 정리보다 먼저인지, 캐시 삭제가 실패해도 예약 취소와 세션 정리가 실행되는지 검증합니다
  • AuthRepositoryImplTest 신설. 다른 계정이면 삭제, 같은 계정이면 유지, 이전 값이 없으면 삭제, 미가입이면 저장도 삭제도 하지 않음 네 가지입니다

이슈에 적힌 항목 중 다음은 이 PR 범위가 아닙니다.

  • 앱 전용 이미지 파일 정리. 파일 보관 규약이 아직 없어 운동 기록 이미지 로컬 보관 이슈에서 같은 경로에 붙입니다
  • 예약 작업 전체 취소. 현재 예약 작업은 FCM 토큰 워커뿐이고 이미 취소됩니다. TimerSyncWorkerExerciseSyncWorker가 생길 때 같은 자리에 추가합니다
  • 회원 탈퇴 경로. 외부 웹 폼을 여는 구조여서 로컬 정리를 걸 시점이 없습니다

검증은 ktlintCheck, :domain:test(ClearSessionUseCaseTest 5건), :data:testDebugUnitTest(AuthRepositoryImplTest 4건), :app:assembleDebug 통과입니다. 계정 A에서 계정 B로 바꿔 넣는 수동 확인은 아직 하지 않았습니다.

스크린샷 (선택)

UI 변경이 없습니다.

💬리뷰 요구사항(선택)

두 가지 판단을 봐주세요.

첫째, 계정 전환 감지를 AuthRepositoryImpl에 둔 위치입니다. 회원ID 저장이 이 함수 안에서 일어나고 RegistrationStatusmemberId가 없어서, UseCase 계층으로 올리려면 반환 타입을 바꿔야 합니다. 그래서 Repository 안에 뒀습니다. 진입 시점에 저장된 회원ID와 토큰의 사용자 식별자를 비교하는 방식도 가능한데, 그건 매 진입에 검사가 붙습니다.

둘째, 이전 회원ID가 null일 때도 캐시를 지우는 선택입니다. 로그아웃이 정상 완료됐다면 캐시가 이미 비어 있어 무해하지만, 로그아웃 후 같은 계정으로 다시 들어오는 흐름에서 캐시가 남아 있었다면 그것도 지웁니다. 안전을 택했는데 캐시 보존을 우선한다면 조건을 previous != null && previous != memberId로 좁히면 됩니다.

@edv-Shin edv-Shin self-assigned this Sep 5, 2026
@edv-Shin edv-Shin changed the title [Fix] 계정 전환 시 이전 계정의 로컬 캐시 삭제 [Fix] 계정 전환 시 이전 계정의 로컬 캐시 삭제 #593 Sep 5, 2026
@edv-Shin
edv-Shin merged commit e7dcea9 into dev Sep 6, 2026
1 check passed
@edv-Shin
edv-Shin deleted the fix/session-data-cleanup-593 branch September 6, 2026 18:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Fix] 계정 전환 시 이전 계정의 로컬 캐시가 남는 문제

1 participant