CAP 정리
서론
- CAP 이론은 분산 시스템 설계시 중요한 고려 사항
- 시스템에 요구사항에 따라 C, A, P에서 2가지만 만족하는 적절한 데이터베이스를 채택해야한다.
- 분산시스템은 동시에 2개 이상의 노드(물리, VM)에 데이터를 저장하는 시스템을 말한다.

CAP소개
CAP 정리는 분산 시스템에서 동시에 Consistency(일관성), Availability(가용성), **Partition Tolerance(분할 내성)를 모두 만족시킬 수 없다는 이론입니다. 세 가지 중에서 최대 두 가지만 선택 가능하다는 제한 속에서 시스템을 설계해야한다.
- 싸고, 빠르고, 좋은 서비스 중 2개를 골라라는 것. 이와 유사하게 논리를 적용해서 분산 시스템을 적용한다.
- 분산시스템은 동시 에 2개이상의 노드에 데이터를 저장하는 네트워크
- 모든 클라우드 애플리케이션은 분산 시스템이므로 클라우드 앱을 설계할때 CAP정리를 이해해야한다.
- 그래야 현 애플리케이션에서 가장 필요한 특성을 제공하는 데이터 관리 시스템을 선택할 수 있다.
- CAP 정리는 Brewer’s Theorem이라고도 불리는데, 이는 에릭 A. 브루어 교수가 분산 컴퓨팅에 관한 강연에서 주장했기 때문이다.
CAP에 대하여
CAP 정리가 말하는 분산 시스템의 3가지 특성에 대해 알아보자
일관성 Consistency
- 모든 노드에서 동일한 데이터를 볼 수 있는 특성, 모든노드는 동일한 데이터를 가진다.
- 이를 위해 데이터 쓰기가 발생하면, 해당 변경사항이 모든 노드에 반영된 후에야 쓰기 작업을 ‘성공’으로 간주합니다.
- 예시: A 노드에 X=5로 쓰기 요청 → 시스템은 B, C 노드에도 X=5를 모두 반영한 후에야 완료로 처리
가용성 Availability
- 모든 요청에 대해 항상 응답이 가능한 특성
- 일부 노드가 다운되어 응답을 못하는 상태이더라도 데이터를 요청하는 모든 클라이언트가 반드시 응답을 받을 수 있다. 시스템은 클라이언트의 요청에 반드시 응답해야한다.
- 한 노드에 새로운 데이터가 쓰여졌을 때 그 외 모든 노드는 입력된 데이터를 복제하여 업데이트한다. 일관성과는 다르게 모든 노드가 최신상태가 아닐 가능성이 존재.
- 이는 데이터 일관성을 희생하더라도 응답성을 우선시한다.
- 예시: 어떤 노드가 최신 데이터를 가지지 않더라도, 요청이 들어오면 그 시점에서 가능한 데이터를 응답한다.
분할내성 Partition-Tolerance
- 네트워크 분할(network partition)? 은 분산 시스템의 노드들 사이의 통신이 단절되거나 지연되는 현상을 의미한다.
- 즉, 노드 간 통신이 불가능하더라도 일부 노드에서 서비스가 계속 가능해야 하며, 데이터 일관성 또는 가용성을 유지하기 위한 선택이 필요합니다.
- 분할 내성이란? 이런 네트워크 장애 상황에서도 시스템이 전체적으로 동작을 계속 유지해야 함을 뜻합니다.
- 시스템의 노드 간 통신 중단이 있더라도 클러스터가 계속 작동해야 한다.
- 분할 내성 특성은 분산 시스템이라면 반드시 갖춰야 하는 전제 조건입니다. 현실에서 네트워크 장애는 반드시 발생하므로, CAP 정리에서 Partition Tolerance는 사실상 포기할 수 없는 요소로 간주됩니다.

