라이브러리만 붙이면 동시편집은 끝일까요?
두줄요약
ProseMirror와 Yjs를 연결한 동시편집의 변경 전파·반영 흐름을 설명했습니다. 중복 의존성으로 인한 런타임 오류를 peer dependency와 external로 해결했습니다.
구조와 흐름
- ProseMirror 트랜잭션과 Yjs Doc 간 변경을 양방향 동기화하는 y-prosemirror 바인딩
- Provider의 웹소켓 기반 Yjs update 전송·수신과 원격 변경의 ProseMirror 트랜잭션 변환
- mutex와 origin 구분을 통한 바인딩 재진입 및 수신 update 재전송 방지
원인 분석
- ProseMirror 스키마의
doc노드 탐색 오류와orderedmap중복 로딩 - 서로 다른 모듈 인스턴스의 생성자로 인한
instanceof판별 실패 - 툴킷 번들 내부 ProseMirror와 바인딩의 호스트 ProseMirror가 공존한 의존성 구조
해결 방법
- ProseMirror 공통 패키지 구성과 툴킷의 peer dependency 선언
- 빌드의 external 설정으로 공유 의존성을 번들에서 제외
- 툴킷·바인딩·호스트의 ProseMirror 및 OrderedMap 참조 경로 통일
주의할 점
- peer dependency 선언만으로 번들 내부 의존성 제거 불가
- external 적용 후에도 호환 버전과 최종 앱의 동일 모듈 참조 필요
- 객체·모듈 내부 상태 공유 라이브러리의 싱글턴 유지 필요

