Yjs 대신 Prosemirror-collab? 협업 편집, 더 단순하게!
Yjs는 널리 사용되지만, 문서 손상 및 성능 저하 문제를 야기함
저자는 Prosemirror-collab을 활용한 단순한 협업 편집 방식을 제안함
CRDT(Conflict-free Replicated Data Type)의 복잡성 없이, 낙관적 업데이트(Optimistic Updates), 네트워크 불안정성, 세분화된 편집 내역 관리 등을 구현 가능
Yjs의 성능 문제, 스키마(Schema) 관리의 어려움, 권한 관리의 복잡성 등을 지적하며, 단순한 방식의 장점을 강조함
Yjs의 성능 문제와 문서 재구성
게시물에 따르면 Yjs는 매 키 입력마다 전체 문서를 삭제하고 다시 생성하는 방식으로 작동하여 성능 저하를 유발한다. 특히, 60fps(Frames Per Second)의 부드러운 사용자 경험을 목표로 하는 편집기에서 이는 치명적인 문제로 작용한다. DOM(Document Object Model) 업데이트의 비효율성, 플러그인(Plugin)과의 호환성 문제, 그리고 위젯(Widget) 상태의 불안정성 등 다양한 문제점을 야기한다.
Prosemirror-collab의 단순성과 효율성
저자는 Prosemirror-collab을 사용하여 CRDT의 복잡성을 피하고, 낙관적 업데이트, 네트워크 불안정성, 세분화된 편집 내역 관리 등을 구현할 수 있다고 주장한다. 이 방식은 단일 권한(Single Authority)을 기반으로 하며, 클라이언트의 변경 사항을 서버에 전송하고, 서버는 이를 순서대로 처리하여 모든 클라이언트에 전파한다. 이러한 단순함은 성능 향상과 구현 난이도(Implementation Challenges) 감소로 이어진다.
Yjs의 스키마 관리 및 권한 문제
Yjs는 스키마(Schema) 관리와 권한(Permission) 설정에 어려움이 있다. 스키마 불일치 시 데이터 손실 위험이 있으며, 권한 관리가 복잡하여 실시간 협업 편집 환경에서 다양한 기능을 구현하기 어렵다. 특히, 마스터리스(Masterless) 아키텍처를 위해 설계되어, 중앙 집중식 권한 관리가 어렵다는 점이 지적된다. GDPR 규제 준수(GDPR Compliance)와 같은 보안 요구사항을 충족하는 데도 어려움이 따른다.
CRDT와 단순한 방식의 트레이드오프
CRDT는 진정한 마스터리스(Masterless) P2P 편집을 가능하게 하지만, 그 대가로 복잡성과 성능 문제를 감수해야 한다. 반면, Prosemirror-collab과 같은 단순한 방식은 마스터가 필요하지만, 성능(Performance), 구현 용이성(Implementation Ease), 그리고 디버깅(Debugging) 측면에서 유리하다. 저자는 진정한 마스터리스 P2P가 필요하지 않다면, 단순한 방식을 선택하는 것이 더 나은 선택이라고 주장한다.