# 데이터 스냅샷

스냅샷은 특정 시점의 rowData를 보관하고 현재 데이터 또는 다른 스냅샷과 비교합니다. 열 너비·필터·포커스를 저장하는 화면 상태 API와는 목적이 다릅니다.

Canonical: https://grid.syidax.com/ko/docs/features/snapshots/

<a id="understand"></a>

## 동작 원리와 선택 기준

대량 수정 전 기준점을 만들고 수정 후 추가·변경·삭제를 비교하는 데 적합합니다. 보관 개수는 제한되어 있고 페이지를 벗어난 뒤 영구히 남는 서버 백업은 아닙니다.

코드의 grid는 설치와 연결 장에서 준비한 Grid 요소입니다. 예제마다 필요한 데이터·설정을 확인하고, 코드에서 소개하는 앱 함수와 서버 주소는 프로젝트에 맞게 구현하세요.

- [설치와 연결 · 공통 예제 데이터](https://grid.syidax.com/ko/docs/guides/getting-started.md)

<a id="example-1"></a>

## 예제 1. 수정 전 기준점 만들기

일괄 작업을 시작하기 전에 이름을 붙여 저장합니다.

```javascript
grid.maxSnapshots = 10;
const before = await grid.captureSnapshot('수량 조정 전');
console.log(before);
```

결과 확인: 이후 비교나 복원에 사용할 ID가 반환됩니다.

<a id="example-2"></a>

## 예제 2. 현재 데이터와 비교

기준점 이후 편집을 마친 상태에서 차이를 확인합니다.

```javascript
console.log(await grid.diffSnapshots(before));
```

결과 확인: 두 번째 ID를 생략하면 현재 데이터와 비교합니다. 두 저장 시점끼리 비교하려면 두 번째 스냅샷 ID를 전달합니다.

<a id="example-3"></a>

## 예제 3. 되돌리기와 정리

사용자가 복원을 선택했을 때 실제 결과를 확인합니다.

```javascript
const restored = await grid.restoreSnapshot(before);
console.log(restored, await grid.listSnapshots());
```

결과 확인: 복원은 현재 데이터 값을 바꿉니다. 불필요한 기준점은 deleteSnapshot(id)로 제거하고 서버 변경을 되돌려야 한다면 별도의 저장 작업을 수행합니다.

<a id="pitfalls"></a>

## 조합할 때와 문제를 해결할 때

행 ID를 안정적으로 유지해야 어떤 행이 추가·수정·삭제되었는지 의미 있게 비교할 수 있습니다.

스냅샷 복원이 열 배치·필터까지 되돌린다고 안내하지 마세요. 화면 설정 복원은 getState()/setState()를 사용합니다.

<a id="related-api"></a>

## 이 기능에 사용하는 API

- [maxSnapshots](https://grid.syidax.com/ko/docs/options/maxSnapshots.md) — 메모리에 보관할 데이터 스냅샷 수의 상한입니다. 오래된 스냅샷이 제거될 수 있습니다.
- [captureSnapshot](https://grid.syidax.com/ko/docs/methods/captureSnapshot.md) — 현재 원본 데이터의 이름 있는 스냅샷을 만들고 ID를 반환합니다. 화면 열 배치 저장과는 다릅니다.
- [listSnapshots](https://grid.syidax.com/ko/docs/methods/listSnapshots.md) — 보관 중인 데이터 스냅샷의 메타데이터 목록을 읽습니다.
- [deleteSnapshot](https://grid.syidax.com/ko/docs/methods/deleteSnapshot.md) — 지정한 데이터 스냅샷을 삭제하고 성공 여부를 반환합니다. 현재 데이터는 변경하지 않습니다.
- [diffSnapshots](https://grid.syidax.com/ko/docs/methods/diffSnapshots.md) — 저장 시점 두 개 또는 저장 시점과 현재 데이터의 차이를 비교합니다. 두 번째 ID를 생략하면 현재 데이터와 비교합니다.
- [restoreSnapshot](https://grid.syidax.com/ko/docs/methods/restoreSnapshot.md) — 스냅샷의 원본 데이터로 복원합니다. 서버 저장이나 화면 상태 복원까지 자동 수행하지 않습니다.
- [snapshotCaptured](https://grid.syidax.com/ko/docs/events/snapshotCaptured.md) — 데이터 스냅샷이 만들어졌을 때 발생합니다. ID·이름·행 수로 저장 시점을 표시합니다.
- [snapshotRestored](https://grid.syidax.com/ko/docs/events/snapshotRestored.md) — 데이터 스냅샷 복원이 완료되었을 때 발생합니다. 앱 서버 저장까지 완료된 의미는 아닙니다.

<a id="next"></a>

## 함께 읽기

- [행·열·ID의 관계](https://grid.syidax.com/ko/docs/guides/concepts.md)
- [결과와 이벤트 연결](https://grid.syidax.com/ko/docs/guides/data-event-access.md)
- [Features에서 살펴보기](https://grid.syidax.com/grid/snapshots) — 직접 체험 가능한 범위는 해당 가이드에 안내되어 있습니다.
