협업 텍스트 편집: CRDT나 OT 없이 구현하기
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
웹 개발
대상자
- *협업 텍스트 편집 기능을 직접 구현하는 개발자**
- *난이도 관점: CRDT/OT의 복잡성을 피하고 단순한 ID 기반 로직을 적용할 수 있는 중급~고급 개발자** 대상
핵심 요약
- UUID 기반 ID 삽입 방식으로 서버가 직접 텍스트 삽입 위치를 처리해 충돌 해결과 유연성 확보
- 낙관적 로컬 업데이트 + 서버 리컨실리에이션 전략으로 상태 동기화 문제 해결
- CRDT/OT의 수학적 복잡성을 피하고, 명시적 삽입 위치 기반의 간단한 구현 방식 제시
섹션별 세부 요약
1. 기존 CRDT/OT 방식의 한계
- CRDT: 트리 기반 정렬과 UUID 추적으로 복잡성 증가
- OT: 동적 인덱스 재조정으로 라이브러리 의존성과 커스터마이징 어려움
- 개발자 맞춤형 구현 제한과 복잡한 수학적 모델 기반
2. 새롭게 제안된 ID 기반 삽입 방식
- UUID로 각 문자 식별 후, 클라이언트가 서버에 "ID 뒤에 삽입" 명령 전달
- 예:
insert ' the' after f1bdb70a
→ 서버가 해당 ID 위치에 삽입 - isDeleted 플래그로 삭제 처리 (내부 목록 유지)
- 낙관적 업데이트로 서버 응답 전 로컬 반영
3. 서버 리컨실리에이션 전략
- 로컬 미확정 연산 되돌리기
- 서버 연산 적용
- 로컬 연산 재적용 → 최종 동기화 상태 확보
4. 실무적 이점 및 제안
- CRDT 수준의 일관성 확보 (트리/수학적 증명 없이)
- B+Tree 기반 구조로 빠른 ID 탐색 및 삽입 지원
- Articulated 라이브러리로 구현 용이성 향상
- Lamport 타임스탬프 기반 중앙 서버 없이도 동작 가능
5. 주요 논의 및 제한
- CRDT와의 차별점: 중앙 서버가 순서 정렬 역할, 자동 ID 정렬 없이 명시적 삽입
- 대량 선택/복사/붙여넣기 (Ctrl+A/X/V) 처리 어려움
- 다양한 데이터 구조 (dict/map) 지원 부족, CRDT의 확장성 문제 지적
- 네트워크 불안정 환경 (예: 지하철)에서 UX 대응 방안 미제시
결론
- UUID 기반 명시적 삽입과 서버 리컨실리에이션 전략을 통해 CRDT/OT 없이 협업 편집 구현 가능
- 간단한 구현과 확장성을 바탕으로 협업 에디터 개발자에게 실용적 대안 제공
- Articulated 라이브러리 활용을 통해 프로토타이핑 및 테스트 용이
- 중央 서버 기반 서비스에서는 특히 실용적이지만, 분산 환경에서는 추가 검증 필요