Skip to content

Feat/74 회원 탈퇴 구현 - #253

Open
jaylovegood wants to merge 18 commits into
devfrom
feat/74-회원-탈퇴-구현

Hidden character warning

The head ref may contain hidden characters: "feat/74-\ud68c\uc6d0-\ud0c8\ud1f4-\uad6c\ud604"
Open

jaylovegood wants to merge 18 commits into
devfrom
feat/74-회원-탈퇴-구현

Conversation

@jaylovegood

@jaylovegood jaylovegood commented Jun 2, 2026 •

Copy link
Copy Markdown
Member

✨ Feature PR (to dev)

🧪 로컬 테스트 여부 (작업자 체크)

  • 로컬에서 Swagger 혹은 테스트 코드로 동작을 확인했습니다.
  • API 변경이 있다면 src/main/resources/static/docs/openapi.yaml을 함께 갱신했습니다.
  • /docs/swagger-ui.html에서 변경 API가 의도대로 보이는지 확인했습니다.

📄 documentation 최신화 여부

변경사항과 관련된 API의 swagger documentation이 실제 동작과 일치하는지 확인합니다.

  • (작업자) 확인하였습니다.
  • (리뷰어) 확인하였습니다.

📌 작업 내용(what & why)

회원 탈퇴 처리 및 이에 수반되는 event/registration 삭제 및 익명화 로직을 구현하였습니다.

  • 핵심 도메인 로직 (UserService.deleteMe())

    • 주최 이벤트가 이미 시작됐으면 createdBy = null, HOST 등록 익명화
    • 주최 이벤트가 아직 시작 전이면 이벤트 및 전체 신청 건 삭제, 참여자들에게 취소 메일 발송
    • 참여 등록(CONFIRMED/WAITLISTED)은 신청기간 마감됐으면 익명화, 기간 내면 삭제 및 (필요시) 대기자 승격
      • 탈퇴로 인한 참여취소의 경우 따로 취소 메일 발송 x
    • BANNED 등록은 익명화 (FK 정리, 차단 기록 보존)
  • 수정된 주요 파일

    • UserService.kt — deleteMe() 전체 구현, 5개 의존성 추가
    • EventService.kt — deleteEventsForWithdrawal() 신규 (배치 삭제 + afterCommit 메일), getDetail() null-safe 처리
    • RegistrationService.kt — cancelRegistrationsForWithdrawal() 신규 (배치 취소 + 대기자 승격)
    • Event.kt, EventDto.kt, EventDetailResponse.kt, EmailService.kt — createdBy, email nullable 변경
    • 레포지토리 4개 — findByCreatedBy, findByUserIdAndStatusIn, findByEventIdInAndStatusIn, deleteByEventIdIn, deleteByUserId 추가
  • 테스트

    • UserIntegrationTest 5개 시나리오 추가 (시작된 이벤트 주최자, 시작 전 이벤트 주최자, 기간 마감 등록자, 기간 내 등록자, BANNED만 있는 유저)
  • Swagger

    • DELETE /api/users/me 엔드포인트 + CreatorInfo.email nullable 스키마 반영

🔎 영향 범위

  • DB 스키마 변경
    • 마이그레이션 V15: events.created_by 컬럼 nullable로 변경

📡 API 변경사항 (있다면)

Method URL 변경 내용
DELETE /users/me 유저 삭제(탈퇴처리) 엔드포인트 추가

🔥 관련 이슈

*이메일 비동기화 브랜치와 충돌이 있을 것으로 예상됩니다.

@jaylovegood
jaylovegood requested a review from uykhc June 2, 2026 05:14
@jaylovegood jaylovegood linked an issue Jun 2, 2026 that may be closed by this pull request

@uykhc uykhc left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

작업하느라 수고하셨습니다!

  1. 이벤트 시작 시점 및 신청기간 마감 여부에 따라 삭제/익명화 전략 다르게 구현
  2. eventIds.sorted()로 락 순서 보장
  3. AfterCommit 패턴으로 메일 발송 지연
  4. DB 마이그레이션 내 Nullable 처리
  5. 테스트 커버리지

회의 때 말씀하셨던 내용대로 구현하신 부분 모두 확인했습니다.

크리티컬한 부분은 없어보이지만 굳이 개선할 부분을 찾아보면

  1. UserService의 고아 데이터 처리 부분 로그 남기기
  2. EventService의 afterCommit 이메일 발송 실패 시 로그 남기기
  3. 같은 이벤트 참여자 동시 탈퇴 테스트 시나리오 추가
  4. UserService에서 DB 쿼리 조회가 2번 발생하는데 모든 참여 등록을 한 번에 조회하고 partition으로 분리하여 DB 조회 최적화

정도가 있는 것 같습니다.

감사합니다.

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.

회원 탈퇴 구현

2 participants