CAP 이론: 분산 시스템이 동시에 가질 수 없는 것들
일관성·가용성·분할 내성을 동시에 만족할 수 없다는 CAP 이론의 트레이드오프와 CP·AP 시스템 설계 전략, PACELC 확장 모델을 정리한다.
2026-08-13 · 최초 발행 2025-05-23
분산 시스템이 절대 다 가질 수 없는 것
Eric Brewer 교수가 2000년 처음 제안한 CAP 이론은 분산 시스템을 설계할 때 부딪히는 근본적인 트레이드오프를 설명한다. 2002년 MIT의 Seth Gilbert와 Nancy Lynch가 이를 수학적으로 증명했다. 분산 시스템은 다음 보장(guarantees) 중 동시에 최대 두 가지만 충족할 수 있다.
- 일관성(Consistency): 모든 노드가 동일한 시점에 동일한 데이터를 볼 수 있음
- 가용성(Availability): 모든 요청이 성공 또는 실패로 응답받음
- 분할 내성(Partition Tolerance): 네트워크 분할(장애) 상황에서도 시스템이 계속 작동함
일관성: 어디서 읽어도 같은 데이터
모든 노드가 동일한 시간에 동일한 데이터를 보는 것을 뜻한다. 일관성이 보장되면 사용자는 어떤 노드에 접근하든 항상 최신 데이터를 읽을 수 있다. 강한 일관성(Strong Consistency)은 모든 읽기 작업이 가장 최근에 쓰인 데이터를 반환함을 보장한다. 2단계 커밋(Two-Phase Commit), 분산 잠금(Distributed Locking), 쿼럼 기반 알고리즘(Quorum-based algorithms)으로 구현한다.
가용성: 응답은 언제나 온다
모든 요청에 대해 성공이든 실패든 응답할 수 있는 능력이다. 장애가 발생하지 않은 노드는 합리적인 시간 안에 모든 요청에 응답해야 한다. 가용성이 중요한 시스템은 일부 노드에 장애가 나도 서비스가 멈추지 않는다. 다중 복제(Multiple Replications), 로드 밸런싱, 샤딩, 장애 감지·복구 메커니즘으로 구현한다.
분할 내성: 네트워크가 끊겨도 계속 돈다
네트워크 분할(파티션), 즉 노드 간 통신이 일시적으로 끊기는 상황에서도 시스템이 계속 작동하는 능력이다. 대규모 분산 시스템에서 네트워크 문제는 피할 수 없기 때문에 대부분의 분산 시스템은 P를 필수로 고려한다. 멀티존 아키텍처, 데이터 복제, 비동기 통신 메커니즘으로 구현한다.
결국 둘만 고를 수 있다
분산 시스템은 일관성(C), 가용성(A), 분할 내성(P) 중 둘만 동시에 만족시킬 수 있다.
**CP 시스템(일관성 + 분할 내성)**은 네트워크 분할이 생기면 일관성을 우선해 일부 노드의 가용성을 희생한다. 모든 노드가 같은 데이터를 보도록 보장하려고 쓰기 작업이 모든 노드에 전파될 때까지 기다린다. 금융 거래 시스템, 은행 시스템, 예약 시스템에 적합하고 HBase, MongoDB(기본 구성), Redis, Zookeeper가 이 방식을 쓴다.
**AP 시스템(가용성 + 분할 내성)**은 네트워크 분할이 생기면 가용성을 우선해 일시적인 일관성 부족을 허용한다. 모든 노드가 항상 읽기·쓰기 요청에 응답하고 최종 일관성(Eventual Consistency) 모델을 채택한다. 소셜 미디어, 콘텐츠 전송 네트워크(CDN), 실시간 분석 시스템에 적합하고 Amazon DynamoDB, Cassandra, CouchDB, Riak이 대표적이다.
**CA 시스템(일관성 + 가용성)**은 이론적으로는 가능하지만, 실제 분산 환경에서는 네트워크 분할을 고려하지 않을 수 없다. 그래서 실질적으로는 단일 노드 시스템이나 네트워크 분할이 절대 발생하지 않는 환경에서만 가능하며, 현대적 분산 시스템에서는 거의 존재하지 않는다. 단일 노드로 구성된 전통적인 RDBMS나 분산 구성이 없는 MySQL, PostgreSQL이 여기 해당한다.
CAP을 넘어서려는 시도
실제 시스템 설계에서는 CAP의 이분법적 선택이 아니라 연속적인 스펙트럼에서 최적점을 찾아야 한다.
Daniel Abadi가 제안한 PACELC 이론은 CAP 이론의 확장 모델이다. 네트워크 분할(P)이 있을 때는 가용성(A)과 일관성(C) 중 선택하고, 분할이 없을 때(E)는 지연 시간(L)과 일관성(C) 중 선택한다는, 더 현실적인 분산 시스템 설계 가이드다.
강한 일관성과 약한 일관성 사이에도 점진적 일관성 모델의 다양한 중간 단계가 있다 — 선형화 가능성(Linearizability), 인과적 일관성(Causal Consistency), 세션 일관성(Session Consistency), 최종 일관성(Eventual Consistency).
은행 송금과 소셜 피드가 보여주는 차이
은행 송금 시스템은 CP 중심으로 설계한다. 일관성이 가장 중요한 요소라, 송금 트랜잭션은 모든 노드에서 일관되게 반영돼야 한다. 네트워크 분할이 발생하면 일부 서비스 지연이나 일시적 불가능 상태를 허용한다 — 잘못된 잔액 정보를 제공하는 것보다 서비스를 거부하는 편이 낫다는 판단이다.
소셜 미디어 피드는 AP 중심으로 설계한다. 가용성이 일관성보다 우선이라 사용자는 항상 피드를 볼 수 있어야 한다. 네트워크 분할이 발생하면 일부 최신 게시물이 즉시 보이지 않을 수 있지만, 나중에 동기화되며 최종적으로 일관성을 확보한다.
한 시스템 안에서도 다르게 선택할 수 있다
단일 시스템 안에서도 데이터 유형에 따라 다른 CAP 특성을 적용하는 하이브리드 접근이 가능하다. 전자상거래 플랫폼이라면 주문 처리·재고 같은 중요 트랜잭션 데이터는 CP 특성(MongoDB)으로, 사용자 추천·검색 같은 분석·통계 데이터는 AP 특성(Elasticsearch)으로 구성하는 식이다.
정상 작동 시와 장애 상황에서 다른 동작 방식을 택할 수도 있다. 정상 작동 시에는 CA 시스템처럼 동작하다가, 네트워크 분할이 생기면 CP 또는 AP로 자동 전환하는 설계다. Amazon Aurora의 장애 조치 메커니즘이 이런 예시다.
이분법으로 오해하기 쉬운 이론
CAP 이론은 이분법적으로 해석되는 경향이 있지만, 실제로는 일관성과 가용성이 연속적인 스펙트럼이다. "2개만 선택"이라는 표현은 단순화된 것이라 오해를 낳는다. 모든 분산 시스템은 네트워크 분할에 대응해야 하므로 P는 사실상 필수이고, 실제 선택은 "네트워크 분할 시 C와 A 중 무엇을 우선시할 것인가"의 문제에 가깝다.