회원 상태 흐름
상태 정의
별도 enum 없이 deletedAt / anonymizedAt 두 필드의 null 여부로 상태를 판단합니다.
| 상태 | 조건 | 설명 |
|---|---|---|
| 정상 | deletedAt == null | 일반 이용 가능 |
| 탈퇴 유예 | deletedAt != null, anonymizedAt == null | 탈퇴 신청 후 30일 이내 |
| 익명화 완료 | anonymizedAt != null | 개인정보 영구 삭제 완료 |
상태 전이 흐름
회원가입 (카카오 로그인)
│
▼
┌────정상────┐
│ │
탈퇴 신청 일반 이용
│
▼
탈퇴 유예 (PENDING_DELETION)
│ │
재로그인 30일 경과
│ (매일 02:00 KST 스케줄러)
▼ │
정상 ▼
익명화 완료
(로그인 불가)
상태별 API 동작
| 상태 | 로그인 | JWT status 클레임 | 일반 API |
|---|---|---|---|
| 정상 | ✅ | 없음 | 정상 |
| 탈퇴 유예 | ✅ (자동 복구) | PENDING_DELETION | 정상 (복구 후) |
| 익명화 완료 | ❌ 401 DELETED_USER | — | 불가 |
탈퇴 유예 상태에서 소셜 재로그인하면 탈퇴가 자동 취소되고 정상 상태로 복구됩니다.
전이 트리거 상세
| 전이 | 트리거 | 처리 내용 |
|---|---|---|
| 정상 → 탈퇴 유예 | DELETE /api/users/me 호출 | deletedAt = 현재 시각 기록 |
| 탈퇴 유예 → 정상 | 소셜 재로그인 | deletedAt = null 초기화 |
| 탈퇴 유예 → 익명화 완료 | 스케줄러 (deletedAt 30일 초과 시) | email, nickname 더미값으로 교체 후 anonymizedAt 기록 |