# CAP 정리

CAP 정리는 분산 데이터베이스 시스템이 CAP 중 2개의 속성만을 제공할 수 있다는 이론임.

CAP 정리에 따르자면, 일관성(Consistenct), 가용성(Availability), 분할 내성(Partition Tolerance) 등 3가지 속성을 모두 만족하는 분산 데이터베이스 시스템은 존재하지 않음.

### 각 속성

* **일관성(Consistency)** : 모든 클라이언트 요청은 어느 노드에 연결되어도 같은 데이터를 볼 수 있음을 의미
* **가용성(Availability)** : 노드 일부에 문제가 발생하여도 시스템은 클라이언트의 모든 요청에 유효한 응답을 전해줄 수 있어야함을 의미.
* **분할 내성(Partition Tolerance)** : 노드 사이에 통신이 불가능한 상황(파티션) 에서도 시스템이 계속 동작한다는 것을 의미함.

### 각 속성의 조합&#x20;

3개의 분산된 데이터베이스가 존재한다고 가정하면, 해당 분산 데이터베이스 시스템에서는 특정 서버에 쓰기 작업이 발생하면 나머지 서버에 데이터가 전파됨.

이때, 만약 A 파티션(1대의 노드), B 파티션(2대의 노드) 으로 네트워크가 분할되었다면 이때 파티션간 노드들은 서로 통신할 수 없기 때문에 데이터 전파가 불가능함.

CA 시스템은 일관성과 가용성을 지원하며 분할 내성을 희생함. 하지만, 통상적으로 네트워크 장애는 피할 수 없는 일로 여겨지므로 분산 시스템에서 분할 내성은 희생하기 어려움. 따라서 실세계에 CA 시스템은 존재하지 않음.

그러면 CP 혹은 AP 시스템이 현실적인 대안이 될 수 있는데, 파티션이 발생한 상황에서 CP 시스템은 파티션이 해결되기 전까지 다른 데이터베이스의 연산을 중단 시켜 일관성을 지키고 가용성을 희생함.

반면, AP 시스템은 파티션 문제가 발생해도 읽기 및 쓰기 작업을 중단하지 않음. 이 경우 일관성은 희생되지만 파티션 문제가 해결되는 경우 동기화 작업을 수행하여 최종적인 일관성을 보장할 수 있음.
