
탈퇴했는데 로그인이 풀리지 않았다 — 원인만 찾고 덮어둔 날
탈퇴한 계정으로 앱이 계속 열린다는 문의가 들어왔다. 탈퇴 버튼을 눌렀고 완료 화면까지 봤는데, 앱을 껐다 켜니 홈에 자기 정보가 그대로 남아 있었다는 내용이었다. 데이터가 안 지워진 거냐고 물었다. 하루를 원인 찾는 데 썼고, 결론은 "원인은 알았는데 이번엔 안 고친다"였다.
데이터가 아니라 세션 문제였다
문의만 보면 삭제가 실패한 것처럼 읽힌다. 그래서 먼저 의심한 것도 탈퇴 API였다. 그런데 재현해 보니 순서가 달랐다. 계정은 지워졌고, 화면만 살아 있었다.
탈퇴는 서버에서 계정 상태를 바꾸는 일이다. 로그인은 기기에 저장된 토큰으로 유지된다. 이 둘이 같은 동작이라고 착각하기 쉬운데, 실제로는 별개다. 서버에서 계정을 정리해도 기기에 남은 토큰을 아무도 회수하지 않으면, 앱 입장에서는 여전히 누군가 로그인해 있는 상태다.
의심한 지점을 하나씩 지웠다
| 의심한 지점 | 확인 방법 | 결과 |
|---|---|---|
| 탈퇴 요청이 실패했다 | 서버 로그에서 해당 요청 응답 추적 | 정상 처리 |
| 계정 데이터가 남아 있다 | DB에서 대상 계정 상태 조회 | 탈퇴 상태로 변경됨 |
| 앱이 토큰을 지우지 않는다 | 탈퇴 직후 로컬 저장소 확인 | 남아 있었다 |
| 서버가 남은 토큰을 계속 받는다 | 그 토큰으로 API 재호출 | 만료 전까지 통과 |
마지막 두 줄이 겹치면서 증상이 만들어졌다. 앱은 토큰을 안 지우고, 서버는 지워진 계정의 토큰을 굳이 막지 않는다. 둘 중 하나만 제대로 있었어도 증상은 안 났을 것이다. 둘 다 없었다.
고칠 수 있는데 고치지 않았다
수정 자체는 크지 않다. 탈퇴 성공 응답을 받으면 로컬 토큰을 비우고, 서버에서도 탈퇴 시점에 해당 세션을 무효로 만들면 된다. 그런데 이번 주에 그걸 건드리지 않기로 했다.
이유는 세 가지였다.
- 8월 말 마감이 걸린 결제 라이브러리 업그레이드가 먼저였다. 이건 미루면 앱이 막힌다.
- 다른 앱 릴리스 준비가 같은 주에 걸려 있었다.
- 실기기와 시뮬레이터로 전 항목 검증을 막 끝낸 빌드였다. 인증 흐름을 지금 손대면 그 검증을 다시 해야 한다.
증상의 실제 피해도 따져봤다. 탈퇴한 사람이 자기 기기에서 잠깐 자기 정보를 더 보는 상황이다. 남의 계정이 열리는 것도 아니고, 지워진 데이터가 살아나는 것도 아니다. 불쾌한 건 맞지만 급한 건 아니라고 봤다.
미룰 때 남겨둔 것
그냥 미루면 잊는다. 그래서 재현 절차, 확인한 네 줄, 수정 범위를 문의 티켓에 그대로 붙여뒀다. 다음에 인증 쪽을 여는 작업이 생기면 그때 같이 처리하려고 표시도 해뒀다.
다음에 비슷한 걸 만나면 이 순서로 볼 것 같다. 첫째, 증상이 데이터 문제인지 표시 문제인지부터 가른다. 둘째, 다른 사람 계정에 영향이 가는지 본다. 여기서 걸리면 마감이 뭐든 그날 고친다. 셋째, 지금 고치면 다시 해야 하는 검증이 얼마나 되는지 센다.
다만 이 판단이 맞는지는 좀 더 봐야 한다. 같은 문의가 몇 번 더 들어오면 우선순위는 바로 뒤집힐 것이다.