8.1 KiB
8.1 KiB
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
- 패스키 기반 신뢰 장치
- 다중 창/다중 계정 고급 정책
- 작업 흐름 기반 장치 추천
완료 기준
- 사용자가
어느 기기에서 열어도 이어진다고 느껴야 한다. - 세션 만료는 보안 문제로는 엄격하되, 사용자 체감으로는 거의 드러나지 않아야 한다.
- 기기 전환이 불편해서 특정 메신저를 포기하지 않도록 해야 한다.