Skip to Content
에디터 기능버전 관리 및 복원

버전 관리 및 복원

에피소드와 위키 문서의 특정 시점을 버전으로 저장하고, 비교하거나 복원할 수 있는 기능입니다.

사용 가능 편집기

에피소드

위키 문서

플롯 캔버스

메모

개요

버전 관리는 문서의 현재 내용을 별도의 버전으로 저장해두는 기능입니다. 큰 수정을 하기 전후에 버전을 남겨두면, 나중에 어떤 내용이 바뀌었는지 비교하거나 이전 상태로 되돌릴 수 있습니다.

에피소드와 위키 문서에서 사용할 수 있습니다.

에피소드 버전 관리

에피소드는 자동 버전과 수동 버전을 모두 지원합니다.

  • 자동 저장 버전: 편집 중 일정 시간이 지나면 자동으로 생성됩니다.
  • 수동 생성 버전: 버전 관리하기에서 직접 만들거나, 편집 중 Ctrl + S로 생성할 수 있습니다.
  • 생성 간격 설정: 에피소드 버전 설정에서 자동 생성 여부와 생성 간격을 조정할 수 있습니다.
  • 생성 제한: 버전은 너무 짧은 시간에 연속으로 만들 수 없으며, 수동 생성은 30초 간격 제한이 있습니다.

클라우드 소설의 자동 생성 백업은 일정 기간이 지나면 자동으로 정리될 수 있습니다. 중요한 지점은 이름을 붙인 수동 버전으로 남겨두는 것을 권장합니다.

위키 버전 관리

위키 문서는 수동 버전 생성을 지원합니다. 문서 구조를 크게 바꾸거나 중요한 설정을 고치기 전후에 수동 버전을 만들어두면, 나중에 비교하거나 복원하기 쉽습니다.

위키 목록이나 위키 편집기 메뉴에서 버전 관리하기를 열 수 있습니다.

버전 비교

버전 목록에서 항목을 선택하면 비교 화면을 열 수 있습니다. 비교 기준은 다음과 같습니다.

  • 이전 버전: 직전 버전에서 선택한 버전까지의 변경사항을 확인합니다.
  • 복원 기준: 현재 문서에서 선택한 버전으로 되돌릴 때의 차이를 확인합니다.
  • 누적 변경: 선택한 버전에서 현재 문서까지의 변경사항을 확인합니다.

비교 화면에서는 선택한 버전의 글자 수, 생성 시간, 버전 유형도 함께 확인할 수 있습니다.

복원과 관리

버전 비교 화면에서는 다음 작업을 할 수 있습니다.

  • 선택한 버전으로 복원
  • 수동 버전 이름 변경
  • 버전 삭제
  • 버전 내용 복사
  • 버전 내용을 텍스트 파일로 다운로드

버전을 복원하면 현재 문서 내용이 선택한 버전의 내용으로 바뀝니다. 복원 과정에서는 현재 상태를 안전 백업으로 남기지만, 복원 전 비교 화면에서 차이를 먼저 확인해주세요.

로컬 스펙

로컬 저장소 소설에서는 에피소드와 위키 문서의 버전도 소설 프로젝트 폴더 안에 JSON 파일로 저장됩니다. 일반적인 버전 생성, 비교, 복원은 앱 안에서 처리하는 것을 권장하지만, 프로젝트 폴더를 직접 백업하거나 점검하는 고급 로컬 사용자라면 아래 구조를 참고할 수 있습니다.

구분경로 예시확장자
에피소드 버전{소설 루트}/episodes/snapshots/{episodeId}/{snapshotId}.mvles*.mvles
위키 버전{소설 루트}/wiki/snapshots/{wikiPageId}/{snapshotId}.mvlws*.mvlws
  • 버전 파일은 각 버전마다 별개의 JSON 파일로 저장됩니다.
  • {episodeId} 또는 {wikiPageId} 폴더 아래에 해당 문서의 버전 파일이 모입니다.
  • 파일명은 버전 ID입니다. {snapshotId}.mvles, {snapshotId}.mvlws 파일명과 상위 문서 ID 폴더명은 직접 수정하지 않는 것이 좋습니다.
  • 저장 중에는 *.mvles.tmp, *.mvlws.tmp 형식의 임시 파일이 잠시 생길 수 있습니다. 임시 파일은 버전 목록에서 읽지 않습니다.
  • 직접 백업할 때는 snapshots 폴더만 따로 옮기기보다 대응되는 episodes/*.mvle, wiki/*.mvlw 문서 파일과 함께 보관하는 것이 안전합니다.
  • 클라우드 소설의 서버 버전은 이 로컬 경로에 직접 저장되지 않습니다. 클라우드 문서의 로컬 백업 흐름은 오프라인 모드를, 서버 판본과 로컬 백업의 차이 확인은 판본 교차 검증을 참고해주세요.

버전 파일은 대략 다음 구조를 가집니다.

type SnapshotReason = "merge" | "manual" | "autosave" | "restore_backup" export interface LocalEpisodeSnapshot { id: string // 버전 ID episodeId: string // 에피소드 ID reason: SnapshotReason // 버전 생성 사유 name?: string | null // 수동 버전 이름 blocks: LocalSnapshotBlock[] // 버전 생성 시점의 단락 목록 blockCount: number // 단락 수 contentLength: number // 공백 제외 글자 수 contentLengthWithSpaces: number // 공백 포함 글자 수 contentVersion?: number | null // 내용 버전, 없을 수 있음 createdAt: string // 생성 시간 (ISO 8601 형식) } export interface LocalWikiPageSnapshot { id: string // 버전 ID wikiPageId: string // 위키 문서 ID reason: SnapshotReason // 버전 생성 사유 name?: string | null // 수동 버전 이름 blocks: LocalSnapshotBlock[] // 버전 생성 시점의 단락 목록 blockCount: number // 단락 수 contentLength: number // 공백 제외 글자 수 contentLengthWithSpaces: number // 공백 포함 글자 수 contentVersion?: number | null // 내용 버전, 없을 수 있음 createdAt: string // 생성 시간 (ISO 8601 형식) } export interface LocalSnapshotBlock { id: string // 단락 ID text: string // 단락의 평문 텍스트 content: unknown[] // 에디터 내부 문서 조각 blockType: string // 단락 종류 attr?: unknown | null // 단락 속성 order: number // 문서 내 순서 updatedAt?: string // 단락 수정 시간 }

사용 가능 버전

v2.9.0 ↑

문서 최종 갱신 버전

v2.9.0

Last updated on