CRDT와 강한 최종적 일관성(SEC)의 개념을 소개하고, 충돌의 결정적 자동 해결, 낮은 지연, 높은 장애 허용성 등 분산 데이터베이스와 로컬 우선/지리 복제 시스템에서의 의미를 논한다.
9/8/2025
CRDT. 여러 노드에 복제되고, 독립적으로 편집되고, 다시 병합해도 그냥 잘 동작하는 데이터 구조. 하지만 협업 문서 편집이나 멀티플레이어 TODO 리스트는 빙산의 일각일 뿐이다 — 내가 보기에 진짜 큰 응용처는 분산 데이터베이스이고, 그 얘기를 하려면 일관성 이야기가 필요하다.
CRDT는 강한 최종적 일관성(Strong Eventual Consistency)을 위한 도구다. 먼저 보통의 최종적 일관성 정의부터 보자1:
Eventual Delivery 한 노드에 전달된 업데이트는 시간이 지나면 결국 모든 노드에 도달한다 Eventual Convergence 두 노드가 동일한 모든 업데이트를 보았다면, 언젠가는 동일한 상태가 된다.
강한 최종적 일관성(SEC)은 ‘최종적 수렴’을 ‘강한 수렴’으로 바꾼다:
Strong Convergence 두 노드가 동일한 모든 업데이트를 보았다면, 동일한 상태를 갖는다.
차이를 찾았는가! SEC에서는 업데이트가 처리되는 즉시 두 복제본이 같은 상태가 되지, ‘언젠가’가 아니다. 여러 노드가 독립적으로 업데이트된다면 충돌은 생긴다 — 이는 피할 수 없다. SEC가 보장하는 것은 이러한 충돌이 자동으로, 그리고 결정론적으로 해결된다는 것이다.
이것은 엄청난 함의를 가진다. SEC는 낮은 지연 시간을 의미하는데, 읽기와 쓰기를 처리하기 위해 노드들이 상호 조정할 필요가 없기 때문이다. 또한 놀라운 장애 허용성을 의미한다 — 시스템의 모든 노드가 단 하나를 빼고 동시에 크래시하더라도 읽기와 쓰기는 정상적으로 계속될 수 있다. 게다가 노드가 오프라인이거나 네트워크에서 임의의 기간 동안 분리되어 있어도 제대로 동작한다.
강한 최종적 일관성은 ‘제대로 작동하는’ 최종적 일관성이다. 로컬 우선(local-first)이나 저지연 지리 복제 시스템을 하고 있다면 — 다른 것으로 대체하지 말라. 나는 CRDT를 이런 맥락에서 보아야 한다고 생각한다 — 강한 최종적 일관성을 갖는 시스템을 구축하는 빌딩 블록으로서. 애플리케이션 상태로서의 CRDT와, 전체 데이터베이스로서의 CRDT는 전혀 다른 이야기다.