CAP 정리의 선택과 3가지 조합 예시
CP (일관성 + 분할 내성)
- 네트워크 장애 상황에서도 일관성은 유지하지만, 일부 요청에 대해 응답이 지연되거나 실패할 수 있음. 예: HBase
AP (가용성 + 분할 내성)
- 항상 응답은 하되, 일관성이 일시적으로 깨질 수 있음. 예: Cassandra, DynamoDB
CA (일관성 + 가용성)
- 네트워크 분할이 없는 이상적인 환경에서만 가능. 현실에서는 불가능하다고 봄
CAP 정리 NoSQL 데이터베이스 유형
- NoSQL 데이터베이스는 분산 네트워크 애플리케이션에 적합
- 확장 가능한 관계형 데이터베이스와 달리, NoSQL데이터베이스는 수평적으로 확장 가능하고 설계상 분산 되어 있다.
- 즉 상호 연결된 여러 노드로 구성된 성장하는 네트워크에서 빠르게 확장할 수 있다.
CAP특성에 따라 현재 NoSQL 데이터베이스 분류
- CP 데이터베이스
- AP 데이터베이스
- CA 데이터베이스
CP 데이터베이스
- 가용성희생, 일관성과분할내성제공
- 두 노드 사이에 분할이 발생하면 시스템은 분할이 해결될떄까지 일관성이 없는 노드를 종료해야한다. (사용못하게 해야한다)
- 쉽게 말해 시스템 간 파티션이 발생하면 데이터 일관성없는 노드는 사용하지 못하게 종료한다.
AP 데이터베이스
- 일관성 희생, 가용성과 분할 내성제공
- 높은 가용성: 네트워크 분할 상황에서도 시스템이 멈추지 않고 서비스를 제공
- 확장성 : 노드를 추가하여 시스템 용량을 쉽게 확장할 수 있다.
- 쉽게 말해, 모든 노드는 사용할 수 있짐나 파티션이 발생한 노드는 이전데이터에 대한 응답을 할 수 있다.
- 분할이 해결되면 일반적으로 다시 데이터 동기화하여 시스템의 불일치를 복구한다.
- 단점 :
- 일관성측면에서 데이터변경후 일관성이 깨질 수 있다.
- 데이터 일관성 보장을 위한 추가 작업 필요, 데이터 일관성을 보장하려면 추가적인 처리가 있어야 한다.
CA데이터베이스
- 모든 노드에서 일관성과 가용성을 제공
- 다만 시스템에서 두 노드 사이에 분할이 발생할 경우 일관성과 가용성을 제공이 불가능하므로 내결함성을 제공할 수 없다.
- 한계 :
- 실제 분산 시스템 환경에서는 파티션을 피할 수 없기 때문에 CA분산 데이터는 이론적으로 가능할지라도 CA데이터베이슨 실제로는 존재불가
CAP 한계
- CAP 이론은 분산 시스템의 성질을 탁월하게 설명한다 .하지만 한계가 존재한다.
- CAP 이론에 따르면 분산 시스템은 CP이거나 AP이어야 한다. 왜냐하면 CA는 불가하기 때문
- 하지만 현실에서는 둘중 하나라고 명확히 구분지을 수 없다. 완벽한 CP, AP시스템은 사실상 쓸모가 없다
완벽한 CP 시스템
- 완벽한 일관성을 갖는 분산 시스템에서는 하나의 트랜잭션이 다른 모든 노드에 복제된 후에 완료된다.
- 이는 가용성뿐 아니라 성능저하가 발생한다. 이런 시스템은 하나의 노드라도 문제가 있으면 트랜잭션은 무조건 실패하고 노드가 늘어날수록 지연시간을 증가한다.
완벽한 AP 시스템
- 완벽한 가용성은 갖는 시스템은 모든 노드가 어떤 상황에서라도 응답가능해한다. 하나의 노드가 네트워크파티션으로 고립되어 있다면 이런 상황에서 고립된 노드가 가지고 있는 데이터는 무쓸모해진다. 고립된 노드는 다른 노드의 데이터를 복제하지 못한 상황이 되어 일관성이 깨진다.
- 고립된 노드는 응답을 한다면 완벽한 가용성충족
- 운 나쁘게 이 노드와 연결된 유저는 인지하지 못하고 계속해서 요청을 보내게 되는 불상사
정리
- 일관성과 가용성은 상충관계에 있다. 반드시 하나만을 선택해야하는 것은 아니고
- 완벽한 시스템간의 여러 조합이 가능하다는말이다. 예시 : 다소 강한 일관성 & 다소 약한 가용성
- 일관성과 가용성 수준을 선택하면 된다는 말이다.
CAP 정리
- 현실적인 한계가 분명하지만 CAP 정리는 매우 복잡한 주제를 이해하기 위한 단순화된 모델이라는 점에서 알아두어야 하는 이론이다.