[Database] CAP 이론

나른한 개발자·2026년 1월 19일

f-lab

목록 보기
30/44

CAP 이론

CAP 이론은 NoSQL 공부에서 자주 접하는 개념으로, 분산 시스템의 특성을 세 가지로 나누어 설명합니다.

분산 시스템은 최소 두 개 이상의 노드가 네트워크로 연결되어 하나의 컴퓨터처럼 동작하는 시스템입니다. 대부분의 NoSQL 스토리지는 분산 시스템으로 동작하며, 이는 수평 확장이 가능하고 비용 효율적이며 장애에 강한 시스템을 구축할 수 있다는 장점이 있습니다. 하지만 여러 노드가 물리적으로 분산되어 있기 때문에 필연적으로 한계점도 존재합니다.

CAP는 이러한 분산 환경의 성질을 3가지로 나누고 각 특성의 상충 관계에 대해서 설명합니다. CAP를 이해하면 분산 시스템을 선택할 때 고려해야할 특성을 이해할 수 있습니다.

CAP 각각 들여다보기

Consistency 일관성

CAP의 C는 일관성을 의미하며, ACID의 일관성과는 다른 개념입니다. 분산 시스템의 모든 노드가 항상 동일한 데이터를 가져야 한다는 의미입니다. 어느 노드에 요청하든 동일한 데이터가 반환되어야 하며, 쓰기 작업이 성공하려면 모든 노드에 결과가 복제되어야 합니다.

다만 전통적인 RDBMS는 단일 서버로 일관성을 보장하지만, NoSQL은 여러 노드가 동시에 동작하므로 복제 지연이 발생할 수밖에 없습니다. 따라서 '동시라고 느낄 만큼'의 일관성 정도로 이해하면 좋습니다.

Availability 가용성

A는 가용성으로, 분산 시스템에서 하나의 노드에 장애가 발생해도 계속해서 읽기와 쓰기가 가능해야 한다는 의미입니다. 항상 서비스가 가능해야 한다는 특성입니다.

Partition Tolerance

P는 파티션 허용성으로, CAP 이론에서 가장 오해를 많이 받는 부분입니다. 네트워크 장애로 노드 간 연결이 단절되는 네트워크 파티션이 발생해도 시스템이 계속 동작해야 함을 의미합니다. 완벽하게 장애가 없는 네트워크는 존재하지 않기 때문에, 분산 시스템에서는 필수적으로 고려해야 하는 특성입니다.

Split-Brain은 네트워크 파티션으로 시스템이 여러 조각으로 나뉘어 각각이 스스로를 주 노드(Primary)로 여기는 상태를 말합니다.

예를 들어 하나의 클러스터에 {A, B, C, D, E} 노드들로 구성되어있다가 네트워크 장애로 {A, B}, {C, D, E}로 나뉘었다고 가정해봅시다. 이렇게 나뉜 두 그룹은 서로가 주 노드라고 여겨 이중으로 클러스터가 실행됩니다. 따라서 쓰기 작업이 어느 한 그룹의 노드에서만 실행되면서 다른 그룹에 데이터가 동기화 되지 못해 나중에 정상화되었을 때 데이터 충돌이 발생해 일관성이 깨지게 됩니다. 이때 분산시스템은 특정 그룹에만 변경된 state를 동기화하여 데이터의 일관성과 무결성을 보장해주어야 합니다.

이를 해결하기 위해 쿼럼 방식을 사용하는데, 홀수 개의 노드로 클러스터를 구성하고 최소 과반수 이상의 동의를 얻어야 작업을 허용하는 방식입니다.

CAP 중 두 개를 선택할 수 있다?

CAP 이론에서 흔한 오해는 세 가지 중 두 가지를 선택할 수 있다는 것입니다. 하지만 P는 필수적으로 선택되어야 하는 요소입니다. 네트워크 장애를 무시하거나 장애가 절대 발생하지 않는 시스템을 만드는 것은 불가능하기 때문입니다. 따라서 CAP 이론은 네트워크 파티션이 발생했을 때 일관성과 가용성 중 무엇을 보장할 것인지 선택하라는 의미로 이해해야 합니다. 실제로 선택 가능한 옵션은 CP와 AP이며, 완전히 한쪽으로 치우치기보다는 어느 쪽에 더 중점을 두는지로 이해하는 것이 좋습니다.

