# 동시 작업 편집 상태

## Content

여러 사용자가 동일한 워크시트를 동시에 편집할 경우, 한 사용자의 변경 사항이 다른 사용자의 작업(예: 행 삭제, 열 정렬)으로 인해 덮어써지거나 숨겨지는 등의 충돌이 발생할 수 있습니다.
`spread-sheets-collaboration-addon` 패키지에서 제공하는 **동시 작업 편집 상태(Collaboration Editing Status)** 기능은 이러한 예기치 않은 결과를 방지하기 위해 실시간 편집 상태를 추적합니다. 충돌 작업(예: 행 추가, 열 숨기기)이 현재 사용자의 편집 상태에 영향을 미치면, 편집 상태를 업데이트하고 UI가 올바르게 표시되도록 보장합니다.

>type=note
> 이 기능은 내장 기능으로, 별도의 인터페이스 메서드를 사용할 필요가 없습니다.

## 상태 유형

* **Deleted**: 편집 중인 셀이 이미 삭제된 상태
* **셀 참조(Hidden)**, 예: A1(Hidden): 편집 중인 셀이 포함된 행 또는 열이 숨김 상태
* **셀 참조**, 예: A1: 편집 중인 셀이 다른 충돌 작업의 영향을 받은 상태

## 충돌 작업

동시 작업 편집 상태 기능은 다음과 같은 충돌 작업을 처리할 수 있습니다.

* 행 또는 열 추가/삭제
* 행/열 숨기기(필터 포함)
* 정렬(필터 포함)
* 행 높이/열 너비 조정(편집기 위치와 셀 위치가 달라질 수 있음)

**편집 결과**
편집이 완료되면,

* **Deleted 상태**: 편집기의 값은 셀에 기록되지 않습니다.
* **기타 상태**: 편집기의 값은 툴팁에 표시된 셀에 기록됩니다.

### 행/열 추가 또는 삭제

