CRDT의 기본은 position-based가 아니라 모든 캐릭터에 대해 identifier를 두는 것.
<aside>
“this is some text"
와 같은 텍스트가 있다고 하자. A, B가 이를 동시에 편집 중이다.
A의 커서는 맨 앞에, position 0
에 있다.
B의 커서는 “some”
뒤, position 12
에 있다.
이 때, A는 “hello”
를, B는 “nice”
를 추가하고 싶다. 결국 동시 편집 상 원하는 결과는 “hello this is some nice text”
이다.
이 때, 각자의 position을 기준으로 동시편집이 이루어지면 A의 “hello”
에 의해 기존 텍스트가 밀려나면서 “hello this is nice some text”
와 같이 원하는 것과 다른 결과가 나올 수 있다.
이를 해결하기 위해 마치 사람이 이 문제를 해결하듯이, B의 “nice”
를 position 12
가 아닌, “some”
뒤에 추가하는 것이 CRDT의 기본적인 해결 방법이다.
</aside>