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