CP (MongoDB)

CP 데이터베이스의 대표적인 예는 MongoDB입니다. 일관성이 우선이기 때문에 네트워크 파티션 발생 시 일관성 없는 노드는 사용 불가능(unavailable)하게 됩니다. MongoDB는 각 레플리카 셋마다 하나의 주 노드만 모든 쓰기 작업을 수행할 수 있도록 하며, 나머지 보조 노드들은 주 노드의 로그를 읽어 데이터를 복제합니다. 주 노드가 사용 불가능해지면 가장 최근 로그를 가진 보조 노드가 주 노드가 되며, 동기화가 완료될 때까지 쓰기 요청은 처리되지 않지만 전체 네트워크의 데이터 일관성은 유지됩니다.

AP (Cassandra)

AP 데이터베이스의 예는 Cassandra입니다. 가용성이 우선이기 때문에 네트워크 파티션 발생 시 모든 노드가 사용 가능한 상태(available)를 유지합니다. 대신 일부 노드는 이전 버전의 데이터를 반환할 수 있으며, 파티션이 해결되면 데이터를 동기화하여 불일치를 해소합니다. Cassandra는 마스터가 없는 아키텍처를 채택하여 최종 일관성을 제공하며, 살아있는 노드가 계속해서 요청을 처리하므로 높은 가용성을 제공합니다.

출처


결론적으로 분산 환경에서 데이터베이스를 선택할 때는 프로젝트에서 일관성과 가용성 중 무엇이 더 중요한지 고려해야 합니다. CAP 이론만으로는 부족한 부분이 있어 PACELC 이론이 등장했지만, CAP을 먼저 이해하는 것이 분산 시스템을 공부하는 데 도움이 됩니다.

CAP는 분산 시스템의 특성을 3 가지로 나누어 설명한다. C는 Consistency, 일관성을 의미한다. 분산 시스템의 모든 노드가 항상 동일한 데이터를 가져야한다는 것이다. 어느 노드에서 요청을 하든 동일한 데이터가 반환되어야하고, 쓰기 작업이 완료되면 모든 노드에 결과가 복제 되어야한다는 것이다. A는 Availablity, 가용성이다. 한 노드에 장애가 발생해도 계속해서 서비스 가능해야한다는 것이다. 네트워크 장애로 노드 간 통신이 단절되는 네트워크 파티션 상황에서도 시스템이 계속해서 동작해야한다는 것이다. 장애가 없는 네트워크 시스템은 없기 때문에 P는 필수적으로 고려해야하는 특성이다. 그래서 CP와 AP 중 더 중요하다고 판단되는 전략을 선택하면 된다. CP를 지원하는 DB는 대표적으로 MongoDB가 있다. 일관성이 우선이기 때문에 네트워크 파티션이 발생하면 일관성이 깨진 노드는 사용불가 상태가 된다. 각 리플리카 셋마다 하나의 주 노드만 모든 쓰기 작업을 할 수 있으며 나머지 보조 노드들은 주 노드의 로그를 읽어 데이터를 복제한다. AP를 지원하는 데이터베이스는 Cassandra가 있다. 가용성이 우선이기 때문에 네트워크 파티션이 발생해도 모든 노드가 사용가능 상태를 유지한다. 대신 일부 노드는 이전 버전의 데이터를 반환할수 있고 파티션이 해결되면 데이터를 동기화하여 불일치를 해소한다. 그래서 이 세 가지 특성은 분산 시스템의 설계와 운영에서 상호 배타적인 관계에 있다, 어떤 분산 시스템에서 두 개 이상의 특성을 모두 만족시키는 것은 불가능하다. 따라서 분산 시스템을 설계할 때는 이러한 특성을 적절히 조절하여 시스템의 요구사항에 맞게 선택해야 한다.

profile
Start fast to fail fast

0개의 댓글