피드로 돌아가기
Dev.toFrontend
원문 읽기
TipTap-Yjs 동기화 실패 해결을 위한 상태 초기화 설계
TipTap + Yjs + Hocuspocus saves content, but other users only see updates after a page refresh
AI 요약
Context
Next.js 환경에서 TipTap과 Hocuspocus를 활용한 실시간 협업 기능을 구현했으나, DB 저장과 별개로 클라이언트 간 실시간 업데이트가 누락되는 현상 발생. 기존 JSON 기반 저장 방식과 Yjs의 Binary State 간의 상태 불일치로 인한 동기화 병목 지점 노출.
Technical Solution
- JSON 데이터의 Y.Doc 변환을 통한 초기 상태 동기화 구조 설계
- collaboration 모드 진입 시 TipTap content 옵션을 undefined로 설정하여 Yjs State 우선 참조 유도
- Hocuspocus Server의 WebSocket 연결 상태 검증을 통한 Broadcast 메커니즘 확인
- DB 내 JSON 포맷과 base64 Yjs State의 이중 저장 전략을 통한 데이터 무결성 확보
- Client-side Editor 인스턴스 생성 전 Y.Doc 초기화 과정을 통한 Blank Document 현상 방지
실천 포인트
1. 협업 모드 전환 시 기존 JSON 데이터를 Y.Doc으로 먼저 변환 후 Editor를 초기화했는지 확인
2. Editor 설정에서 content 속성이 Yjs의 상태 업데이트를 덮어쓰지 않도록 정의 여부 검토
3. Hocuspocus Server의 WebSocket 이벤트 로그를 통해 실제 Update 패킷 전송 여부 모니터링
4. 상태 저장 시 Binary 데이터의 Base64 인코딩 무결성 및 DB 타입 일치 여부 체크