# 뮤블 동기화 시스템 (/safeguards/sync-system)





**에디터 지원 환경:** [에피소드](/episode) (지원), [위키](/wiki) (지원), [메모](/memo) (미지원), [캔버스](/canvas) (지원)

**이런 경우에 사용해보세요**

* 입력한 원고가 언제 저장되는지 알고 싶나요?
* 여러 기기나 협업자가 같은 클라우드 소설을 수정할 때 변경 사항이 어떻게 반영되는지 궁금한가요?
* 동기화 표시등이나 충돌 경고가 나타났을 때 어떻게 대응해야 할지 알고 싶나요?

뮤블은 별도의 저장 버튼을 누르지 않아도 에피소드와 위키의 단락, 플롯 캔버스 변경을 자동으로 저장합니다. 클라우드 소설에서는 변경된 부분을 서버와 동기화하고, 로컬 소설에서는 같은 동기화 흐름을 기기의 프로젝트 파일에 반영합니다.

## 단락 단위 동기화 [#단락-단위-동기화]

에피소드와 위키는 문서 전체를 매번 덮어쓰지 않고 변경된 [단락](/block)을 중심으로 동기화합니다. 서로 다른 단락을 수정한 변경은 함께 반영할 수 있어, 긴 원고 전체를 다시 전송하는 부담과 동시 작업 충돌 범위를 줄입니다.

### 문서 단위 LWW와의 차이 [#문서-단위-lww와의-차이]

LWW(Last Write Wins)는 여러 변경 가운데 **마지막으로 기록된 변경을 남기는 방식**입니다. 문서 전체에 LWW를 적용하면 서로 다른 위치를 고쳤더라도 마지막에 저장한 문서 사본이 앞서 저장된 사본 전체를 덮어쓸 수 있습니다.

예를 들어 집에서는 노트북으로 첫 장면을 다듬고, 이동 중에는 태블릿에 남아 있던 같은 원고를 열어 마지막 장면을 고쳤다고 가정해 보겠습니다. 문서 단위 LWW에서는 태블릿이 나중에 동기화될 때 노트북에서 고친 첫 장면까지 태블릿의 이전 내용으로 돌아갈 수 있습니다. 뮤블은 첫 장면과 마지막 장면을 서로 다른 단락의 변경으로 판단하므로 두 수정 사항을 함께 반영할 수 있습니다.

**문서 단위 LWW와 뮤블 동기화 비교:** 노트북에서 도입부를 고치고 태블릿에서 결말을 고친 상황에서 문서 단위 LWW는 마지막에 저장한 문서 전체가 남으므로 다른 기기의 도입부 수정까지 사라질 수 있습니다. 뮤블은 노트북의 도입부 단락과 태블릿의 결말 단락을 각각 비교해 두 변경을 함께 보존합니다. 같은 단락을 동시에 고치면 글자 단위로 합치지 않고 더 최신인 변경을 반영하며 충돌 가능성을 경고합니다. LWW는 Last Write Wins, 즉 마지막 변경을 남기는 방식입니다.

이 구조는 여러 기기에서 번갈아 집필하거나 협업자가 서로 다른 부분을 고칠 때 특히 유리합니다. 충돌 판단 범위가 문서 전체가 아니라 실제로 수정한 단락으로 줄어들기 때문입니다. 다만 같은 단락을 동시에 수정하면 글자 단위로 내용을 합치지 않으며, 더 최신인 변경을 반영하고 충돌 가능성을 경고합니다.

많은 단락이 한꺼번에 바뀌면 요청을 여러 묶음으로 나누어 처리하며 `대량 동기화 중` 안내가 표시될 수 있습니다. 완료되기 전에는 문서를 닫거나 앱을 종료하지 않는 편이 안전합니다.

## 동기화등 [#동기화등]

에피소드와 위키 편집기, 플롯 캔버스 상단의 작은 **동기화등**에서 현재 저장 상태를 확인할 수 있습니다. 점 위에 마우스를 올리면 각 상태의 설명도 표시됩니다.

