Phase 3레슨 11
CAP Theorem
Consistency, Availability, Partition Tolerance — 분산 시스템의 불가능한 삼각형
💡ELI5·
쇼핑몰 재고와 CAP
핵심: 분산 시스템에서 네트워크가 끊기면(P), 데이터 일관성(C)과 서비스 가용성(A)을 동시에 100% 보장할 수 없다.
C (Consistency)
/ \
/ \ 파티션(P) 발생 시
/ P \ C와 A 중 하나를 포기해야
/ (필수)\ 한다. P는 현실이라 포기 불가.
A─────────A (Availability)💡 비유 — 두 창고가 네트워크로 연결되어 재고를 공유. 네트워크가 끊기면: (1) 일관성 선택 = 양쪽 모두 거래 중지(정확하지만 서비스 불가), (2) 가용성 선택 = 양쪽 각자 거래(서비스는 되지만 재고 불일치). 둘 다 완벽할 수 없다.
🔬Deep Dive·
CAP의 정의와 오해
CAP에서 Consistency는 ACID의 C가 아니다. CAP의 C는 '모든 노드가 같은 순간에 같은 데이터를 본다'는 선형 일관성(linearizability)을 의미한다. ACID의 C는 비즈니스 제약조건(예: 잔액 >= 0)의 무결성이다.
| 용어 | CAP의 의미 | 오해하기 쉬운 다른 개념 |
|---|---|---|
| Consistency | 선형 일관성: 모든 노드가 같은 시점에 같은 데이터 | ACID의 C(무결성 제약)가 아님 |
| Availability | 모든 요청이 응답을 받는다 (에러/타임아웃 아님) | 99.99% 업타임이 아님 |
| Partition Tolerance | 네트워크 분할 허용 | 선택이 아니라 현실 — 분산 시스템은 항상 P |
🔬Deep Dive·
CP vs AP 실제 시스템
| 시스템 | 분류 | 파티션 시 동작 | 적합한 사용 |
|---|---|---|---|
| HBase | CP | 파티션된 영역 응답 거부 | 엄격한 일관성 필요 (Hadoop) |
| Zookeeper | CP | 과반수 노드가 안 보이면 읽기/쓰기 거부 | 리더 선출, 설정 동기화 |
| MongoDB | CP (단일 Primary) | Primary가 보이지 않으면 쓰기 거부 | 일반 웹 (Primary-Replica) |
| Cassandra | AP | 어떤 노드든 응답 (stale 허용) | 높은 가용성, 쓰기 성능 |
| DynamoDB | AP (기본) | 최종 일관성 응답 | 대규모 웹 서비스 |
| Redis (Cluster) | AP (Gossip) | 파티션 시 양쪽 각자 동작 | 캐시, 세션 |
🔬Deep Dive·
PACELC — CAP의 한계 보완
CAP는 파티션(P) 상황만 다룬다. 하지만 정상 상태에서도 Latency와 Consistency 사이에 트레이드오프가 존재한다. PACELC는 이를 명시적으로 표현한다.
PACELC: if Partition (P): choose between A and C Else (E): choose between L and C PA/EL — Cassandra: 파티션 시 A, 정상 시 L (빠른 응답) PC/EC — Spanner: 파티션 시 C, 정상 시 C (강한 일관성) PA/EC — DynamoDB: 파티션 시 A, 정상 시 C (튜닝 가능)
⚖️Trade-off·
CP vs AP 선택 기준
| 상황 | 추천 | 이유 |
|---|---|---|
| 금융, 결제 | CP | 잔액 불일치 = 돈 유실 |
| 상품 추천, 피드 | AP | 잠깐 stale해도 비즈니스 영향 적음 |
| 장바구니, 세션 | AP | 사용자 경험 > 완벽한 일관성 |
| 재고 관리 | CP (또는 튜닝) | 오버셀링 방지 |
| 로그, 메트릭 | AP | 유실 허용, 가용성 우선 |
❓ 체크포인트 질문
- 1.CAP에서 P(Partition Tolerance)를 포기할 수 없는 이유는?
- 2.CP 시스템과 AP 시스템의 동작 차이는?
- 3.PACELC가 CAP을 어떻게 확장하는가?
- 4.Martin Kleppmann이 'CP/AP 라벨링을 멈춰라'고 한 이유는?
- 5.은행 시스템이 CP를 선택하는 이유는?