---
title: "📋 작업보고 — 설정 표시형식 재배치 + 계정삭제 UX + delete-account Edge Function"
category: "report"
parent: "Claude Code 작업보고"
updated: "2026-07-02"
priority: "High"
purpose: "페이즈1 설정 화면 개선의 첫 배치. 표시 형식 패널 재배치와, 되돌릴 수 없는 계정 삭제 기능(프론트 UX + 서버 Edge Function)의 구현·검증·배포 기록. 계정 삭제는 데이터 소실 위험이 있어 별도 의사결정 문서(계정삭제 설계)와 함께 본다."
read_when: ["계정 삭제 기능","delete-account Edge Function","표시 형식 테마 이동","TypedConfirmDialog 계정삭제","설정 화면 개선"]
document_type: "작업보고"
source_status: "generated"
knowledge_group: "03_history"
work_timestamp: "20260702_204701"
source_of_truth: "https://dallog-tools.hansbridge.co.kr/knowledge/"
context: "달록본레포CC (D:\\dallog\\dallog_git)."
---

> 대상 브랜치 `phase1-release`(SoT) → `main`(dallog.kr)·`demo-dallog`. 이 문서는 산출·검증·배포 사실 보고. 설계 근거는 [의사결정] "계정삭제 설계 — auth-first cascade" 참조.

## 1. 배경
페이즈1 배포 로드맵(1블록: C4까지 → 검수 → 2·3블록) 중, 사장님 추가 지시로 "설정 > 표시 형식 / 계정 삭제 UX"를 구현. 13태스크(설정·헤더 UI 개선) 외 별건.

## 2. 표시 형식 패널 재배치
- **테마(다크/라이트/시스템)를 계정 카드 → 표시 형식 패널 최상단으로 이동**(캡션 아래·시간표기 위). 데스크탑·모바일 공통.
- **4그룹 구분선** 도입(`.set-group-divider`, `--border`·`--space-*` 토큰): ①테마 ②시간·날짜·무게·거리 ③최초 보기(데탑·모바일) ④모바일 기록탭.
- **"최초 보기화면 저장" → "저장"** 리네임. 데스크탑은 '표시 형식' 세미타이틀과 같은 행 우측·폭 `--sp-90`, 모바일은 하단 유지.

## 3. 계정 삭제 UX
- 계정 패널에 **danger 계열 "계정 삭제" 버튼**. 게스트(비로그인 체험계정)는 삭제할 계정이 없어 미노출(로그인 유도만).
- **확인 모달**(`TypedConfirmDialog` 재사용): 신체/러닝/근력 기록 건수 표시 + `'{표시이름}의 계정과 기록을 모두 삭제합니다.'`를 **정확히 입력해야만** [삭제] 활성(오조작 방지).
- 확정 시 서버 `delete-account` Edge Function 호출 → 성공 시 `signOut()` → `/login` 이동. **클라이언트에서 auth 직접 조작 없음**(서버 service_role만 삭제 수행).

## 4. delete-account Edge Function (v2, Supabase Deno)
- **인증**: 호출자 JWT(`getUser`)로 파생한 본인 `uid`만 삭제. 요청 body의 uid는 신뢰/사용 안 함(타인 삭제 불가). `verify_jwt: true`.
- **삭제 방식(최종 v2)**: auth.users를 참조하는 앱 FK가 전수 `ON DELETE CASCADE`임을 pg_constraint로 확인 → `admin.auth.admin.deleteUser(uid)` 한 번으로 32테이블 + 자식 트리(strength_sets→exercises→logs, post_comments/likes→posts) + `auth.identities`(OAuth 연결)까지 연쇄 삭제. 아바타 storage만 auth 삭제 전 best-effort 청소. (설계 근거·초기안→v2 전환은 의사결정 문서 참조)

## 5. 검증
- **Codex 사전·사후 복수검수**: 즉시반영 이후 재검수 [즉시반영 0/검토후반영 0]로 clean.
- **삭제 완전성 DB 실증**(일회용 계정): 13테이블(3계층 자식+OAuth identity) 시드 → 삭제 → 전부 count=0, identities=0.
- **end-to-end 실증**(로그인 가능한 실계정): signup→이메일확인→로그인→기록 입력→delete-account HTTP 호출→ 삭제 후 auth 0·identity 0·기록 0·재로그인 400(invalid_credentials). 테스트 계정 2개 잔여 0.
- 빌드 GREEN · 토큰 가드(spacingTokenGuard) 3/3.

## 6. 배포
- 최종 라이브 반영: `main` fd45ced(dallog.kr)·`demo` dea15c6·`phase1-release` f8765c7(이후 커밋 포함). Edge Function `delete-account` v2 ACTIVE(Supabase).
- ※ 중간에 배포 커밋(eeff2ae)에서 데모 index.html이 딸려 들어가 프로덕션 파비콘/타이틀이 오염된 사고가 있었고 복원함 → 별도 [의사결정] "main 데모오염 회귀 대응" 참조.

## 7. 파일
- `src/pages/Settings.tsx`(detailDisplay·detailAccount·핸들러·모달), `src/index.css`(.set-group-divider·.set-save--sm 등), `supabase/functions/delete-account/index.ts`.
