μ‹€μ‹œκ°„ ν˜‘μ—… μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ μ–΄λ–»κ²Œ λ™μž‘ν•˜λŠ” 걸까? (CRDT와 OT)

2024. 3. 11. 22:02γ†πŸ“š Book/데이터 쀑심 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 섀계

μ„œλ‘ 

ꡬ글 λ…μŠ€, λ…Έμ…˜, ν”Όκ·Έλ§ˆ 같은 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œλŠ” λ™μΌν•œ νŽ˜μ΄μ§€λ‚˜ 화면을 λ‹€μˆ˜μ˜ μ‚¬μš©μžκ°€ λ™μ‹œμ— νŽΈμ§‘ν•  수 μžˆλŠ” κΈ°λŠ₯을 μ œκ³΅ν•œλ‹€. μ΄λŸ¬ν•œ μ‹€μ‹œκ°„ ν˜‘μ—… μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ μ—¬λŸ¬λͺ…이 λ™μ‹œμ— 컨텐츠λ₯Ό νŽΈμ§‘ν•˜λ”λΌλ„ 결과적으둜 λ™μΌν•œ λ‚΄μš©μœΌλ‘œ 수렴(Convergence)ν•˜λŠ” νŠΉμ§•μ„ 가진닀.

이런 κΈ°μˆ μ€ μ–΄λ–€ μ›λ¦¬λ‘œ κ΅¬ν˜„λμ„κΉŒ? λŒ€ν‘œμ μΈ 기술둜 OT(Operation Transformation) 와 CRDT(Conflict-free Replicated Data Types) κ°€ μžˆλ‹€. 각 기술의 νŠΉμ§•κ³Ό μž₯단점을 μ•„λž˜μ—μ„œ 더 μžμ„Ένžˆ 닀뀄보겠닀.

 

 


OT

OT : Operational Transformations (1989 ~ 2006)

OT λŠ” 2006λ…„ μ •λ„κΉŒμ§€ μ‚¬μš©λœ 기술둜 Google Docs 와 MS Office 에 μ‚¬μš©λλ‹€.

μ‹€μ œλ‘œ ꡬ글 λ…μŠ€λŠ” 2006년에 μΆœμ‹œλλ‹€. 18λ…„ μ „ γ„·γ„·

 

OT λŠ” μ˜€νΌλ ˆμ΄μ…˜(μž‘μ—…)이 이전 λ™μž‘μ˜ 영ν–₯으둜 λ‹€μŒ λ™μž‘μ„ transform(λ³€ν™˜) μ‹œν‚€λŠ” 것, 즉 두가지 μž‘μ—…μ΄ 거의 λ™μ‹œμ— μΌμ–΄λ‚œλ‹€κ³  κ°€μ •ν•˜λ©΄ 첫번째 μž‘μ—…μ— μ˜ν•΄ λ‘λ²ˆμ§Έ μž‘μ—…μ΄ 영ν–₯을 λ°›μ•„ λ³€κ²½(transform)λ˜λŠ” 것을 μ˜λ―Έν•œλ‹€.  μ•„λž˜ μ΄λ―Έμ§€μ²˜λŸΌ μ„œλ‘œ λ‹€λ₯Έ 두λͺ…μ˜ Userκ°€ HAT λ¬Έμžμ—΄μ„ μˆ˜μ •ν•˜λŠ” 상황을 κ°€μ •ν•΄λ³΄μž. μ„œλ²„κ°€ OT λ°©μ‹μœΌλ‘œ μž‘μ—…μ„ μ²˜λ¦¬ν•˜λ©΄ μ–΄λ–€ κ²°κ³Όκ°€ λ‚˜μ˜¬κΉŒ?

 

