ADR 0019 — 실시간 협업 편집 (Phase E) 방향성 · 플레이스홀더
상태: Draft · 후속 확장 대기 작성일: 2026-04-23 관련 ADR: 0018 (Phase E 연장)
배경
ADR 0018 Phase A~D 및 Phase F (의뢰인 포털 통합) 이 2026-04-23 ~24 집중 구현으로 프로덕션 머지 완료. Phase E 는 "실시간 협업 (변호사끼리 동일 문서 동시 편집)" 로, ADR 0018 작성 시점에 별도 ADR 로 분리 결정됨.
본 플레이스홀더 문서는 아직 채택 전 으로, 의사결정 자료 수집 단계.
후보 기술
1. Y.js + Tiptap Collab (유력)
- Tiptap 공식 지원 (@tiptap/extension-collaboration · y-prosemirror)
- CRDT 기반 offline-first 동기화
- 서버: Hocuspocus (self-hosted) 또는 Tiptap Cloud (paid)
- 기존 Tiptap extension 재사용 가능성 최대
2. Firestore 실시간 동기화 (자체 구현)
- 장점: 이미 사용 중, 추가 인프라 0
- 단점: 문자열 레벨 동시 편집 충돌 해결 로직 복잡, CRDT 없음
- 변호사 2~3인 동시 편집 시 "방금 덮어씀" 현상 위험
3. LiveBlocks (SaaS)
- UI component 제공 + presence indicator
- 가격: tenant 별 월 $10~ (스케일 시 비용 부담)
결정 대기 항목
-
필요 사용 케이스 정의
- 파트너 변호사 1인 + 사무장 1인 동시 편집 (가장 흔한 시나리오)
- 같은 작성자가 여러 브라우저 탭 열어놓은 경우 (부차적)
- 의뢰인이 실시간 열람 (Phase F read-only 유지 — collab 는 staff 간 한정)
-
데이터 모델 영향
- 현재
contentJson+editCount가 atomic — Y.js 도입 시contentJson은 Y-Doc serialized state 로 변경 (역방향 호환 고려)
- 현재
-
비용 · 운영 리스크
- Hocuspocus self-host: Cloud Run + Redis + Firestore 권한 관리
- Tiptap Cloud: 가장 간단, 월 $19~ per project
-
Phase D 학습 파이프라인과 호환성
- Y-Doc → plainText 추출 경로 검증 필요
- tenant RAG 가 Y-Doc merged state 를 받아도 문제 없는지
필요 없는 것 (이미 해결됨)
- 단일 유저 편집 보호: beforeunload 경고 (PR #631)
- 편집 이력: 수동 + auto_time + auto_edit_count + on_finalize snapshot
- 롤백: DocumentVersionList
- diff: line-diff.ts
다음 단계
- Chair 미팅 — 파트너 변호사끼리 동시 편집 실측 수요 (정량)
- Y.js 기초 PoC (1 문서, 2 브라우저) — 1 주
- 비용 추정 + 운영 체크리스트
- Phase E 정식 ADR 작성 (본 문서 승격)
반대 의견 (사전 기록)
- P5 (풀스택): "Firestore 기반으로 충분. Y.js 인프라 운영 부담이 너무 큼. 대부분 사용은 순차 편집이지 동시 편집이 아님."
- P1 (변호사): "파트너 리뷰 패턴은 '변호사 먼저 작성 → 사무장 검토 → 변호사 확정' 순차라 collab 필요성 낮음. 동시 편집보다 comment/review UX 가 더 유용."
Minority Report (Phase E 거부 의견)
일부 역할은 Phase E 자체를 거부 ("collab 은 over-engineering"). 이 경우 대안:
commentssubcollection 기반 댓글- review/approve workflow (DocumentReview 스키마)
- @멘션 알림
Phase E 범위 재검토 시 이 대안들이 우선순위가 될 수 있음.