백엔드
동시편집 중 서버에서 일어나는 일
두줄요약
문서 협업 장벽을 낮추기 위해 Yjs 기반 CRDT 동시편집 서버 구조를 설계했습니다. 웹소켓 동기화와 update 영속화, 기존 blocks 문서 형식 호환 방식을 설명합니다.
문제 상황
- 버전 분기 기반 문서 편집으로 비개발자 협업과 동시 수정에 높은 진입 장벽
- 기존 blocks 문서 형식, 웹사이트 배포, RAG 활용 기능과의 호환성 필요
선택 이유
- 오픈소스 생태계, 서버 수평 확장, 오프라인 편집 가능성을 고려한 CRDT 선택
- ProseMirror 연동 플러그인과 레퍼런스가 풍부한 Yjs 채택
- 기존 인증·영속화 흐름과의 결합이 쉬운 클라이언트-서버 및 웹소켓 구조 선택
구조와 흐름
- 클라이언트와 동시편집 서버가 Y.Doc을 유지하고 Yjs update를 웹소켓 room으로 전파
- 재연결 시 state vector와 sync 프로토콜로 누락된 update 동기화
- Yjs ↔ ProseMirror ↔ blocks 변환으로 편집 데이터와 기존 문서 기능 연결
성능/운영 포인트
- 유효성 검증을 통과한 Yjs update만 DB에 append하여 편집 이력 영속화
- update 누적 증가에 대응한 mergeUpdates 기반 병합 저장
- Yjs 데이터를 편집 SSOT로 두고 blocks 변환 결과를 주기적 저장