User1 λŠ” λ¬Έμžμ—΄ κ°€μž₯ μ•žμ— Cλ₯Ό μΆ”κ°€ν•˜κ³ , User2 λŠ” κ°€μž₯ 처음의 문자 Hλ₯Ό μ‚­μ œν–ˆλ‹€. κ°œλ³„ μœ μ €λ‘œλΆ€ν„° λ°œμƒν•œ operations 은 μ„œλ²„λ₯Ό 톡해 μ²˜λ¦¬λ˜λŠ”λ°, 이 λ•Œ User1의 μž‘μ—…μ΄ User2보닀 λ¨Όμ € μˆ˜ν–‰λœλ‹€κ³  κ°€μ •ν•˜μž. 문자 C μž…λ ₯으둜 κ·Έ μ΄ν›„μ˜ λͺ¨λ“  λ¬Έμžλ“€μ€ λͺ¨λ‘ 1μ”© μΈλ±μŠ€κ°€ λ’€λ‘œ λ°€λ¦¬κ²Œ 되고, 결과적으둜 User2의 operations 은 λ‘λ²ˆμ§Έ 문자 μ‚­μ œλ‘œ μΈλ±μŠ€κ°€ λ³΄μ •λ˜μ–΄ μ „λ‹¬λœλ‹€.

즉 User2의 operation은 μ‹€μ œ μ˜λ„ν•œ κ²ƒκ³ΌλŠ” 쑰금 λ³€κ²½λœ(transform) μ˜€νΌλ ˆμ΄μ…˜μœΌλ‘œ μ „λ‹¬λ˜μ–΄ λ¬Έμ„œ μŠ€νŠΈλ¦Όμ— μ μš©λœλ‹€.

 

 

 

 

 

User1 의 operation 이 적용되면 κΈ°μ‘΄ HAT 의 문자 λ°°μ—΄ μŠ€νŠΈλ¦Όμ€ μΈλ±μŠ€κ°’μ΄ λ³€κ²½λœλ‹€. κ·Έλ ‡κΈ° λ•Œλ¬Έμ— Hλ₯Ό μ‚­μ œν•˜λ €κ³  ν•œ User2 의 operation 은 delete at 0 μ—μ„œ delete at 1 둜 λ³€κ²½(transform) λ˜λŠ” 것이닀.

 

OT 의 단점

μœ„μ—μ„œ μ–ΈκΈ‰ν•œλŒ€λ‘œ Operation 의 μˆ˜μ •(transformation)은 쀑앙 집쀑식 μ„œλ²„μ—μ„œ μˆ˜ν–‰λœλ‹€. μ΄λŠ” 곧 단일 μ„œλ²„μ—μ„œ operation 이 μˆ˜ν–‰κΈ° λ•Œλ¬Έμ— μ‚¬μš©μžκ°€ λͺ°λ¦΄ λ•ŒλŠ” μ‹œμŠ€ν…œ κ³ΌλΆ€ν•˜κ°€ λ°œμƒν•  μˆ˜λ„ μžˆλ‹€. 라고 λ§Žμ€ λ¬Έμ„œμ— λ‚˜μ™€μžˆμ§€λ§Œ… 사싀 ꡬ글 λ…μŠ€κ°€ κ³ΌλΆ€ν•˜λœ κ±Έ 직접 κ²½ν—˜ν•œ 적이 μ—†μ–΄μ„œ 단점이 ν”ΌλΆ€λ‘œ 와닿지 μ•Šμ•˜λ‹€. ν•˜μ§€λ§Œ μ’€ 더 생각해보면 μ‹€μ§ˆμ μœΌλ‘œ λ¬Έμ„œλ₯Ό μ €μž₯ν•˜λŠ” 것도 μ•„λ‹Œλ° 맀 μž…λ ₯λ§ˆλ‹€ μ„œλ²„λ‘œ 데이터λ₯Ό 전솑해야 ν•œλ‹€. νŠΉμ • λ¬Έμ„œλ₯Ό νŽΈμ§‘ν•˜κ³  μžˆλŠ” ν΄λΌμ΄μ–ΈνŠΈ 끼리만 ν†΅μ‹ ν•˜μ—¬ 변경사항을 μ μš©ν•˜κ³  μ΅œμ’… λ¬Έμ„œλ₯Ό μ €μž₯ν•  λ•Œλ§Œ μ„œλ²„λ‘œ μ „μ†‘λ˜λ©΄ 좩뢄할텐데 말이닀.

 


CRDT

 

CRDT: Conflict-free Replicated Data Types (2006 ~ present)