| 색상                                             | 상태        | 의미                                                                          |
| ---------------------------------------------- | --------- | --------------------------------------------------------------------------- |
| <span className="text-gray-400">●</span> 회색    | 입력 대기     | 사용자가 입력을 이어가는 동안 기다리고 있습니다. 입력이 잠시 멈추면 변경 사항을 저장하기 시작합니다.                   |
| <span className="text-blue-500">●</span> 파란색   | 저장 중      | 변경 사항을 저장하거나 서버와 동기화하고 있습니다.                                                |
| <span className="text-green-500">●</span> 초록색  | 최신 상태     | 현재까지의 변경 사항이 정상적으로 반영되었습니다.                                                 |
| <span className="text-red-500">●</span> 빨간색    | 오류        | 동기화 과정에서 오류가 발생했습니다. 인터넷 연결과 로그인 상태를 확인하고, 오류가 계속되면 작업 내용을 다른 곳에 복사해 보호하세요. |
| <span className="text-yellow-500">●</span> 노란색 | 알 수 없는 상태 | 앱이 상태를 정상적으로 판별하지 못한 예외 상황입니다. 계속 표시되면 문서를 안전하게 복사한 뒤 앱을 다시 열어보세요.          |

뮤블은 저장할 때마다 화면을 스피너로 가리지 않으면서도 내부 동기화 상태를 숨기지 않기 위해 동기화등을 사용합니다. 작은 점의 색만으로 집필을 방해하지 않고 대기·저장·완료·오류를 계속 확인할 수 있도록 만든 표시 방식입니다.

저장되지 않은 변경이 남은 채 페이지를 벗어나려 하면 확인 창이 표시됩니다. 이때는 `머무르기`를 선택하고 동기화가 끝나는지 확인하는 편이 안전합니다.

### 동기화등 숨기기 [#동기화등-숨기기]

에피소드 편집기의 동기화등이 필요하지 않다면 `뮤블 설정하기` → `에피소드` → `에피소드 조작`에서 **동기화 상태 표시등 숨기기**를 켤 수 있습니다. 다만 오류를 알아차릴 수 있는 가장 빠른 표시이므로 일반적인 사용에서는 계속 보이게 두는 것을 권장합니다. 이 설정은 현재 에피소드 편집기의 동기화등에만 적용됩니다.

## 다른 기기의 변경 [#다른-기기의-변경]

다른 기기나 협업자가 문서를 수정하면 현재 화면에도 새 변경이 반영됩니다. 동시에 같은 단락을 고치는 등 일부 변경을 안전하게 반영하지 못한 경우에는 경고가 표시될 수 있습니다. 새로고침한 뒤 해당 단락과 최근 [버전](/safeguards/snapshot)을 확인하세요.

> 동기화는 여러 저장 위치의 최신 내용을 맞추는 기능이므로 삭제나 잘못된 수정도 함께 반영될 수 있습니다. 이전 상태로 돌아가려면 [버전 관리 및 복원](/safeguards/snapshot)을, 서버와 별개의 사본이 필요하면 [자동 로컬 백업](/safeguards/automatic-local-backup)이나 [전체 내보내기](/novel/export-novel)를 사용하세요.

> **제작자의 말**
>
> [#제작자의-말]
> 
> 실시간 공동 편집만 놓고 보면 CRDT처럼 여러 사용자의 글자 단위 변경을 자동으로 합치는 방식이 더 강력합니다. 하지만 뮤블의 초기 설계에서 동시 편집은 핵심 목표가 아니었습니다. 한 작가가 여러 기기를 오가며 긴 원고를 안전하게 저장하는 상황이 더 우선이었어요.
> 
> CRDT를 제대로 적용하려면 최종 문서뿐 아니라 변경 연산과 병합 상태를 저장 형식 전반에서 다뤄야 합니다. 이 구조는 실시간 협업에는 유리하지만, 문제가 생겼을 때 사람이 저장 데이터를 직접 확인하고 판본을 복구하거나 원인을 추적하기는 더 어려워집니다. 당시 뮤블의 사용 규모와 협업 범위에서는 저장 구조와 복구 도구까지 복잡하게 만드는 오버엔지니어링이 될 가능성도 컸습니다.
> 
> 그래서 뮤블은 원고의 의미 있는 단위인 단락을 개별 데이터로 저장하고, 바뀐 단락만 시간과 문서 버전을 바탕으로 반영하는 방식을 고안했습니다. 실시간 CRDT만큼 세밀하게 동시 입력을 합치지는 않지만, 문서 전체가 덮어써지는 위험을 줄이면서 저장 데이터와 복구 과정을 비교적 단순하게 유지할 수 있습니다.
> 
> 이후 협업 기능도 이 토대 위에 구현했습니다. 현재는 서로 다른 단락의 변경을 함께 반영하고 동시 작업이나 판본 차이를 감지해 경고하는 수준으로 방어할 수 있지만, 여러 사람이 같은 문장을 실시간으로 함께 쓰는 편집기를 목표로 하지는 않습니다.

## 관련 설정 [#관련-설정]

다음 항목은 문제를 진단한 뒤에만 바꾸는 고급 설정입니다. 일반적인 사용에서는 기본값을 권장합니다.

| 설정 및 위치 | 기본값 | 동작 |
| --- | --- | --- |
| 동기화 상태 표시등 숨기기 — 위치: 뮤블 설정하기 → 에피소드 → 에피소드 조작 → 동기화 상태 표시등 숨기기 | 꺼짐 | 에피소드 편집기 상단의 동기화등을 숨깁니다. 오류 상태도 보이지 않으므로 일반적으로는 권장하지 않습니다. |
| 동시 클라이언트 작업 경고 무시 — 위치: 뮤블 설정하기 → 에피소드 → 에피소드 조작 → 동기화 고급 → 동시 클라이언트 작업 경고 무시 | 꺼짐 | 서버가 동시 변경을 병합했을 때 표시되는 경고를 숨깁니다. |
| 다른 클라이언트 변경사항 무시 — 위치: 뮤블 설정하기 → 에피소드 → 에피소드 조작 → 동기화 고급 → 다른 클라이언트 변경사항 무시 | 꺼짐 | 다른 클라이언트의 변경이 감지되어도 현재 문서를 자동으로 다시 불러오지 않습니다. |
| 대량 동기화 메시지 숨기기 — 위치: 뮤블 설정하기 → 에피소드 → 에피소드 조작 → 동기화 고급 → 대량 동기화 메시지 숨기기 | 꺼짐 | 많은 변경을 나누어 동기화할 때 진행 안내를 숨깁니다. |
| 동시 클라이언트 작업 경고 무시 — 위치: 뮤블 설정하기 → 위키 → 위키 조작 → 동기화 고급 → 동시 클라이언트 작업 경고 무시 | 꺼짐 | 서버가 동시 변경을 병합했을 때 표시되는 경고를 숨깁니다. |
| 다른 클라이언트 변경사항 무시 — 위치: 뮤블 설정하기 → 위키 → 위키 조작 → 동기화 고급 → 다른 클라이언트 변경사항 무시 | 꺼짐 | 다른 클라이언트의 변경이 감지되어도 현재 문서를 자동으로 다시 불러오지 않습니다. |
| 대량 동기화 메시지 숨기기 — 위치: 뮤블 설정하기 → 위키 → 위키 조작 → 동기화 고급 → 대량 동기화 메시지 숨기기 | 꺼짐 | 많은 변경을 나누어 동기화할 때 진행 안내를 숨깁니다. |

## 관련 기능 [#관련-기능]

- [오프라인 모드](/safeguards/offline-mode): 연결이 끊겼을 때 열어 둔 클라우드 문서의 변경분을 임시 보관하거나 데스크톱에 저장된 백업을 읽기 전용으로 엽니다.
- [버전 관리 및 복원](/safeguards/snapshot): 에피소드와 위키 문서, 플롯 캔버스의 버전을 자동 또는 수동으로 저장하고 이전 상태를 확인하거나 복원합니다.
- [판본 교차 검증](/safeguards/version-cross-check): 클라우드 문서를 열 때 서버 판본과 기기의 로컬 백업을 비교해 서로 어긋났을 가능성을 알려주는 기능입니다.

***

- **문서 최종 갱신 버전:** v2.11.5
