Conflict-free replicated data type
분산 컴퓨팅에서 충돌 없는 복제 데이터 유형은 네트워크의 여러 컴퓨터에 걸쳐 복제되는 데이터 구조로 다음과 같은 기능이 있습니다. 애플리케이션은 다른 복제본과 조정하지 않고 모든 복제본을 독립적으로 동시에 업데이트할 수 있습니다.
Libraries
Softwares
실전 가이드
CRDT(Conflict-free Replicated Data Type, 충돌 없는 복제 데이터 타입) 는 네트워크 분할이나 동시 수정 상황에서도 조정 없이 일관된 데이터 병합을 가능하게 하는 분산 데이터 구조임
- 데이터 병합이 교환법칙·결합법칙·멱등성을 만족하면, 모든 복제본이 결국 동일한 상태로 수렴함
- 대표적인 형태로 G-Counter, PN-Counter, G-Set, 2P-Set, OR-Set, LWW-Register, MV-Register, RGA, WOOT, Logoot 등이 있으며, 각기 다른 추가·삭제·재추가·순서 유지 요구를 처리함
- Delta CRDT는 전체 상태 대신 변경분만 전송해 효율을 높이고, Garbage Collection은 메타데이터 누적 문제를 해결하기 위한 핵심 과제임
- CRDT는 완벽한 해법이 아니지만, 가용성이 즉시 일관성보다 중요한 시스템에서 강력한 선택지로 평가됨
CRDT의 기본 개념
- CRDT는 분산 환경에서 동시 수정이 발생해도 조정 없이 병합 가능한 데이터 구조
- 병합 연산이 교환적(commutative) , 결합적(associative) , 멱등(idempotent) 이면 모든 복제본이 동일한 상태로 수렴
- 예: G-Counter는 각 복제본의 카운트를 max로 병합해 손실 없는 합산 보장
- CvRDT는 전체 상태를 병합, CmRDT는 연산을 전파
주요 CRDT 유형
- G-Counter: 증가만 가능한 카운터, 각 복제본의 값 합산
- PN-Counter: 증가용·감소용 G-Counter를 결합해 양방향 카운트 지원
- G-Set: 추가만 가능한 집합
- 2P-Set: 추가·삭제 가능하지만 재추가 불가
- LWW-Element-Set: 타임스탬프 기반으로 최근 연산이 승리
- OR-Set: 고유 태그를 사용해 동시 추가 시 데이터 손실 없이 병합, add-wins 동작
- LWW-Register / MV-Register: 단일 값 저장용, LWW는 단일 승자, MV는 동시값 모두 유지
- OR-Map: 키별로 OR-Set을 결합한 맵 구조
- RGA / WOOT / Logoot / LSEQ: 순서가 있는 시퀀스 데이터용 CRDT
- RGA는 트리 기반, WOOT은 양방향 참조 기반, Logoot/LSEQ는 위치 식별자 기반
고급 CRDT 개념
- Causal CRDTs: 버전 벡터를 사용해 인과 관계를 추적, 더 정확한 충돌 감지 가능
- Delta CRDTs: 전체 상태 대신 변경분(델타)만 전송해 네트워크 효율 향상
- Tree CRDTs: 계층 구조 데이터(파일 시스템 등) 복제 지원, 부모-자식 관계 유지 필요
- Observed-Remove Shopping Cart: OR-Set과 PN-Counter를 결합한 전자상거래 장바구니 예시
Garbage Collection 문제
- CRDT는 수렴을 위해 메타데이터를 계속 누적하므로 무한 성장 문제 발생
- 예: OR-Set의 태그, RGA의 tombstone
성능 및 선택 가이드
- CRDT 유형별 공간·시간 복잡도는 복제본 수, 요소 수, 태그 수 등에 따라 달라짐
- G/PN-Counter는 복제본 수에 비례, OR-Set은 태그 수에 비례, RGA는 tombstone 누적
- 추가만 필요 → G-Counter, G-Set
- 삭제 필요, 재추가 불필요 → 2P-Set
- LWW 허용 → LWW-Set/Register
- 동시 수정 보존 → OR-Set, MV-Register
- 순서 유지 필요 → RGA, Logoot
- 중첩 구조 → OR-Map
결론
- CRDT는 조정 없는 수렴을 보장하지만, 메타데이터 증가와 복잡성이 단점
- 가용성 우선 시스템에서 유용하며, 각 CRDT는 특정 문제 유형에 최적화됨
- 실무에서는 전통적 데이터베이스와 병행해 사용하며, 가비지 컬렉션 전략이 필수
- “완벽한 CRDT”는 없으며, 응용 요구에 맞는 선택이 핵심임
See also
- Data Structures
- Algorithms
- Raft
- Operational Transform (OT)
- Pg_crdt
Favorite site
Articles
- [원문] I was wrong. CRDTs are the future
- 구글 Wave 개발자가 얘기하는 Conflict-free Replicated Data Types 이야기
- [원문] Homomorphically Encrypting CRDTs | jakelazaroff.com
- 로컬-퍼스트 소프트웨어에서 협업 문서의 보안을 유지하기 위해 동형암호화(Homomorphic Encryption)와 CRDTs를 결합
- 종단 간 암호화만으로는 서버가 데이터를 병합할 수 없어 동기화와 업데이트 효율에 제약이 발생함
- 동형암호화는 서버가 내용을 알지 못한 채로 CRDT 업데이트를 병합할 수 있도록 프로그램 실행을 가능하게 하는 기술
- 하지만 동형암호화의 근본적 한계(성능 저하, 공간·연산량 증가, 코드의 최악 케이스 동작 필요) 로 인해 실제 적용에는 중대한 난점이 존재함
- CRDTs와 보안 연산의 공존을 위한 다양한 접근이 연구되고 있으며, 아직 완전한 해결책은 모색 중임