오프테이블 Wiki

조사 결과 · 실행 계획

탈퇴 삭제·보존 데이터 맵

현재 스키마에서 Auth 삭제가 공동 채팅을 지우는 경로와, hard delete 전에 바꿀 FK·보존 대상을 표로 고정한다.

상태
초안
신뢰도
높음
근거
3개
업데이트

핵심 결론

지금 auth.users나 profiles를 지우면 그 회원이 만든 방과 다른 회원의 메시지까지 cascade로 사라진다. hard delete는 FK를 고친 뒤에만 연다.

지금 지우면 일어나는 일#

profiles.id는 auth.users에 on delete cascade다. 그 아래도 cascade다.

대상 현재 FK Auth/프로필 삭제 시
public.profiles users cascade 행 삭제
public.chat_rooms.created_by profiles cascade 방 전체 삭제
public.chat_room_members room·user cascade 멤버십 삭제. 방 삭제면 전원 삭제
public.messages.sender_id profiles cascade 그 방 메시지 삭제. 방 cascade면 타인 메시지도 삭제
private.account_lifecycle users cascade 행 삭제
private.user_consents users cascade 현재 동의 삭제
private.user_consent_events users cascade 이력 삭제
private.admin_grants users cascade 관리자 권한 삭제
private.account_suspensions.user_id users cascade 정지 기록 삭제
private.account_suspensions.suspended_by users, ON DELETE 없음 정지시킨 관리자 삭제 시 실패 가능

백업·로그·Resend·Supabase 외부 사본은 스키마 밖이라 이 표에 없다. runbook에서 따로 적는다.

열기 전에 바꿀 것#

이미 정한 기간(탈퇴 보존기간)과 맞춘다.

  1. chat_rooms.created_by를 nullable 또는 tombstone 프로필로. 호스트 탈퇴 시 예정 식사는 취소·공지하고 방을 지우지 않는다.
  2. messages.sender_id를 nullable. 본문은 남기고 표시는 탈퇴한 회원. 표시·삭제 일수는 탈퇴 보존기간.
  3. 멤버십은 탈퇴자만 제거. 다른 참가자 cascade 금지.
  4. 신고 메시지는 복사해 사건 저장소로 분리. 기간은 같은 ADR.
  5. suspended_by는 on delete set null 또는 시스템 계정.
  6. 동의 이력은 같은 ADR의 2년 뒤 비식별화. 그 전에는 cascade로 지우지 않는다.
  7. 삭제 job 상태(queued/running)가 생기기 전에는 취소를 withdrawal_requested에서만 허용한다.

아직 열지 않는 것#

  • 마이페이지·관리자의 즉시 Auth 삭제 버튼
  • 삭제 FK·tombstone·삭제 job. 순서는 탈퇴 구현 순서
  • 광고 메일 발송
  • 전자상거래 보존기간을 계정 전체에 적용

관련: 계정 데이터 기준 · 탈퇴 보존기간 · 감사 계획 · 탈퇴 생명주기

제목, 요약, 태그, 본문을 검색합니다.