협업 텍스트 편집: CRDT/OT 회피하고 구현하는 방법
AI Store에서 AI코딩으로 만들어진 앱을 만나보세요!
지금 바로 방문하기

협업 텍스트 편집: 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. 서버 리컨실리에이션 전략

  1. 로컬 미확정 연산 되돌리기
  2. 서버 연산 적용
  3. 로컬 연산 재적용최종 동기화 상태 확보

4. 실무적 이점 및 제안

  • CRDT 수준의 일관성 확보 (트리/수학적 증명 없이)
  • B+Tree 기반 구조빠른 ID 탐색 및 삽입 지원
  • Articulated 라이브러리로 구현 용이성 향상
  • Lamport 타임스탬프 기반 중앙 서버 없이도 동작 가능

5. 주요 논의 및 제한

  • CRDT와의 차별점: 중앙 서버가 순서 정렬 역할, 자동 ID 정렬 없이 명시적 삽입
  • 대량 선택/복사/붙여넣기 (Ctrl+A/X/V) 처리 어려움
  • 다양한 데이터 구조 (dict/map) 지원 부족, CRDT의 확장성 문제 지적
  • 네트워크 불안정 환경 (예: 지하철)에서 UX 대응 방안 미제시

결론

  • UUID 기반 명시적 삽입서버 리컨실리에이션 전략을 통해 CRDT/OT 없이 협업 편집 구현 가능
  • 간단한 구현과 확장성을 바탕으로 협업 에디터 개발자에게 실용적 대안 제공
  • Articulated 라이브러리 활용을 통해 프로토타이핑 및 테스트 용이
  • 중央 서버 기반 서비스에서는 특히 실용적이지만, 분산 환경에서는 추가 검증 필요