Skip to content

[BE] 회원 탈퇴 기능 구현 #282

@duku0751

Description

@duku0751

목적

회원 탈퇴 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 컬럼 추가

완료 조건

  • 기능 정상 동작
  • Lint / 타입 체크 통과
  • API 명세 업데이트

관련 이슈 / 참고

  • UserPreference 삭제는 Course 엔티티의 FK 제약으로 보류 → 후속 PR에서 스냅샷 패턴으로 전환 후 처리 예정

Metadata

Metadata

Assignees

Labels

enhancementNew feature or request

Type

No type
No fields configured for issues without a type.

Projects

Status
Done

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions