112 lines
5.1 KiB
Markdown
112 lines
5.1 KiB
Markdown
# 계정 · 인증 · 설정 IA (Phase 1 갭 명세)
|
|
|
|
권위: [`decision-log.md`](./decision-log.md) Q8·Q9 (제안) · [`PRD.md`](./PRD.md) · [`invite-ops.md`](./invite-ops.md).
|
|
이 문서는 **구현 전에** 제품 경계를 고정하기 위한 명세다. Q8/Q9가 `확정`되기 전에는
|
|
코드를 크게 바꾸지 않는다.
|
|
|
|
## 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`을 호출해 새 세션 토큰을 받는다.
|
|
- 비밀번호 없음. 초대 코드 유출 = 계정 탈취 가능 → 베타 한정 리스크로 `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 확정 후)**
|
|
|
|
- [ ] 입장 화면에 가입 / 이미 가입(로그인) 구분
|
|
- [ ] 로그아웃 시 서버 세션 무효 + 로컬 토큰 삭제 + 입장 화면 복귀
|
|
- [ ] 설정 진입에서 로그아웃이 한 번의 탭 경로로 발견 가능
|
|
- [ ] 이메일/비번 UI를 추가하지 않음
|
|
|
|
**L2 정렬 (Q9 확정 후)**
|
|
|
|
- [ ] L2 설명이 발송 게이트 현실과 모순되지 않음
|
|
- [ ] 수신 자동응대를 넣을 경우 별도 roadmap 체크리스트 + 안전 불변식 테스트
|
|
|
|
## 5. 비범위 (이 문서에서 다루지 않음)
|
|
|
|
- 이메일 인증, OAuth, 비밀번호 재설정
|
|
- OS 레이어 계정 연동
|
|
- L3/L4
|