196 lines
8.1 KiB
Markdown
196 lines
8.1 KiB
Markdown
|
|
# Cross Device Handoff And Session Continuity
|
||
|
|
|
||
|
|
## 목적
|
||
|
|
|
||
|
|
메신저는 단일 기기 앱이 아니라 `흐름이 이어지는 도구`여야 한다.
|
||
|
|
사용자는 PC에서 읽다가 모바일에서 이어 보고, 모바일에서 초안을 쓰다가 데스크톱에서 마무리한다.
|
||
|
|
이 흐름이 부자연스럽다면 기능이 많아도 실제 체감은 낮다.
|
||
|
|
|
||
|
|
이 문서는 Windows 데스크톱, 모바일 웹, 안드로이드가 병렬로 존재하는 상황에서 `세션이 끊기지 않고`, `문맥이 보존되며`, `같은 일을 다시 하지 않아도 되는` 제품 설계를 정의한다.
|
||
|
|
|
||
|
|
## 현재 산출물의 핵심 리스크
|
||
|
|
|
||
|
|
- 모바일 웹에서 세션 만료가 발생하면 사용자는 제품 전체를 불안정하게 느낀다.
|
||
|
|
- 기기 전환 시 마지막으로 보던 대화, 읽지 않은 구간, 작성 중 초안이 유지되지 않는다.
|
||
|
|
- 실제 구현보다 문서가 앞서 있어 사용자 기대와 현실 사이의 간극이 생긴다.
|
||
|
|
- `다른 기기에서 다시 해야 하는 일`이 많을수록 메신저의 신뢰도는 빠르게 하락한다.
|
||
|
|
|
||
|
|
## 핵심 원칙
|
||
|
|
|
||
|
|
### 1. 세션 연속성은 편의 기능이 아니라 신뢰 기능이다
|
||
|
|
|
||
|
|
- 사용자는 토큰 구조를 이해하지 않는다.
|
||
|
|
- 사용자가 이해하는 것은 `갑자기 다시 로그인해야 했는가`, `쓰던 것이 남아 있었는가` 뿐이다.
|
||
|
|
- 따라서 세션 설계는 보안과 UX를 함께 다뤄야 한다.
|
||
|
|
|
||
|
|
### 2. 기기 전환 비용은 거의 0에 가까워야 한다
|
||
|
|
|
||
|
|
- 다른 기기에서 앱을 열었을 때 마지막 대화와 읽지 않은 구간이 보여야 한다.
|
||
|
|
- 최소한 `어디서 멈췄는지`는 기억돼야 한다.
|
||
|
|
- 사용자는 다시 검색하고 다시 스크롤하고 다시 정리하는 과정을 반복하고 싶어 하지 않는다.
|
||
|
|
|
||
|
|
### 3. 작성 중 상태는 로컬과 서버를 함께 활용해 지킨다
|
||
|
|
|
||
|
|
- 로컬 캐시는 즉시성에 강하고, 서버 초안은 기기 간 이동에 강하다.
|
||
|
|
- 둘 중 하나만 있으면 경험이 끊긴다.
|
||
|
|
|
||
|
|
## 지원해야 하는 전환 시나리오
|
||
|
|
|
||
|
|
### PC -> 모바일 웹
|
||
|
|
|
||
|
|
- 퇴근 직전 PC에서 읽던 업무방을 모바일에서 바로 이어 본다.
|
||
|
|
- 방금 입력하던 초안은 `이어쓰기` 카드로 복원된다.
|
||
|
|
- PC에서 연 파일과 링크는 모바일에서 `최근 작업 항목`으로 보인다.
|
||
|
|
|
||
|
|
### 모바일 웹 -> PC
|
||
|
|
|
||
|
|
- 이동 중 모바일에서 가볍게 읽고, 자리로 돌아와 PC에서 자세히 답변한다.
|
||
|
|
- 읽음 커서는 서버 기준으로 즉시 동기화된다.
|
||
|
|
- 긴 답장이나 파일 첨부가 예상될 때 `PC에서 이어쓰기` 제안을 보여 줄 수 있다.
|
||
|
|
|
||
|
|
### 안드로이드 -> PC
|
||
|
|
|
||
|
|
- 푸시 알림에서 확인만 해 둔 대화가 PC에서 `방금 모바일에서 본 대화`로 우선 노출된다.
|
||
|
|
- 사진 업로드 직후 PC에서 해당 스레드가 자동 포커스된다.
|
||
|
|
|
||
|
|
### 다중 데스크톱 창
|
||
|
|
|
||
|
|
- 메인 창과 팝아웃 창이 동시에 열려 있어도 상태 충돌이 없어야 한다.
|
||
|
|
- 읽기 커서와 드래프트는 창 단위가 아니라 사용자 단위로 동기화되어야 한다.
|
||
|
|
|
||
|
|
## 세션 정책
|
||
|
|
|
||
|
|
## 인증 수명 정책
|
||
|
|
|
||
|
|
- 액세스 토큰은 짧게 가져가되, 리프레시 경로는 사용자가 느끼지 못하도록 매끄럽게 동작해야 한다.
|
||
|
|
- 세션 만료 예정 시 조용히 갱신을 시도하고 실패할 때만 명시적으로 안내한다.
|
||
|
|
- 사용자가 작성 중일 때는 로그인 강제 이동을 하지 않는다.
|
||
|
|
- 먼저 드래프트 보존, 그 다음 세션 복구, 마지막으로 재인증 순서를 따른다.
|
||
|
|
|
||
|
|
## 장치 등록 정책
|
||
|
|
|
||
|
|
- 각 기기는 `신뢰 장치`로 등록된다.
|
||
|
|
- 등록 시 보이는 항목:
|
||
|
|
- 장치명
|
||
|
|
- OS
|
||
|
|
- 최근 사용 시각
|
||
|
|
- 대략적 지역
|
||
|
|
- 사용자는 활성 장치를 한눈에 보고 원격 로그아웃할 수 있어야 한다.
|
||
|
|
|
||
|
|
## 안전 장치
|
||
|
|
|
||
|
|
- 낯선 장치 로그인 시 기존 기기에 약한 알림을 보낸다.
|
||
|
|
- 비밀번호 없는 Alpha 단계에서도 장치 목록과 강제 로그아웃은 제공한다.
|
||
|
|
- 민감한 장치 작업은 최근 인증 재확인을 붙인다.
|
||
|
|
|
||
|
|
## 상태 동기화 모델
|
||
|
|
|
||
|
|
### 반드시 동기화할 상태
|
||
|
|
|
||
|
|
- 마지막으로 보던 대화
|
||
|
|
- 각 대화의 읽음 위치
|
||
|
|
- 임시 저장된 초안
|
||
|
|
- 고정/무음/업무방/친한 대화 상태
|
||
|
|
- 최근 검색 기록
|
||
|
|
- 최근 연 파일과 링크
|
||
|
|
- 알림 선호도
|
||
|
|
|
||
|
|
### 로컬 전용으로 남길 상태
|
||
|
|
|
||
|
|
- 창 분할 비율
|
||
|
|
- 특정 기기의 로컬 UI 밀도 설정
|
||
|
|
- 최근 열어 본 팝아웃 창 배치
|
||
|
|
- 임시 개발용 진단 토글
|
||
|
|
|
||
|
|
### 서버 우선 상태
|
||
|
|
|
||
|
|
- 읽음 커서
|
||
|
|
- 초안 메타데이터
|
||
|
|
- 장치 목록
|
||
|
|
- 멀티 디바이스 충돌 해결 버전
|
||
|
|
|
||
|
|
## 충돌 해결 원칙
|
||
|
|
|
||
|
|
- 같은 대화 초안을 두 기기에서 동시에 수정하면 가장 최근 수정본을 기본 제안으로 둔다.
|
||
|
|
- 다만 최근 이전본도 `다른 기기 초안`으로 되돌릴 수 있어야 한다.
|
||
|
|
- 읽음 커서는 더 뒤로 간 위치를 우선으로 한다.
|
||
|
|
- 무음, 고정 상태는 마지막 변경 시각 기준으로 반영한다.
|
||
|
|
|
||
|
|
## UI 설계
|
||
|
|
|
||
|
|
## 데스크톱
|
||
|
|
|
||
|
|
- 사이드바 상단에 `다른 기기에서 이어보기` 섹션을 둘 수 있다.
|
||
|
|
- 설정의 계정 화면에서 장치 목록과 세션 상태를 보여 준다.
|
||
|
|
- 세션 이상 시 화면 전체 차단 대신 상단 배너를 사용한다.
|
||
|
|
- 팝아웃 창은 세션 만료 후에도 즉시 닫히지 않고 복구 시도 후 상태를 안내한다.
|
||
|
|
|
||
|
|
## 모바일 웹
|
||
|
|
|
||
|
|
- 로그아웃 공포를 줄이기 위해 `세션을 확인하는 중` 상태를 자연스럽게 보여 준다.
|
||
|
|
- 브라우저 재시작 후 첫 진입 시 마지막 대화를 가장 먼저 복원한다.
|
||
|
|
- 초안 복원은 배너보다 입력창 안의 작은 힌트로 노출한다.
|
||
|
|
|
||
|
|
## 안드로이드
|
||
|
|
|
||
|
|
- 푸시에서 진입한 대화가 이미 다른 기기에서 읽혔더라도 관련 문맥은 남겨 준다.
|
||
|
|
- 이미지 업로드, 카메라 전환, 백그라운드 재개 중 세션 갱신 실패를 견디는 설계가 필요하다.
|
||
|
|
|
||
|
|
## 업무적 소통 강화 장치
|
||
|
|
|
||
|
|
- 회의 전 `최근 사용 장치`를 기준으로 가장 적합한 기기에서 열어 보게 유도한다.
|
||
|
|
- 데스크톱에서는 회의방, 작업방, 나에게 보내기 메모를 서로 다른 창으로 띄울 수 있어야 한다.
|
||
|
|
- 모바일에서 `나중에 PC에서 정리` 플래그를 남기면 PC에서 바로 보인다.
|
||
|
|
- 링크와 파일은 기기 전환 후에도 같은 문맥에서 이어서 열린다.
|
||
|
|
|
||
|
|
## 친근한 소통 강화 장치
|
||
|
|
|
||
|
|
- 사진과 음성 중심 대화는 모바일에서 이어 쓰기 쉬워야 한다.
|
||
|
|
- 데스크톱에서 읽던 사적 대화는 모바일에서 `가볍게 이어보기` 수준으로 복원한다.
|
||
|
|
- 친구 대화의 경우 장치 목록 노출이 과도하게 불안감을 주지 않도록 문구를 차분하게 설계한다.
|
||
|
|
|
||
|
|
## 실패 시나리오
|
||
|
|
|
||
|
|
- 세션 갱신 실패
|
||
|
|
- 오프라인 상태에서 앱 재실행
|
||
|
|
- 장치 시간이 어긋난 상태
|
||
|
|
- 장치 간 읽음 커서 지연
|
||
|
|
- 초안 충돌
|
||
|
|
- 서버 점검 또는 배포 직후 재연결 실패
|
||
|
|
|
||
|
|
각 실패는 `사용자에게 무슨 일이 일어났는지`, `다음에 무엇이 보장되는지`, `무엇을 눌러야 하는지`가 1문장 안에 설명되어야 한다.
|
||
|
|
|
||
|
|
## QA 기준
|
||
|
|
|
||
|
|
- 토큰 만료 후 재진입 시 90% 이상이 재로그인 없이 복구돼야 한다.
|
||
|
|
- 작성 중 초안 손실률은 0에 가깝게 관리해야 한다.
|
||
|
|
- 기기 전환 후 마지막 대화 복원 성공률을 핵심 KPI로 둔다.
|
||
|
|
- 모바일 웹은 브라우저 종료/재개, PWA 홈 진입, 백그라운드 복귀를 반드시 반복 검증한다.
|
||
|
|
|
||
|
|
## 단계별 범위
|
||
|
|
|
||
|
|
### Alpha
|
||
|
|
|
||
|
|
- 장치 등록
|
||
|
|
- 읽음 커서 동기화
|
||
|
|
- 마지막 대화 복원
|
||
|
|
- 로컬 초안 보존
|
||
|
|
|
||
|
|
### Beta
|
||
|
|
|
||
|
|
- 서버 초안 동기화
|
||
|
|
- 장치 목록/원격 로그아웃
|
||
|
|
- 세션 자동 갱신
|
||
|
|
- 모바일에서 PC로 이어쓰기 제안
|
||
|
|
|
||
|
|
### Later
|
||
|
|
|
||
|
|
- 패스키 기반 신뢰 장치
|
||
|
|
- 다중 창/다중 계정 고급 정책
|
||
|
|
- 작업 흐름 기반 장치 추천
|
||
|
|
|
||
|
|
## 완료 기준
|
||
|
|
|
||
|
|
- 사용자가 `어느 기기에서 열어도 이어진다`고 느껴야 한다.
|
||
|
|
- 세션 만료는 보안 문제로는 엄격하되, 사용자 체감으로는 거의 드러나지 않아야 한다.
|
||
|
|
- 기기 전환이 불편해서 특정 메신저를 포기하지 않도록 해야 한다.
|