CAP
분산 시스템에서 일관성, 가용성, 분단 내성 세 가지를 동시에 모두 만족할 수 없다는 이론입니다.
3가지 속성
| 속성 | 설명 |
|---|---|
| C (Consistency) | 모든 노드가 항상 같은 데이터를 반환 |
| A (Availability) | 모든 요청에 항상 응답 |
| P (Partition Tolerance) | 네트워크 분단 발생해도 시스템 동작 |
핵심
셋 중 최대 2가지만 보장 가능
→ CA, CP, AP 중 하나 선택
네트워크 분단(Partition)이란?
노드 A ─── X ─── 노드 B
↑
네트워크 단절
→ 두 노드가 서로 통신 불가
→ 분산 시스템에서 언제든 발생 가능
CA, CP, AP 비교
[CA - 일관성 + 가용성]
네트워크 분단 발생 시 시스템 중단
→ 분산 시스템에서 현실적으로 불가능
→ 단일 노드 DB (전통적 RDBMS)
[CP - 일관성 + 분단 내성]
분단 발생 시 일관성 위해 가용성 포기
→ 응답 불가 상태 허용
→ HBase, Zookeeper, MongoDB(설정에 따라)
[AP - 가용성 + 분단 내성]
분단 발생 시 가용성 위해 일관성 포기
→ 오래된 데이터 반환 가능
→ Cassandra, DynamoDB, CouchDB
실제 상황으로 이해하기
노드 A, 노드 B가 있는데 네트워크 분단 발생
[CP 선택]
"일관성이 중요하니 B가 정상화될 때까지 응답 안함"
→ 서비스 중단 but 데이터 정확 O
[AP 선택]
"일단 응답은 해야하니 A의 데이터로 응답"
→ 서비스 유지 O but 데이터 불일치 가능
대표 DB 분류
| DB | 분류 | 이유 |
|---|---|---|
| MySQL, PostgreSQL | CA | 단일 노드, 분단 내성 미고려 |
| HBase | CP | 일관성 우선, 분단 시 중단 |
| MongoDB | CP | 기본 설정 시 일관성 우선 |
| Cassandra | AP | 가용성 우선, 최종 일관성 |
| DynamoDB | AP | 가용성 우선, 최종 일관성 |
| Redis | CP | 일관성 우선 |
최종 일관성 (Eventual Consistency)
AP 시스템의 타협점
지금 당장은 불일치할 수 있지만
→ 시간이 지나면 결국 일치하게 됨
ex) DNS, 쇼핑몰 재고
"잠깐 재고가 틀릴 수 있지만 결국엔 맞춰짐"
실무에서의 선택 기준
금융, 결제 → CP (데이터 정확성 최우선)
SNS, 조회수 → AP (약간의 불일치 허용)
CAP 이론은 분산 시스템 설계 시 어떤 속성을 포기할지 명확히 결정하도록 강제하며, 현실에서는 네트워크 분단이 언제든 발생할 수 있어 CP vs AP 선택이 핵심입니다.