# 계정 · 인증 · 설정 IA (Phase 1 갭 명세) 권위: [`decision-log.md`](./decision-log.md) Q8(확정)·Q9(제안) · [`PRD.md`](./PRD.md) · [`invite-ops.md`](./invite-ops.md). Q8은 2026-08-03 확정·구현. Q9(수신 트리거 L2)는 제안 상태로 코드 범위를 넓히지 않는다. ## 1. 현재 상태 (as-is) | 영역 | 있음 | 없음 / 불완전 | |------|------|----------------| | 가입 | 초대 코드 + 표시 이름 (`SignupScreen`, `POST /auth/signup`) | 이메일·비밀번호·소셜 | | 로그인 | 서버 `POST /auth/login` (초대 코드) | 앱 UI에 「이미 가입」경로 | | 세션 | Bearer 토큰 로컬 저장, `SessionsScreen` 목록/종료 | 종료 후 로컬 토큰 클리어·가입 화면 복귀 | | 로그아웃 | — | 메인 메뉴 로그아웃 **없음** | | 설정 | ⋮ → 말투 / 자율성(안에 세션·데이터흐름) | 단일 「설정」진입점·로그아웃 묶음 | | L2 | 서버 발송 게이트 + 화이트리스트 키워드 | PRD §2.2식 **수신 트리거 자동응대** | ## 2. Phase 1 목표 모델 (to-be, Q8 확정) ### 2.1 계정 - **초대 코드 클로즈드 베타만.** 이메일/비번/OAuth는 Phase 1 비범위 (`decision-log` Q7·Q8a). - 한 초대 코드 = 한 가입 (`invite-ops.md`). 데모 코드 `DEMO-YKAVU`는 운영 예외(재사용 허용). - 사용자는 **숫자 사용자 ID**로 페어링한다 (표시 이름만으로는 대화 불가 — 기존 Track A). ### 2.2 가입 / 로그인 UX ``` [스플래시] → 토큰 유효? → 메인(대화 목록) → 없음 → [입장 화면] ├─ 새로 가입 (초대 코드 + 표시 이름) → 말투 온보딩 → 메인 └─ 이미 가입 (초대 코드 + 표시 이름) → 메인 ``` - 「이미 가입」은 `POST /auth/login`으로 새 세션 토큰을 받는다. - 일반 초대: 사용된 초대 코드 → 사용자. 표시 이름이 있으면 일치해야 함. - `DEMO-YKAVU`: 표시 이름 **필수** (공유 코드라 이름으로 사용자 구분). - 비밀번호 없음. 초대 코드 유출 = 계정 탈취 가능 → 베타 한정 리스크로 `invite-ops`에 명시. ### 2.3 로그아웃 (P0 갭) 1. 설정(또는 ⋮) → **로그아웃** 확인 2. `DELETE /users/:id/sessions/:current` (또는 동등 revoke) 3. 로컬: `session_token` / 유저 캐시 삭제, API 클라이언트 토큰 클리어 4. 네비게이션: 입장(가입/로그인) 화면으로 스택 리셋 5. 말투 샘플 등 온디바이스 DB는 **기기 잔존**(같은 사용자가 다시 로그인하면 재사용) — “기기에서 전부 삭제”는 별 옵션(후속) ### 2.4 설정 IA 대화 목록에서 발견 가능한 한 진입점(권장: ⋮ 유지 + 라벨 「설정」, 또는 톱니 아이콘). | 항목 | 화면 | 비고 | |------|------|------| | 말투 · 페르소나 | `OnboardingToneScreen` | 설정 허브에서 진입 | | 자율성 · 화이트리스트 · 관계 기본 | `AutonomySettingsScreen` | 기존 | | 로그인 세션 | `SessionsScreen` | 기존, 로그아웃과 구분 | | 데이터 흐름 | `DataFlowScreen` | 기존 | | **로그아웃** | 확인 다이얼로그만 | **신규** | 채팅방 앱바에는 설정 전체를 넣지 않는다 (거부권·스누즈만 유지). ### 2.5 계정 삭제 - Phase 1 앱 UI **비범위** (Q8e 제안). - 운영 필요 시 서버/DB 수동. 정식 탈퇴 API는 베타 이후 Q. ## 3. L2 의미 (Q9 제안) — 카피·구현 정렬 ### 3.1 PRD가 말하는 것 (`PRD.md` §2.2) 상대가 메시지를 보냄 → (화이트리스트면) 와카뷰가 **즉시 자동 발송** + 사후 알림. ### 3.2 지금 코드가 하는 것 - 사용자가 ✨으로 초안을 받고, 클라이언트가 `sender_mode=twin`으로 발송할 때 - 서버가 L2 + 화이트리스트 매칭이면 `approved` 없이도 저장·릴레이 - **상대 메시지 수신을 감지해 스스로 초안·발송하는 루프는 없음** ### 3.3 Phase 1에서의 제품 카피 (제안) - 자율성 화면 L2 설명: 「화이트리스트 주제의 **와카뷰 답장**은 승인 없이 보낼 수 있습니다. 상대 메시지를 받으면 ✨으로 초안을 만든 뒤 보내세요.」 - “자리를 비우면 알아서 답함”은 **수신 트리거 자동응대** 구현 전까지 쓰지 않음. ### 3.4 후속 구현 (별 로드맵, Q9 확정 후) 1. 1:1에서 상대 메시지 WS/수신 이벤트 2. 에스컬레이션·거부권·도배·그룹 하드게이트 통과 시만 3. 초안 생성 → L2+화이트리스트면 twin 발송, 아니면 L1 알림 4. 사후 알림 + 되돌리기 (기존 불변식) ## 4. 수락 기준 (구현 착수 시) **계정/설정 (Q8 확정)** - [x] 입장 화면에 가입 / 이미 가입(로그인) 구분 - [x] 로그아웃 시 서버 세션 무효 + 로컬 토큰 삭제 + 입장 화면 복귀 - [x] 설정 진입에서 로그아웃이 한 번의 탭 경로로 발견 가능 - [x] 이메일/비번 UI를 추가하지 않음 **L2 정렬 (Q9 확정 후)** - [ ] L2 설명이 발송 게이트 현실과 모순되지 않음 - [ ] 수신 자동응대를 넣을 경우 별도 roadmap 체크리스트 + 안전 불변식 테스트 ## 5. 비범위 (이 문서에서 다루지 않음) - 이메일 인증, OAuth, 비밀번호 재설정 - OS 레이어 계정 연동 - L3/L4