요청: crowny-ai-세션-이관
- 날짜: 2026-06-13 19:38:23
- 작업 경로: /Users/ef/crowny-ai
요청 본문
익명 세션을 회원가입/로그인 시 계정에 매칭·이관하는 베스트 프랙티스 조사. 대화 보존, 멱등성, 충돌 처리 포함. 웹 검색으로 여러 출처 교차확인 후 한국어 권고 정리
관련 산출
(클로드가 작업 결과를 이어 기록)
작업 결과 (2026-06-13 완료)
산출물
- 주 보고서: /Users/ef/CrownyDoc/projects/2026-06-13-익명세션-이관-베스트프랙티스.md
- 공개 URL: docs.crowny.org/docs/2026-06-13-익명세션-이관-베스트프랙티스
내용 요약
- 아키텍처: 익명(ownerToken) → 회원가입 → 계정 매칭 → authToken 3단계 이관
- 데이터 보존: anonymous_conversations 테이블 + accounts.ownerTokenMigrated로 중복 방지
- 멱등성: Idempotency-Key + 5분 캐시로 재시도 안전
- 충돌 처리: email 중복 시 409 Conflict + 제안 응답
- 보안: 토큰 검증(형식+시그니처+TTL) + CSRF + 타입 분리(auth_ vs owner_)
- 업계 사례: Firebase(automatic linking), Auth0(중복 감지), Stripe(metadata), GitHub(OAuth matching)
구현 우선순위
Phase 1 (즉시):- engine/auth.js: migrateAnonymousSession() 함수 추가
- DB: anonymous_conversations + accounts.ownerTokenMigrated
- public/index.html: 로그인 후 authToken 적용
- 테스트: 익명→회원 + 재로그인 + 충돌 케이스
- CSRF 보호 강화
- Idempotency 캐시 구현
- 토큰 타입 접두사 분리
- OAuth (Google, GitHub) 통합
- MFA 지원
- 다중 identity 통합
근거 자료
- Firebase Authentication - Account Linking
- Auth0 Best Practices
- RFC 6749 OAuth 2.0
- OWASP Session Management
- Stripe Idempotent Requests
다음 단계
- engine/auth.js 현재 코드 검토 (ownerToken 검증 로직 확인)
- DB 스키마 마이그레이션 (anonymous_conversations 테이블 생성)
- 함수 구현 (migrateAnonymousSession 및 에러 처리)
- public/index.html 수정 (로그인 후 authToken 적용)
- E2E 테스트 (multi-browser, 재시도, 충돌)