# js-collaboration-presence

## Content

`js-collaboration-presence`는 `js-collaboration`을 기반으로 한 플러그인으로, 실시간 동시 작업을 위한 **사용자 프레즌스 상태 관리 및 공유 기능**을 제공합니다. 이 플러그인은 클라이언트 측([js-collaboration-presence-client](/spreadjs/api/collaboration/js-collaboration-presence-client/README#spreadjs-api))과 서버 측([js-collaboration-presence](/spreadjs/api/collaboration/js-collaboration-presence/README#spreadjs-api))으로 나뉩니다.

* **클라이언트 측** ([Presence](/spreadjs/api/collaboration/js-collaboration-presence-client/classes/Presence)): 로컬 사용자의 상태를 수집하여 서버로 전송하고, 다른 사용자들의 상태를 수신하는 역할을 합니다.
* **서버 측** ([presenceFeature](/spreadjs/api/collaboration/js-collaboration-presence/README#presencefeature)): 모든 클라이언트의 상태를 브로드캐스트하고 조정하여, 동시 작업 룸 내에서 상태 데이터의 일관성을 보장하는 역할을 합니다.

## 적용 가능한 시나리오

사용자 활동 상태를 실시간으로 표시해야 하는 다음과 같은 시나리오에 적합합니다.

* 텍스트 문서에서 동시 작업자의 커서 위치 표시
* 스프레드시트에서 선택된 영역 표시

## 핵심 기능

**실시간 사용자 상태 공유**

* **기능 설명**
    `js-collaboration-presence`는 문서 내에서 클라이언트의 실시간 위치 정보를 관리하고 공유할 수 있습니다. 이 정보에는 사용자의 커서 위치, 선택 영역 등이 포함되며, 다른 사용자들이 문서의 현재 동시 작업 상태를 실시간으로 파악할 수 있도록 합니다.
* **적용 시나리오**
    * 다중 사용자 동시 작업 문서 편집 환경에서, 다른 사용자가 편집 중인 위치를 명확히 확인하여 중복 편집이나 충돌을 방지할 수 있습니다.
    * 스프레드시트 동시 작업 환경에서, 다른 사용자가 작업 중인 셀이나 영역을 실시간으로 확인하여 동시 작업을 보다 원활하게 할 수 있습니다.

**사용자 이벤트 감지 및 알림**
![overview.e3bf59.png](https://gcdocumentsitekrblob.blob.core.windows.net/document-site-files/images/36b63360-fb01-457c-a448-c3ce32aaf454/overview.e3bf59-20260107.8f4523.png)

* **기능 설명**
    `js-collaboration-presence-client`는 사용자 상태 변경을 구독하고 감지할 수 있도록 하여, 사용자의 프레즌스 상태가 변경될 때 특정 동작을 수행할 수 있게 합니다. 이러한 이벤트에는 사용자의 참여, 퇴장, 상태 업데이트(위치 업데이트, 선택 변경 등)가 포함됩니다.
* **적용 시나리오**
    * 새로운 사용자가 동시 작업 공간에 참여하면, 인터페이스를 자동으로 업데이트하여 해당 사용자의 프레즌스 상태를 표시할 수 있습니다.
    * 사용자가 프레즌스 상태를 업데이트하면(예: 커서 위치 변경), 모든 사용자가 동일한 정보를 볼 수 있도록 인터페이스를 실시간으로 업데이트할 수 있습니다.

**다중 사용자 동시 작업 지원**
![architecture1.41753b.png](https://gcdocumentsitekrblob.blob.core.windows.net/document-site-files/images/36b63360-fb01-457c-a448-c3ce32aaf454/architecture1.41753b-20260107.127e00.png)

* **기능 설명:**
    `js-collaboration-presence`는 `js-collaboration` 및 `js-collaboration-ot`와 원활하게 통합되어 완전한 동시 작업 플랫폼을 구축합니다. `js-collaboration`이 제공하는 양방향 연결과 `js-collaboration-ot`의 데이터 동기화 및 충돌 해결 기능을 통해, `js-collaboration-presence`는 실시간 동시 작업 환경에서 사용자 프레즌스 상태를 관리할 수 있습니다.
* **적용 시나리오**
    완전한 동시 작업 플랫폼에서 `js-collaboration-presence`는 사용자 프레즌스 상태 관리를 담당하고, `js-collaboration`과 `js-collaboration-ot`는 데이터 동기화와 일관성을 처리하여, 함께 매끄러운 동시 작업 경험을 제공합니다.

## 제한 사항

`js-collaboration-presence`는 데이터 영속성을 지원하지 않습니다. 프레즌스 데이터는 서버 메모리에만 유지되며, 각 사용자의 최신 상태만 저장됩니다.

### 잠재적인 영향

* **데이터 손실:** 서버가 재시작되거나 클라이언트 연결이 끊어질 경우, 저장된 모든 프레즌스 상태(사용자 위치 및 선택 영역 포함)가 손실됩니다.
* **영구 저장 미지원:** 프레즌스는 사용자 상태를 디스크나 데이터베이스에 저장하는 기능을 제공하지 않으므로, 영구적인 사용자 상태가 필요한 시나리오에는 적합하지 않습니다.

### 권장 해결 방법

* **주기적 백업:** 프레즌스는 기본적으로 영속성을 지원하지 않지만, 메모리에 저장된 상태 정보를 외부 저장소로 주기적으로 백업하는 방식을 고려할 수 있습니다.
* **커스텀 영속성 구현:** 개발자는 사용자 상태를 데이터베이스에 저장하고, 서버 시작 시 이를 복원하는 커스텀 영속성 로직을 구현할 수 있습니다.

## 다음 단계

Presence를 사용하여 동시 작업 리치 텍스트 에디터를 구축하는 단계별 튜토리얼을 따라가 보세요.
[튜토리얼: 실시간 동시 작업 텍스트 편집기에 Presence 기능 추가](/spreadjs/docs/spreadjs-collaboration-server/collaboration-framework/js-collaboration-presence/tutorialadd-presence-functionality-to-a-real-time-collaborative-text-editor)

핵심 개념과 API를 익혀 보세요.

* [Presence Client](/spreadjs/docs/spreadjs-collaboration-server/collaboration-framework/js-collaboration-presence/presence-client)
* [Presence Server](/spreadjs/docs/spreadjs-collaboration-server/collaboration-framework/js-collaboration-presence/presence-server)

각 모듈에서는 코드 예제를 통해 실제 사용 방법을 보여줍니다.