# 셀 메모

셀 메모는 값 자체를 바꾸지 않고 검토 이유나 추가 설명을 남깁니다. 독립 셀 메모와 협업 세션의 댓글 스레드는 저장 방식과 API가 다르므로 먼저 원하는 방식을 선택합니다.

Canonical: https://grid.syidax.com/ko/docs/features/cell-notes/

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

## 동작 원리와 선택 기준

cellNotes는 안정적으로 식별되고 읽기 권한이 있는 셀에 사용하는 Pro 기능입니다. cellNotesAdapter에 영속 저장을 연결해야 하며, 브라우저 내부 저장이나 협업 방으로 자동 대체되지 않습니다.

이 기능을 제품에서 사용하려면 Pro 패키지와 유효한 라이선스가 필요합니다. 설정 이름이 같더라도 Community에서 Pro 기능이 활성화되는 것은 아닙니다.

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

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

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

## 예제 1. 독립 메모 저장소 연결

서버 연동 어댑터는 load(cell)과 save(cell,text,expectedRevision)를 구현합니다. load는 메모 또는 null, save는 GridNoteSaveResult 계약을 반환해야 합니다.

결과 확인: cellNotes를 켜기 전에 어댑터를 지정하고 getRowId를 설정합니다. 서버는 예상 revision이 일치할 때만 원자적으로 저장해 다른 사용자의 수정이 사라지지 않게 합니다.

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

## 예제 2. 협업 댓글 추가

이미 collaborationRoom에 참여한 Grid에서 기존 주문의 셀에 댓글을 남깁니다.

```javascript
const commentId = await grid.addCellComment('ORD-0001', 'quantity', '수량 확인 부탁드립니다.');
if (commentId) {
  await grid.openCellCommentPanel('ORD-0001', 'quantity');
}
```

결과 확인: 활성 협업 세션이 없으면 댓글 API가 독립 메모 저장소를 대신하지 않습니다. 반환 ID가 있는지 확인하세요.

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

## 예제 3. 댓글 읽기와 해결 처리

협업 댓글 목록의 실제 ID를 사용해 스레드 상태를 바꿉니다.

```javascript
const comments = await grid.getCellComments('ORD-0001', 'quantity');
console.log(comments);
// 선택한 실제 commentId를 사용해
// setCellCommentResolved(rowId, field, commentId, true)를 호출합니다.
```

결과 확인: 메모 삭제·댓글 해결·원본 셀 값 변경은 각각 다른 작업입니다. 읽기 권한이 없는 셀의 메모를 앱에서 따로 노출하지 않도록 처리합니다.

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

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

행 인덱스는 정렬·필터 후 바뀔 수 있으므로 메모 저장 키로 사용하지 마세요. 안정적인 rowId와 열 식별자를 사용합니다.

저장 충돌을 단순 재시도로 덮어쓰지 마세요. 서버의 최신 revision을 읽고 사용자가 내용을 비교하게 합니다.

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

## 이 기능에 사용하는 API

- [cellNotes](https://grid.syidax.com/ko/docs/options/cellNotes.md) — 안정적인 ID가 있고 읽을 수 있는 셀에 독립 메모를 제공합니다. 저장 어댑터와 Pro 권한이 필요합니다.
- [cellNotesAdapter](https://grid.syidax.com/ko/docs/options/cellNotesAdapter.md) — 독립 셀 메모의 조회와 revision 기반 원자적 저장을 구현합니다. 내장 임시 저장소로 자동 대체되지 않습니다.
- [openCellCommentPanel](https://grid.syidax.com/ko/docs/methods/openCellCommentPanel.md) — 행 ID와 필드로 지정한 협업 댓글 패널을 엽니다. 독립 셀 메모 어댑터와는 다른 댓글 기능입니다.
- [closeCellCommentPanel](https://grid.syidax.com/ko/docs/methods/closeCellCommentPanel.md) — 열린 협업 댓글 패널을 닫습니다. 댓글 데이터 자체를 삭제하지 않습니다.
- [addCellComment](https://grid.syidax.com/ko/docs/methods/addCellComment.md) — 협업 세션에서 셀 댓글을 추가하고 ID 또는 null을 반환합니다. 활성 세션이 필요합니다.
- [getCellComments](https://grid.syidax.com/ko/docs/methods/getCellComments.md) — 행 ID와 필드에 연결된 협업 댓글 목록을 읽습니다.
- [setCellCommentResolved](https://grid.syidax.com/ko/docs/methods/setCellCommentResolved.md) — 지정 댓글의 해결 여부를 변경하고 성공 여부를 반환합니다.
- [deleteCellComment](https://grid.syidax.com/ko/docs/methods/deleteCellComment.md) — 지정한 협업 댓글을 삭제하고 성공 여부를 반환합니다.
- [cellCommentsChanged](https://grid.syidax.com/ko/docs/events/cellCommentsChanged.md) — 셀의 협업 댓글 목록이 바뀌었을 때 발생합니다. 행 ID·필드·최신 댓글 목록을 읽습니다.
- [commentMentioned](https://grid.syidax.com/ko/docs/events/commentMentioned.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/cell-notes) — 직접 체험 가능한 범위는 해당 가이드에 안내되어 있습니다.
