CRDT(Conflict-free Replicated Data Type)의 개념과 활용법을 소개하는 대화형 튜토리얼에 대한 게시글
LWW Register 및 LWW Map과 같은 CRDT를 활용하여 협업 픽셀 아트 에디터를 구축하는 과정을 설명
실시간 협업(Real-time Collaboration)을 위한 CRDT의 유용성에 대한 긍정적인 평가가 주를 이룸
타임스탬프(Timestamp) 기반의 충돌 해결 방식과 삭제(Delete) 연산의 한계점에 대한 논의가 존재
게시글은 CRDT(Conflict-free Replicated Data Type)를 '충돌 없이 복제된 데이터 타입'으로 정의하며, 여러 컴퓨터(피어)에서 데이터를 동기화하는 데 사용된다고 설명한다. 특히, 구글 Docs(Google Docs)나 피그마(Figma)와 같은 협업 애플리케이션에서 중앙 서버 없이 실시간 협업을 가능하게 하는 핵심 기술임을 강조한다. 또한, 상태 기반(State-based)과 연산 기반(Operation-based) CRDT의 두 가지 유형을 간략하게 소개한다.
게시글은 LWW Register(Last Write Wins Register)와 을 예시로 들어 CRDT의 구현 방식을 설명한다. 는 타임스탬프(Timestamp)와 피어 ID를 사용하여 마지막으로 쓰인 값을 결정하며, 은 LWW Register를 사용하여 맵의 각 키에 대한 값을 관리한다. 이러한 구조는 를 통해 충돌을 방지하고, 데이터 일관성을 유지하는 데 기여한다.
게시글은 LWW Map에서 삭제 연산의 특징을 설명하며, 삭제된 키를 완전히 제거하는 대신 Tombstone(Tombstone)을 사용하여 삭제 상태를 기록한다. 이는 CRDT가 모노토닉 증가(Monotonically Increasing)하는 데이터 구조임을 의미하며, 한 번 추가된 정보는 제거되지 않고 계속 유지된다는 것을 의미한다. 이러한 특성은 데이터의 일관성을 보장하지만, 삭제된 데이터가 완전히 제거되지 않는다는 단점을 가진다.
댓글에서는 실시간 협업(Real-time Collaboration) 환경에서 발생할 수 있는 문제점에 대한 논의가 이루어졌다. 특히, 여러 사용자가 동시에 동일한 픽셀을 수정할 경우, 타임스탬프(Timestamp) 기반의 충돌 해결 방식이 예상치 못한 결과를 초래할 수 있다는 점을 지적한다. 예를 들어, 한 사용자가 특정 영역을 드로잉하는 동안 다른 사용자가 해당 영역을 덮어쓰는 경우, 첫 번째 사용자의 수정 사항이 반영되지 않을 수 있다. 이러한 문제를 해결하기 위해, 드로잉 연산(Draw Operation) 자체를 CRDT로 취급하여 동기화하는 방법이 제안되었다.