📑What is the CAP theorem?
What is the CAP theorem?
2025.4.21 챌린지 성공✅
CAP 이론은 분산 시스템이 일관성, 가용성, 파티션 내성 이 세 가지 특성 중 두 가지만을 제공할 수 있다는 것이다. 이는 "싸고, 빠르고, 좋은 것 중에 두 개를 고르라"는 말과 유사한 논리이다.
분산 시스템은 여러 노드에 데이터를 동시에 저장하는 네트워크이며. 모든 클라우드 애플리케이션은 분산 시스템이므로, 애플리케이션의 요구 사항에 맞는 데이터 관리 시스템을 선택하기 위해 CAP 이론을 이해하는 것이 중요하다. CAP 이론은 브루어 교수가 2000년에 처음 제시했고, 2년 후 길버트와 린치가 증명했다.
CAP 이론의 세 가지 특성은 다음과 같다.
- 일관성: 어떤 노드에 연결하든 모든 클라이언트가 같은 시점에 같은 데이터를 보는 것을 의미한다. 이를 위해 데이터가 하나의 노드에 쓰이면, 쓰기가 '성공'으로 처리되기 전에 다른 모든 노드에 즉시 전달되거나 복제되어야 한다.
- 가용성: 하나 이상의 노드가 다운되더라도 데이터를 요청하는 모든 클라이언트가 응답을 받는 것을 의미한다. 즉, 작동 중인 모든 노드는 예외 없이 모든 요청에 대해 유효한 응답을 반환해야 한다.
- 파티션 내성: 파티션은 분산 시스템 내 통신 단절을 의미하며. 파티션 내성은 클러스터가 노드 간의 통신 장애가 발생해도 계속 작동해야 함을 의미한다.
NoSQL 데이터베이스는 수평적으로 확장 가능하고 분산되도록 설계되어 분산 네트워크 애플리케이션에 적합하며, 지원하는 두 가지 CAP 특성을 기반으로 분류된다.
- CP 데이터베이스: 일관성 및 파티션 내성을 제공하지만 가용성을 희생한다. 파티션 발생 시 일관성이 없는 노드를 파티션 해결 시까지 사용할 수 없게 만든다. MongoDB는 네트워크 파티션 발생 시 일관성을 유지하고 가용성을 절충하는 CP 데이터 저장소이다. MongoDB는 단일 마스터 시스템으로, 하나의 프라이머리 노드만 쓰기 작업을 처리하고 보조 노드는 이를 복제한다. 프라이머리 노드에 장애가 발생하면 최신 로그를 가진 보조 노드가 새로운 프라이머리 노드로 선출될 때까지 쓰기 요청이 불가능하여 일관성을 유지한다.
- AP 데이터베이스: 가용성 및 파티션 내성을 제공하지만 일관성을 희생한다. 파티션 발생 시 모든 노드는 계속 사용 가능하지만 파티션의 잘못된 쪽에 있는 노드는 다른 노드보다 오래된 데이터를 반환할 수 있다. 파티션 해결 후 AP 데이터베이스는 일반적으로 노드를 재동기화하여 시스템의 불일치를 복구한다. Apache Cassandra는 마스터리스 아키텍처를 가진 AP 데이터베이스로, 항상 가용성을 유지하려고 한다. 클라이언트가 어떤 노드에든 쓸 수 있으며 불일치가 발생하면 최대한 빨리 해결하는 방식으로 최종적 일관성을 제공한다. 파티션 발생 시 데이터 불일치가 발생하지만 빠르게 해결되며, Cassandra는 노드가 서로 따라잡을 수 있도록 "복구" 기능을 제공한다.
- CA 데이터베이스: 모든 노드에서 일관성 및 가용성을 제공하지만, 파티션 발생 시 이러한 특성을 유지할 수 없어 파티션 내성을 제공할 수 없다. 분산 시스템에서는 파티션을 피할 수 없으므로 실제적으로 CA 분산 데이터베이스는 존재하기 어렵다. 하지만 PostgreSQL과 같은 관계형 데이터베이스는 일관성과 가용성을 제공하며 복제를 사용하여 여러 노드에 배포할 수 있다.
마이크로서비스는 자체 데이터베이스를 포함한 자체 스택을 통합하고 네트워크를 통해 서로 통신하는 느슨하게 결합되고 독립적으로 배포 가능한 애플리케이션 구성 요소이다. CAP 이론을 이해하면 여러 위치에서 실행되는 마이크로서비스 기반 애플리케이션을 설계할 때 최적의 데이터베이스를 선택하는 데 도움이 될 수 있다. 예를 들어, 데이터 모델을 빠르게 반복하고 수평적으로 확장하는 것이 중요하지만 최종적 일관성을 허용할 수 있는 경우 Cassandra 또는 Apache CouchDB와 같은 AP 데이터베이스가 요구 사항을 충족하고 배포를 단순화할 수 있다. 반면에 데이터 일관성이 중요한 애플리케이션의 경우 PostgreSQL과 같은 관계형 데이터베이스를 선택할 수 있다.