2006λ…„ 이후 λΆ€ν„°λŠ” OT λ₯Ό λŒ€μ²΄ν•˜μ—¬ CRDT 방식이 더 κ³½κ΄‘λ°›κ³  μžˆλ‹€. CRDT 의 μž₯점은 λ™μ‹œμ„±μ΄ μš”κ΅¬λ˜λŠ”, 즉 μ‹€μ‹œκ°„μœΌλ‘œ ν˜‘μ—…ν•΄μ•Ό ν•˜λŠ” ν΄λΌμ΄μ–ΈνŠΈ 끼리만 데이터λ₯Ό κ΅ν™˜ν•˜λ©΄ λœλ‹€λŠ” 점이닀. μ΄λŠ” OT의 단점을 μ™„λ²½νžˆ λ³΄μ™„ν•˜λŠ” νŠΉμ§•μœΌλ‘œ μ„œλ²„μ— λŒ€ν•œ 의쑴과 λΆ€ν•˜λ₯Ό μ€„μ΄λŠ” νš¨κ³Όμ™€ 각 μœ μ €λ“€μ΄ μž‘μ—…ν•  λ•Œ 더 λΉ λ₯Έ λ°˜μ‘μ†λ„λ₯Ό λ‚Ό 수 μžˆλ‹€.

 

CRDT λŠ” conflict-free replicated data type 의 μ•½μžλ‘œ μΆ©λŒμ—†λŠ” 볡제된 데이터 νƒ€μž…μ„ μ˜λ―Έν•œλ‹€. 볡제된 데이터 νƒ€μž…μ΄ 무슨 의미일까? μ„œλ‘œ λ‹€λ₯Έ 컴퓨터(peer) 에 μ €μž₯ν•  수 μžˆλŠ” 데이터 ꡬ쑰의 ν•œ νƒ€μž…μ΄λΌ 생각할 수 μžˆλ‹€. μ—¬κΈ°μ„œ μ„œλ‘œ λ‹€λ₯Έ μ»΄ν“¨ν„°λž€ (ν”Όκ·Έλ§ˆλ₯Ό 예λ₯Ό λ“€λ©΄) λ™μΌν•œ ν”Όκ·Έλ§ˆ νŽ˜μ΄μ§€λ₯Ό 보고 μžˆλŠ” λ‹€μˆ˜μ˜ μ‚¬μš©μžλ₯Ό μ˜λ―Έν•œλ‹€.

각 ν”Όμ–΄λŠ” 자체 μƒνƒœλ₯Ό λ‹€λ₯Έ ν”Όμ–΄λ₯Ό ν™•μΈν•˜κΈ° μœ„ν•œ λ„€νŠΈμ›Œν¬ μš”μ²­ 없이 μ¦‰μ‹œ μ—…λ°μ΄νŠΈ ν•  수 μžˆλ‹€. λ‹€λ₯Έ ν”Όμ–΄μ˜ μž‘μ—… 내역에 따라 μžμ‹ μ˜ μž‘μ—…(operation)을 μˆ˜μ •ν–ˆλ˜ OT 방식과 μ–΄λ–€ 차이가 μžˆλŠ”μ§€ ν™•μ—°νžˆ μ•Œ 수 μžˆλ‹€. λ•Œλ¬Έμ— 각 ν”Όμ–΄λŠ” μ„œλ‘œ λ‹€λ₯Έ μ‹œκ°„μ— μ„œλ‘œ λ‹€λ₯Έ μƒνƒœλ₯Ό κ°€μ§ˆ 수 μžˆμ§€λ§Œ κ²°κ΅­ μ΅œμ’…μ μœΌλ‘œ ν•˜λ‚˜μ˜ ν•©μ˜λœ μƒνƒœλ‘œ 수렴(convergence)ν•˜κ²Œ λœλ‹€.

μ–΄λ–€ μ›λ¦¬λ‘œ 각 peer λŠ” ν•˜λ‚˜μ˜ μƒνƒœλ‘œ μˆ˜λ ΄ν•  수 μžˆμ„κΉŒ? μ•„λž˜ μ˜ˆμ‹œ 이미지λ₯Ό 보자.

 

