Skip to content

Solo vs Live 모드

ThinkERD의 두 가지 동기화 모드를 상세히 설명합니다.

Solo Mode

**혼자 편집**할 때 사용되는 기본 모드입니다.

특징

  • REST API 동기화 — 변경사항을 서버에 REST API로 저장
  • IndexedDB 영속화 — 로컬 브라우저에 데이터를 캐싱하여 오프라인에서도 작업 가능
  • BroadcastChannel — 같은 브라우저의 여러 탭 간 동기화
  • WebSocket 미사용 — 서버 리소스를 절약

Tab Leader Election

같은 사용자가 여러 탭에서 같은 다이어그램을 열면, **하나의 탭만 Leader**로 선출되어 서버와 통신합니다. 나머지 탭은 Follower로서 Leader를 통해 간접 동기화합니다.

graph TB
    Server["🖥️ Server"]
    Leader["👑 Tab 1 (Leader)"]
    F1["📄 Tab 2 (Follower)"]
    F2["📄 Tab 3 (Follower)"]

    Leader <-->|REST API| Server
    Leader <-->|BroadcastChannel| F1
    Leader <-->|BroadcastChannel| F2

    style Leader fill:#fef3c7,stroke:#d97706
    style F1 fill:#f3f4f6,stroke:#9ca3af
    style F2 fill:#f3f4f6,stroke:#9ca3af

Live Mode

**2명 이상이 동시에 편집**할 때 자동으로 전환되는 모드입니다.

특징

  • Yjs (CRDT) — Conflict-free Replicated Data Type으로 충돌 없는 동시 편집
  • WebSocket — 실시간 양방향 통신
  • Awareness — 다른 사용자의 커서, 선택 영역, 이동 중인 노드를 실시간 공유
  • 자동 병합 — 같은 속성을 동시에 수정해도 데이터 손실 없이 병합

전환 흐름

이벤트 동작
다른 사용자 진입 Presence Monitor(SSE)가 감지 → upgradeToCollab()
모든 사용자 퇴장 60초 카운트다운 → downgradeToSolo()

60초 유예

다른 사용자가 나갔다가 바로 돌아오는 경우를 대비하여, Solo 모드로 전환하기 전에 **60초의 유예 시간**을 둡니다.

모드 비교

항목 Solo Mode Live Mode
연결 REST API WebSocket
동기화 저장 시점 실시간
서버 비용 낮음 높음
탭 간 동기 BroadcastChannel WebSocket + BroadcastChannel
커서 공유
충돌 해결 Last-write-wins CRDT 자동 병합
사용 비율 ~99% ~1%