현재 편집 중인 셀이 다른 사용자의 행/열 삭제 또는 추가로 인해 영향을 받아 위치가 변경되면, 동시 작업 편집 상태 기능은 이를 시각적으로 표시합니다. 셀이 **Deleted**로 표시되거나, 업데이트된 **셀 참조**(예: G1, H55)가 표시됩니다.
아래 그림에서 사용자 *SpreadJS2*가 B8 셀을 편집 중일 때, 사용자 *SpreadJS1*이 B 열을 삭제합니다. 그 결과 *SpreadJS2*의 B8 셀에 **Deleted** 표시가 나타나며, 편집 완료 후 입력 내용은 셀에 기록되지 않습니다.
![delete.fa807a.gif](https://gcdocumentsitekrblob.blob.core.windows.net/document-site-files/images/36b63360-fb01-457c-a448-c3ce32aaf454/delete.fa807a-20260107.05e796.gif)
다른 시나리오에서는 사용자 *SpreadJS2*가 B8 셀을 편집 중이고, 사용자 *SpreadJS1*이 8행 위에 새 행을 추가합니다. 이 경우 *SpreadJS2*의 B8 셀에 **B9** 표시가 나타나며, 편집 완료 후 입력 내용은 B9 셀에 기록됩니다.
![add.115cca.gif](https://gcdocumentsitekrblob.blob.core.windows.net/document-site-files/images/36b63360-fb01-457c-a448-c3ce32aaf454/add.115cca-20260107.3ed249.gif)

### 행/열 숨기기

현재 편집 중인 셀이 다른 사용자의 행/열 숨기기 작업의 영향을 받으면, 동시 작업 편집 상태 기능은 해당 셀을 **셀 참조(Hidden)**, 예: A1(Hidden) 형태로 표시합니다.
사용자 *SpreadJS2*가 B8 셀을 편집 중일 때 사용자 *SpreadJS1*이 8행을 숨기면, *SpreadJS2*는 편집 중인 셀에 **B9 (Hidden)** 표시를 보게 됩니다.
![hide.c108ce.gif](https://gcdocumentsitekrblob.blob.core.windows.net/document-site-files/images/36b63360-fb01-457c-a448-c3ce32aaf454/hide.c108ce-20260107.d2c20c.gif)
이후 숨김 해제 작업을 수행하면, *SpreadJS2*가 편집한 내용은 B8 셀에 기록되는 것을 확인할 수 있습니다.
![unhide.c60403.gif](https://gcdocumentsitekrblob.blob.core.windows.net/document-site-files/images/36b63360-fb01-457c-a448-c3ce32aaf454/unhide.c60403-20260107.2f35e2.gif)

### 정렬

현재 편집 중인 셀이 다른 사용자의 정렬 작업으로 인해 위치가 변경되면, 동시 작업 편집 상태 기능은 이를 셀 참조(예: G1, H55)로 표시합니다.
사용자 *SpreadJS2*가 B8 셀을 편집 중일 때 사용자 *SpreadJS1*이 B 열을 오름차순(A–Z)으로 정렬하면, *SpreadJS2*는 편집 중인 셀에 **B10** 표시를 보게 되며, 최종 입력 값은 B10 셀에 기록됩니다.
![sort.36ae45.gif](https://gcdocumentsitekrblob.blob.core.windows.net/document-site-files/images/36b63360-fb01-457c-a448-c3ce32aaf454/sort.36ae45-20260107.f98aec.gif)

### 행 높이/열 너비 조정

뷰포트 내에서 행 높이나 열 너비를 조정하면 셀 위치와 편집기 위치가 달라질 수 있습니다.
현재 편집 중인 셀이 다른 사용자의 조정 작업의 영향을 받으면, 동시 작업 편집 상태 기능은 이를 셀 참조(예: G1, H55)로 표시합니다.
사용자 *SpreadJS2*가 B8 셀을 편집 중일 때 사용자 *SpreadJS1*이 5행의 높이를 조정하면, *SpreadJS2*의 B8 셀에 **B8** 표시가 나타나며, 편집 완료 후 입력 내용은 B8 셀에 기록됩니다.
![resize.ad9282.gif](https://gcdocumentsitekrblob.blob.core.windows.net/document-site-files/images/36b63360-fb01-457c-a448-c3ce32aaf454/resize.ad9282-20260107.532990.gif)

## 상태 복원

### Deleted 상태

셀이 삭제된 후 다시 추가되더라도, **Deleted** 상태는 복원되지 않습니다. 이는 새로 추가된 셀이 이전에 삭제된 셀과 내용, 서식 등의 측면에서 동일한지 여부를 시스템이 판단할 수 없기 때문입니다.
![undo-delete.744f6b.gif](https://gcdocumentsitekrblob.blob.core.windows.net/document-site-files/images/36b63360-fb01-457c-a448-c3ce32aaf454/undo-delete.744f6b-20260107.8f16ef.gif)

>type=note
> 편집 중이던 셀이 삭제된 후 다시 추가되더라도, 해당 셀의 내용은 편집 이전 상태로 유지됩니다.

### 기타 상태

상태 변경을 유발한 작업이 되돌리기(Undo)되면, 해당 상태도 함께 복원됩니다.
예를 들어 *SpreadJS2*가 셀을 편집 중일 때 *SpreadJS1*이 해당 셀이 포함된 행을 숨기면, *SpreadJS2*에서 셀 상태는 “hidden”으로 변경됩니다.
![hide.a9a66e.gif](https://gcdocumentsitekrblob.blob.core.windows.net/document-site-files/images/36b63360-fb01-457c-a448-c3ce32aaf454/hide.a9a66e-20260107.e1fd2f.gif)
이후 *SpreadJS1*이 숨기기 작업을 실행 취소하면, *SpreadJS2*에서 셀의 숨김 상태는 제거되고 툴팁도 그에 맞게 업데이트됩니다.
![undo-hide.25e5d6.gif](https://gcdocumentsitekrblob.blob.core.windows.net/document-site-files/images/36b63360-fb01-457c-a448-c3ce32aaf454/undo-hide.25e5d6-20260107.b03b3b.gif)