# Base 스냅샷

- Human documentation: [https://docs.univer.ai/ko-KR/guides/bases/model/base-snapshot](https://docs.univer.ai/ko-KR/guides/bases/model/base-snapshot)

- Agent Markdown: [https://docs.univer.ai/ko-KR/guides/bases/model/base-snapshot.md](https://docs.univer.ai/ko-KR/guides/bases/model/base-snapshot.md)

- Requested language: `ko-KR`

- Content language: `ko-KR`

- Documentation version: `1.0.4`

- Source: [bases/model/base-snapshot.ko-KR.mdx](https://github.com/dream-num/documentation/blob/dev/content/guides/bases/model/base-snapshot.ko-KR.mdx)

---

## IBaseSnapshot

`IBaseSnapshot`은 Univer Bases에서 사용하는 영속화 형식입니다. 테이블, 테이블 순서, 스키마 버전, 타임스탬프, 선택적 리비전 메타데이터를 포함한 하나의 Base 단위를 설명합니다.

### 속성

| 속성            | 유형                                 | 설명                                |
| ------------- | ---------------------------------- | --------------------------------- |
| id            | `string`                           | Base 단위의 고유 ID입니다.                |
| name          | `string`                           | Base 이름입니다.                       |
| schemaVersion | `number`                           | 스냅샷 스키마 버전입니다.                    |
| tables        | `Record\<string, ITableSnapshot\>` | 테이블 ID를 키로 사용하는 테이블입니다.           |
| tableOrder    | `string[]`                         | 정렬된 테이블 ID 목록입니다.                 |
| createdAt     | `number`                           | 생성 타임스탬프입니다.                      |
| updatedAt     | `number`                           | 업데이트 타임스탬프입니다.                    |
| createdBy?    | `string`                           | 생성자 ID입니다.                        |
| rev?          | `number`                           | 영속화 또는 협업 계층에서 사용하는 선택적 리비전 값입니다. |

## 최소 스냅샷

```ts
const baseSnapshot = {
  id: 'base-1',
  name: 'Product tracker',
  schemaVersion: 1,
  tableOrder: ['tasks'],
  tables: {
    tasks: {
      id: 'tasks',
      name: 'Tasks',
      primaryFieldId: 'title',
      fieldOrder: ['title', 'status'],
      fields: {
        title: { id: 'title', name: 'Title', type: 'text', config: {} },
        status: { id: 'status', name: 'Status', type: 'singleSelect', config: {} },
      },
      recordOrder: ['rec-1'],
      records: {
        'rec-1': {
          id: 'rec-1',
          values: { title: 'Write docs', status: 'In progress' },
          orderKey: 'a0',
          createdAt: Date.now(),
          updatedAt: Date.now(),
        },
      },
      views: {},
      viewOrder: [],
    },
  },
  createdAt: Date.now(),
  updatedAt: Date.now(),
}
```

## 사용법

`IBaseSnapshot`은 주로 다음 용도로 사용됩니다.

1. `UniverInstanceType.UNIVER_BASE` 단위를 생성합니다.
2. 구조화된 데이터를 영속화하고 복원합니다.
3. 서버 측 처리를 위한 데이터를 준비합니다.
4. 협업 서비스와 가져오기/내보내기 서비스 간에 데이터를 전송합니다.

> [!WARNING]
> 스냅샷 객체는 영속화 데이터입니다. Base가 실행된 후에는 스냅샷 객체를 직접 변경하지 말고 Facade API를 사용하세요.

## 저장 및 복원

Facade `save()`는 대시보드와 로컬 댓글 등 등록된 플러그인 리소스를 포함합니다. `saveToBackend`는 애플리케이션의 저장 함수입니다.

```ts
const base = univerAPI.getActiveBase()
if (!base) throw new Error('Open a Base first')
await saveToBackend(base.save())
```

새 편집기에 같은 플러그인을 등록한 뒤 `univerAPI.createBase(savedSnapshot)`을 호출하세요. `tables`만 저장하거나 실행 중인 모델 스냅샷을 직접 수정하지 마세요.
