Skip to content

[Fix] 강제 로그아웃 시 전송 대기 행 보존 #602 - #603

Open
edv-Shin wants to merge 1 commit into
devfrom
fix/session-preserve-pending-602
Open

[Fix] 강제 로그아웃 시 전송 대기 행 보존 #602#603
edv-Shin wants to merge 1 commit into
devfrom
fix/session-preserve-pending-602

Conversation

@edv-Shin

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

Copy link
Copy Markdown
Contributor

#️⃣연관된 이슈

Closes #602

📝작업 내용

강제 로그아웃이 서버로 올리지 못한 전송 대기 행을 함께 지우고 있었습니다. 정리 범위를 이탈 이유가 정하도록 바꿨습니다.

SessionExitReason을 추가하고 ClearSessionUseCase(reason)로 받습니다. 호출부는 무엇을 지울지 고르지 않고 무슨 일이 있었는지만 알립니다.

이유 캐시 회원ID 토큰 예약 작업
USER_INITIATED 로그아웃, 탈퇴 삭제 삭제 삭제 취소
FORCED 토큰 만료, 갱신 실패, 진입 실패 보존 보존 삭제 취소
  • MainViewModel.transitionToLogin()FORCED입니다. 트리거 6개(진입 플로우 예외, !isAuthorized, memberId 유실, invalid_grant, NoRefreshToken, forceLogoutFlow)가 전부 사용자가 의도하지 않은 경로입니다
  • SettingViewModel.clearLocalSession()USER_INITIATED입니다
  • AuthRepositoryclearTokens()를 추가했습니다. clearSession()은 토큰과 회원ID를 모두 지웁니다
  • 예약 작업은 이유와 무관하게 취소합니다. 세션이 없으면 전송할 수 없습니다. 남긴 대기 행의 재예약은 #588에서 연결합니다
  • AGENTS.md §5.9에 이탈 이유별 범위와 회원ID를 남기는 이유를 적었습니다

💬리뷰 요구사항(선택)

이슈 본문에는 SessionDataCleaner에 "동기화 완료 행만 지우는 연산"을 추가한다고 적었는데 구현에서 빼고 캐시를 아예 건드리지 않는 쪽으로 갔습니다. 동기화 완료 행은 memberId 스코프가 걸려 있고 다른 계정이 로그인하면 계정 전환 감지가 전부 지우므로 남겨도 무해합니다. 테이블별 삭제 쿼리를 만들 이유가 없었습니다.

핵심은 회원ID를 남기는 쪽이었습니다. AuthRepositoryImpl.replaceMemberIdspManager.getMemberId() != memberId로 계정 전환을 판정하는데, 강제 로그아웃에서 회원ID를 지우면 재로그인 때 null != memberId가 참이 되어 캐시가 지워집니다. 대기 행을 남겨도 재로그인 한 번에 사라집니다. 회원ID를 남겨야 같은 계정으로 판정되어 보존이 실제로 유지됩니다.

회원ID가 토큰 없이 기기에 남는 것이 걸리는 부분이 있으면 봐주시면 좋겠습니다. 평문 SharedPreferences에 이미 저장되던 값이고, 토큰이 없으면 EntryState.Login에서 막혀 화면에 도달하지 않습니다.

✅검증

ktlintCheck, :domain:test, :data:testDebugUnitTest, :app:testDebugUnitTest, :feature:profile:testDebugUnitTest, :app:assembleDebug 로컬 통과. base가 dev이므로 dev-ci도 함께 돕니다.

ClearSessionUseCaseTest를 7건으로 재작성했습니다. 사용자 이탈 4건(전체 삭제, 캐시 삭제, 캐시를 지운 뒤 세션 정리, 캐시 삭제 실패해도 예약과 세션 정리), 강제 이탈 2건(캐시 미삭제, 토큰만 삭제), 공통 1건(이유와 무관한 예약 취소)입니다.

@edv-Shin edv-Shin self-assigned this Sep 7, 2026
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