# 데이터 매니저 기반 모델

## Content

데이터 매니저 기반 협업 모델은 SpreadJS 데이터 매니저에서 관리하는 테이블 상태가 실시간 협업에 어떻게 참여하는지를 정의합니다.

데이터 매니저는 프런트엔드 데이터 모델링 및 전송 계층입니다.
이를 통해 애플리케이션은 다음 작업을 수행할 수 있습니다.

* 테이블 정의
* 데이터 원본 구성
* 테이블 간 관계 설정
* 뷰 정의
* 로컬 또는 원격 데이터 작업 조정

데이터 매니저는 구조화된 테이블 상태를 관리합니다.
직접적인 사용자 상호 작용 기능은 제공하지 않습니다.

>type=note
> 현재 데이터 매니저 기반 협업은 테이블 시트를 통해서만 지원됩니다.

## 협업 경계

협업은 다음 조건을 만족하는 상태만 동기화합니다.

* 데이터 매니저 런타임 내에 저장되는 상태
* 직렬화 가능한 상태
* 클라이언트 간 결정적으로 재생 가능한 상태

외부 시스템에 위임된 상태는 동기화되지 않습니다.

## 동기화되는 상태

### 1. 테이블 구조 및 구성

다음과 같은 테이블 수준 상태가 동기화됩니다.

* 테이블 정의
* 열 정의 및 메타데이터
* 뷰 정의
* 관계
* 계층 구조 구성
* 테이블 옵션 및 레이아웃 구성
* 직렬화 가능한 데이터 원본 구성

위 구조 상태에 대한 모든 변경 사항은 협업에 참여합니다.

### 2. 데이터 집합 상태(로컬 데이터만 해당)

데이터 집합 변경 사항은 테이블이 JSON 기반 메모리 내 데이터를 사용하는 `data` 옵션을 사용할 때만 동기화됩니다.

지원 형식:

* `data` (JSON 개체)

이 모드에서는 다음 데이터 집합 변경 사항이 협업에 참여합니다.

* 레코드 값 업데이트
* 레코드 추가 및 삭제
* 열 구조 변경
* 계층 구조 변경
* 행 고정 및 고정 해제 상태

이 모드에서는 데이터 집합 상태가 데이터 매니저에 의해 완전히 관리되며 협업 스냅샷에 포함됩니다.

## 동기화되지 않는 항목

다음 시나리오는 **데이터 집합 동기화**에 참여하지 않습니다.

### 원격 데이터 원본(URL 기반)

URL 기반 전송 옵션을 사용하는 `dataSourceOption.remote`( `autoSync: true` 포함)를 사용하는 경우:

* 테이블 편집은 지원됩니다.
* 데이터 매니저는 변경 사항을 원격 서비스로 전송합니다.
* 데이터 집합 변경 사항은 협업 시스템에 의해 동기화되지 않습니다.

데이터 일관성은 백엔드 서비스에 위임됩니다.
구성 상태는 직렬화 가능하다면 계속 동기화됩니다.

### 원격 데이터 원본(함수 처리기)

다음과 같은 함수 기반 처리기를 사용하는 경우:

```typescript
GC.Data.RemoteReadHandler
GC.Data.RemoteChangeHandler
```

* 구성 정보를 직렬화할 수 없습니다.
* 해당 테이블은 협업에 참여하지 않습니다.

### CSV 또는 XML 데이터

데이터 집합 콘텐츠가 CSV 또는 XML 형식으로 초기화된 경우:

* 구성 상태는 동기화됩니다.
* 데이터 집합 변경 사항은 동기화되지 않습니다.

## 특별 규칙

### 현재 사용자 표시 없음

이 모델에서는 현재 사용자 표시(Presence) 기능(선택 영역 또는 커서 표시 등)을 지원하지 않습니다.

### 실행 취소 동작

동기화되는 상태에 대해서는 실행 취소를 지원합니다.

>type=note
> 일관성을 유지하기 위해 원격 작업을 수신하면 로컬 실행 취소 스택이 초기화됩니다.

### 조각 저장(Fragment Storage)

대규모 데이터 집합 상태는 스냅샷 크기 최적화를 위해 조각(Fragment)으로 분리하여 저장될 수 있습니다.