목적
회원 탈퇴 API가 없어 사용자가 계정을 직접 삭제할 수 없는 상태였습니다.
탈퇴 처리 및 탈퇴 후 관련 데이터 정리, 재접근 차단까지 전체 흐름을 구현합니다.
작업 내용
DELETE /users/me 탈퇴 API 구현 (소프트 삭제)
- 탈퇴 시 개인정보 마스킹: name / loginId / password / nickname / email / phone / profileImageUrl
- 탈퇴 시 연관 데이터 정리: FCM 토큰, SSO 계정, 임시 이미지(GCS + DB), 프로필 이미지(GCS), Refresh 토큰
- CONFIRMED / IN_PROGRESS 예약이 있을 경우 탈퇴 거부 (409)
- JWT 필터에서 탈퇴 유저 토큰 재사용 차단 →
E0118 WITHDRAWN_USER 응답
- 소셜 로그인 시 탈퇴 유저 재로그인 차단 (
SsoService)
- 게시글 / 댓글 작성자 닉네임이 null인 경우 "탈퇴한 사용자"로 표시
- Flyway 마이그레이션 추가:
V21__user_soft_delete.sql (deleted_at 컬럼)
- 에러코드 추가:
E0118 WITHDRAWN_USER, E0119 WITHDRAW_BLOCKED_BY_RESERVATION
영향 범위
- 엔티티:
User (deleted_at, withdraw() 메서드)
- 엔드포인트:
DELETE /users/me
- 모듈: user, auth, community, global/filter, notification, image
- DB: users 테이블에
deleted_at TIMESTAMP 컬럼 추가
완료 조건
관련 이슈 / 참고
- UserPreference 삭제는 Course 엔티티의 FK 제약으로 보류 → 후속 PR에서 스냅샷 패턴으로 전환 후 처리 예정
목적
작업 내용
DELETE /users/me탈퇴 API 구현 (소프트 삭제)E0118 WITHDRAWN_USER응답SsoService)V21__user_soft_delete.sql(deleted_at컬럼)E0118 WITHDRAWN_USER,E0119 WITHDRAW_BLOCKED_BY_RESERVATION영향 범위
User(deleted_at, withdraw() 메서드)DELETE /users/medeleted_at TIMESTAMP컬럼 추가완료 조건
관련 이슈 / 참고