Phase 3레슨 12
Consistency Model
Strong, Sequential, Causal, Eventual, Read-Your-Writes — 얼마나 '최신'이어야 하는가
💡ELI5·
SNS 댓글과 일관성
Strong: 방금 쓴 글 → 모든 사용자가 즉시 본다 (느림) Eventual: 방금 쓴 글 → 몇 초 뒤 전파 (빠름, 일시적 불일치) Causal: 댓글→대댓글 순서는 보장, 동시 댓글 순서는 미보장 Read-Your-Writes: 내가 쓴 글은 내가 무조건 본다 (타인은 eventual)
💡 비유 — Strong = 생방송 (모든 TV가 동시에 같은 화면). Eventual = 뉴스 다시보기 (업로드되면 결국 다 볼 수 있지만, 시차 발생). Read-Your-Writes = 내가 찍은 사진은 내 폰에 바로 보임 (다른 사람은 나중에 공유 피드에서 봄).
🔬Deep Dive·
일관성 모델 계층
강함 ←─────────────────────────────────→ 약함 Linearizable > Sequential > Causal > Read-Your-Writes > Eventual (Strong) (같은 순서) (인과순서) (자기 쓰기 보장) (수렴만)
| 모델 | 보장 | 지연 | 사용 예 |
|---|---|---|---|
| Linearizable (Strong) | 모든 읽기 = 최신 쓰기 | 높음 (동기화 필요) | 결제, 좌석 예약 |
| Sequential | 모든 노드가 같은 순서로 봄 | 높음 | 분산 로그, Zookeeper |
| Causal | 인과관계 순서 보장 | 중간 | 댓글 스레드, 협업 문서 |
| Read-Your-Writes | 자기 쓰기는 자기가 볼 수 있음 | 낮음 | 사용자 프로필 수정 |
| Monotonic Read | 더 과거로 돌아가지 않음 | 낮음 | 피드 새로고침 |
| Eventual | 결국 수렴 (시점 미보장) | 최저 | 좋아요 수, 조회수 |
🔬Deep Dive·
Read-Your-Writes 구현 방법
사용자가 쓰기를 수행한 후 읽을 때, 자신의 쓰기가 아직 Replica에 전파되지 않았다면 stale data를 보게 된다. 이를 해결하는 방법:
| 방법 | 동작 | 단점 |
|---|---|---|
| Sticky Session | 같은 사용자를 같은 노드로 라우팅 | 부하 불균형, 노드 장애 시 문제 |
| Read-after-Write 대기 | 쓰기 후 복제 완료 대기 후 읽기 | 지연 증가 |
| Version Token | 쓰기 시 버전 반환, 읽기 시 해당 버전 이상 확인 | 구현 복잡 |
| Primary 읽기 | 쓰기를 수행한 Primary에서 읽기 | Primary 부하 |
⚖️Trade-off·
일관성 vs 성능
일관성이 강할수록 모든 복제본을 동기화해야 하므로 지연이 증가하고 가용성이 감소한다. 반대로 일관성이 약할수록 지연은 줄지만 일시적 불일치를 애플리케이션이 감당해야 한다.
실용적 접근: 데이터 종류별로 다른 일관성 적용. 결제 = Strong, 피드 = Eventual, 프로필 = Read-Your-Writes. 모든 데이터에 Strong을 적용하는 것은 비용 낭비다.
❓ 체크포인트 질문
- 1.Strong Consistency와 Eventual Consistency의 핵심 차이는?
- 2.Read-Your-Writes Consistency가 왜 사용자 경험에 중요한가?
- 3.Causal Consistency는 Strong과 Eventual 사이에서 무엇을 보장하는가?
- 4.Cosmos DB의 5단계 일관성 수준이 실용적인 이유는?
- 5.Monotonic Read Consistency가 해결하는 문제는?