다중 사용자 편집은 근본적인 문제에 직면한다. 두 사람이 같은 문서를 오프라인이나 서로 다른 연결에서 편집하면 양쪽 복사본이 모두 변경되고, 누군가 이를 조정해야 한다. 전통적인 접근법은 문서의 일부를 잠가 협업을 차단하거나, 상태 조합이 폭발적으로 늘어나고 정확성을 증명하기 어렵기로 악명 높은 운영 변환(operational transformation)을 사용한다.

2011년 Marc Shapiro와 동료들은 충돌 없는 복제 데이터 타입(CRDT)을 제안했다. 이는 동시 업데이트가 교환 가능하도록 설계된 데이터 구조다. 모든 업데이트가 교환 가능하고 병합이 결합 법칙을 따르면, 분기된 복제본은 어떤 순서로든 병합되어도 중앙 조정자나 충돌 대화상자 없이 하나의 동일한 상태로 수렴할 수 있다. 레지스터, 카운터, 집합, 텍스트 편집기 모두 이런 방식으로 구축할 수 있다.

이론은 이후 몇 년간 공고해졌다. Martin Kleppmann과 동료들의 2018년 OpSets 논문은 복제 데이터 타입 알고리즘을 기계적으로 검증하는 실행 가능한 프레임워크를 구축했고, 여러 발표된 알고리즘이 위반했던 협업 텍스트의 정확성 속성을 드러냈으며, 이전에는 잠금 없이는 불가능하다고 여겨졌던 원자적 이동 연산을 명세했다.

생산 시스템이 이 아이디어를 채택했다. Figma의 멀티플레이어 엔진은 CRDT 연구에서 명시적으로 영감을 받았다. 서버 권위적이고 속성별로 설계된 이 방식은 마지막 작성자 승리 레지스터처럼 작동하며, 회사가 운영 변환을 불필요하게 복잡하다고 판단해 거부한 후 선택한 것이다. Redis, Riak, Cosmos DB는 CRDT 기반 데이터 타입을 제공하며, Apple의 Notes는 CRDT를 사용해 기기 간 오프라인 편집을 동기화한다.

데이터 타입을 설계상 병합 교환 가능하게 만든다

교환 가능한 병합은 결과를 업데이트 순서와 무관하게 만든다

복제본은 오프라인에서 편집하고 중앙 권위 없이 수렴할 수 있다

기계적 검증이 손짓으로 넘긴 정확성 증명을 대체했다

Figma식 제품은 OT의 복잡성 없이 실시간 협업을 얻었다

조정이 병목이라면, 조정이 불필요하도록 데이터를 재설계하라. 결과가 순서 독립적인 연산을 선택하면 동시 사용자는 공짜로 일관성을 얻는다.

CRDT는 이제 오프라인 우선 협업과 복제의 표준 답이다. Figma의 멀티플레이어 동기화, Apple Notes, Redis와 Riak의 데이터 타입, 피어 투 피어 편집 도구가 이 아이디어 위에 구축되며, 연구 흐름은 텍스트 편집, 트리 이동, 비잔틴 설정의 어려운 부분으로 계속된다.

근거 확인하기

출처

  1. OpSets: Sequential Specifications for Replicated Datatypes arXiv · arxiv.org ·
  2. How Figma's multiplayer technology works Figma Engineering Blog · figma.com
  3. Conflict-free replicated data type Wikipedia · en.wikipedia.org