User A : l 을 o 와 o 사이에 μ‚½μž…ν•œλ‹€.

User B : ? λ₯Ό o 와 ! 사이에 μ‚½μž…ν•œλ‹€.

 

μ΄μ „μ˜ OT λŠ” κΈ°μ‘΄ λ¬Έμžμ—΄μ˜ 인덱슀 값을 λͺ¨λ‘ μˆ˜μ •ν•˜λ©΄μ„œ μƒˆλ‘œμš΄ 값을 μ‚½μž…ν–ˆλ‹€. ν•˜μ§€λ§Œ CRDT λŠ” λ¬Έμžμ—΄μ˜ 각 λ¬Έμžμ— identifier λΌλŠ” μœ λ‹ˆν¬ν•œ 값을 λΆ€μ—¬ν•œλ‹€. 즉 OT 처럼 λ¬Έμžμ—΄μ΄ μˆ˜μ •λ  λ•Œ λ§ˆλ‹€ μΈλ±μŠ€κ°€ μˆ˜μ •λ˜λŠ” 것이 μ•„λ‹ˆλΌ, λ¬Έμžμ—΄μ˜ 변경이 μžˆμ–΄λ„ 초기의 μœ λ‹ˆν¬ 값을 κ·ΈλŒ€λ‘œ μœ μ§€ν•  수 μžˆλ‹€.

 

μ–΄λ–€ 변경사항이 생기면 μˆœμ„œμ™€ 상관없이 μƒνƒœλ₯Ό μˆ˜μ •ν•  수 μžˆλ‹€. μž‘μ—…μ˜ μˆœμ„œλ₯Ό μœ μ§€ν•˜λŠ” μ„œλ²„λ„ μ—†κΈ° λ•Œλ¬Έμ— 쀑앙 μ„œλ²„λ„ ν•„μš”ν•˜μ§€ μ•Šλ‹€. λ¬Έμ„œλ₯Ό νŽΈμ§‘ν•˜λŠ” μœ μ €λΌλ¦¬λ§Œ(peer to peer) 데이터λ₯Ό κ΅ν™˜ν•˜λ©΄ λ˜λ―€λ‘œ 속도가 λΉ λ₯΄κ³  μ„œλ²„ λΆ€ν•˜λ₯Ό 쀄일 수 μžˆλŠ”  μž₯점이 μžˆλ‹€.

 

CRDT 의 μ‚­μ œλŠ” μ•„λž˜μ²˜λŸΌ λ™μž‘ν•œλ‹€. λ™μΌν•œ 문자λ₯Ό μ‚­μ œν•˜λŠ” 경우라면 λΆ„λͺ… λ™μΌν•œ identifier λ₯Ό κ°€μ§€λŠ” 문자λ₯Ό μ‚­μ œν•˜κ²Œ λœλ‹€. μœ„μΉ˜ 기반이 μ•„λ‹Œ id 기반으둜 μ‚­μ œκ°€ 이뀄지기에 이미 μ‚­μ œλœ id λŠ” 더 이상 μ‘΄μž¬ν•˜μ§€ μ•Šμ•„ 쀑볡 μ‚­μ œ λ¬Έμ œλ„ λ°œμƒν•˜μ§€ μ•ŠλŠ”λ‹€.

 

CRDT 의 ν•œκ³„

그럼 CRDTλŠ” κ·Έμ € μ™„λ²½ν•˜κΈ°λ§Œ ν• κΉŒ? 

 

1. μš°μ„  각 피어에 문자슀트림과 λ”λΆˆμ–΄ identifierλ₯Ό μΆ”κ°€λ‘œ (tree ꡬ쑰둜)μ €μž₯ν•˜κΈ° λ•Œλ¬Έμ— λ§Žμ€ λ©”λͺ¨λ¦¬λ₯Ό μ†Œλͺ¨ν•œλ‹€.

2. CRDT λŠ” 쀑앙 집쀑 μ„œλ²„μ—†μ΄ 각 피어끼리 ν†΅μ‹ ν•œλ‹€κ³  μ•žμ„œ λ§ν–ˆλ‹€. 그럼 각 피어끼리 톡신이 κ°€λŠ₯ν•˜μ§€ μ•ŠλŠ” 상황이라면?.?λ„€νŠΈμ›Œν¬ 연결이 λΆˆκ°€λŠ₯ν•˜λ©΄ 각 ν”Όμ–΄λŠ” μžμ‹ μ˜ 변경사항을 λ„€νŠΈμ›Œν¬ 볡ꡬ 후에 λ‹€λ₯Έ ν”Όμ–΄λ“€κ³Ό λ™κΈ°ν™”ν•˜μ—¬ μ „νŒŒν•  수 μžˆλ‹€.λ¬Όλ‘  볡ꡬ μ‹œκ°„μ΄ 였래 걸릴수둝 데이터 일관성을 μœ μ§€ν•˜λŠ” 데 κ±Έλ¦¬λŠ” μ‹œκ°„λ„ λŠ˜μ–΄λ‚  수 μžˆλ‹€.

3. CRDT λŠ” μ‹œκ°„(μˆœμ„œ)기반이 μ•„λ‹Œ 고유 IDλ₯Ό 기반으둜 λ™μž‘ν•˜κΈ° λ•Œλ¬Έμ— merge κ³Όμ •μ—μ„œ μ‹€μ‹œκ°„μ„±μ΄ λͺ¨ν˜Έν•΄μ§ˆ 수 μžˆλ‹€. μ•„λž˜ μ˜ˆμ‹œμ²˜λŸΌ 동기화 κ²°κ³Ό λ¬Έμžμ—΄μ΄ μ„žμ—¬ μ˜λ„μΉ˜ μ•Šμ€ 결과물이 λ‚˜μ˜¬ 수 μžˆλ‹€. 이런 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ λ‹€μ–‘ν•œ μ•Œκ³ λ¦¬μ¦˜ 기법(Logoot, LSEQ, RGA, Treedoc, WOOT, Astrong etc)이 λ‚˜μ˜€κ³  μžˆμ§€λ§Œ, μ–΄λ–€ μΌ€μ΄μŠ€λŠ” 사싀상 근본적인 해결이 νž˜λ“€κΈ°λ„ ν•˜λ‹€.

 


 

κ²°λ‘ 

CRDT와 OTλŠ” λͺ¨λ‘ λΆ„μ‚° μ‹œμŠ€ν…œμ—μ„œ 데이터 일관성을 μœ μ§€ν•˜κ³  λ™μ‹œ μˆ˜μ • μΆ©λŒμ„ ν•΄κ²°ν•˜κΈ° μœ„ν•œ λ°©λ²•λ‘ μœΌλ‘œ μ‚¬μš©λœλ‹€. 각각의 방법은 κ³ μœ ν•œ νŠΉμ§•κ³Ό μž₯단점을 가지고 μžˆμœΌλ‚˜ κ²°κ΅­ μ•žμœΌλ‘œλ„ OT 와 κ΄€λ ¨λœ μž‘μ—…μ€ ν•„μš”μ—†μ„ κ²ƒμœΌλ‘œ μ˜ˆμƒλœλ‹€. OT의 λͺ¨λ“  κΈ°λŠ₯이 CRDT에 λŒ€μž…ν•  수 μžˆμ§€λ§Œ, κ·Έ λ°˜λŒ€λŠ” λΆˆκ°€λŠ₯ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€. ν•™κ³„μ—μ„œλŠ” CRDT와 κ΄€λ ¨λœ 학문적인 뢀뢄은 거의 μ™„μ„±λ˜μ—ˆκ³  이제  ν›Œλ₯­ν•œ κ΅¬ν˜„μ²΄κ°€ ν•„μš”ν•œ μ‹œμ μ΄λΌκ³  λ³Ό 수 μžˆλ‹€.

 

 

 

reference

- μƒˆλ‘œμš΄ μ—…λ¬΄ν™˜κ²½μ˜ λŒ€λ‘, λ™μ‹œ νŽΈμ§‘ 기술

- CRDT vs OT

- (λ²ˆμ—­) CRDT에 λŒ€ν•œ μΈν„°λž™ν‹°λΈŒ μž…λ¬Έ