Skip to content

[task] user — 회원 탈퇴 (App Store 심사 필수) #271

Description

@sevineleven

부모 에픽: #7 · 선행: #34 (소셜 로그인 · PR #93)

App Store 심사 필수 항목이다. 계정을 만들 수 있는 앱은 앱 안에서 지울 수도 있어야 한다(App Review Guideline 5.1.1(v)).

그리고 이미 약속했다. 개인정보처리방침(https://offway.cloud/privacy) 9항이 "앱 내 [마이 → 회원탈퇴]" 로 탈퇴 경로를 명시하고 있다. 방침에 적힌 권리가 실제로 동작하지 않으면 그건 문서 문제가 아니라 규정 위반이다.

지금은 탈퇴 코드가 아예 없다 — users·user_identity·refresh_token 어디에도 지우는 경로가 없다.

무엇을

DELETE /api/v1/users/me   →  200 + detail "탈퇴 처리되었습니다."

인증된 사용자가 자기 계정을 지운다.

반드시 답해야 할 것 — 무엇까지 지우나

프론트가 명시적으로 물었다: "탈퇴 시 연차·저장 코스·공유 토큰까지 함께 지워지는지 알려주세요."

여기에 걸림돌이 하나 있다. 사용자 식별이 guestIduserId 로 옮겨가는 중이고, 아직 안 옮겨졌다.

데이터 지금 소유 키 탈퇴(userId)로 닿나
users · user_identity · refresh_token users.id (UUID) 닿는다
course (+ day_schedule · slot) course.guest_id (VARCHAR) 안 닿는다
leave_balance · leave_usage guest_id 안 닿는다
trip_outcome guest_id 안 닿는다

그래서 탈퇴가 무엇을 지우는지는 그 이행 상태에 달렸다. 못 지우는 것이 있으면 얼버무리지 말고 명시한다.

공유 링크

course_share 는 코스가 지워져도 남아 410(게시자가 삭제함)으로 답하는 묘비다. 탈퇴로 코스를 지우면 이미 남에게 뿌린 링크가 어떻게 되는지 정하고 적는다.

범위 밖 (후속)

  • 소셜 연결 해제 — 카카오 unlink(POST /v1/user/unlink)는 Admin 키가 필요한데 아직 못 받았다. Apple revoke 는 .p8 키로 client secret JWT 를 만들어야 한다. 둘 다 받은 뒤 후속으로 붙인다.
  • 탈퇴 사유 수집·유예 기간(soft delete) — 지금은 즉시 삭제로 간다.

완료 기준

  • DELETE /api/v1/users/me — 인증 필요, 200 + 공통 래퍼
  • 무엇을 지우고 무엇을 못 지우는지 PR 에 표로 명시
  • 탈퇴 후 그 토큰·refresh 로 아무것도 못 하는지 통합 테스트로 잠금
  • 공유 링크의 사후 동작(404/410) 확정 + 테스트

Metadata

Metadata

Assignees

Labels

feat새 기능 (외부에 보이는 변화)

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions