sean.log

CAP Theorem & PACELC Theorem 본문

분산 시스템

CAP Theorem & PACELC Theorem

sean.k 2025. 11. 30. 19:55

CAP Theorem?

CAP Theorem은 분산 환경의 성질을 크게 3가지 특성(C, A, P)으로 나누어 설명하고, 각 특성들의 상충 관계에 대해 설명하면서 분산 시스템을 선택할 때 고려해야할 주요 특성들을 논한다

 

CAP 각각의 의미

Consistency(일관성)

: 모든 노드는 언제나 최신의 데이터를 보유하고 동일한 데이터를 가지고 있어야 한다

분산 시스템에 몇 개의 노드가 동작하고 있을 때, 어떤 노드에 요청하든 동일한 데이터가 리턴되어야 한다는 의미이다

  • 예) 2개의 노드가 모두 write을 허용할 때, 하나의 노드에 write을 하면 해당 operation의 결과가 다른 모든 노드로 복제되어야 write이 성공적으로 된 것을 인정할 수 있는 것
    하지만 현실적으로 여러 개의 노드가 동시에 돌아가는 NoSQL 데이터베이스에서는 같은 시간에 모든 노드들이 같은 데이터를 갖는다는 것이 불가능하다(replication lag, 복제 지연이 당연하게 발생). 즉, 이때 일관성은 사용자가 느끼지 못할 정도로, 동시라고 느낄 만큼 일관적이게 유지한다

 

Availability(가용성)

: 여러 노드 중 하나가 장애가 발생하거나 꺼지더라도 계속해서 데이터베이스에 read, write이 가능해야 한다

어떤 상황에서든, 언제든 시스템이 사용 가능해야 하고, 작동해야 한다

 

Partition Tolerance(분할 허용성)

: 네트워크 분할(network partition) 또는 일시적인 통신 오류가 발생하더라도, 일부 노드 간 통신이 불가능해도 시스템은 계속해서 작동할 수 있어야 한다

실제 분산 시스템에서는 네트워크 문제, 서버 장애 등으로 노드 간의 통신이 중단될 수 있는데, 이러한 상황에서도 시스템은 서비스를 제공할 수 있어야 한다. 완벽하게 네트워크 장애가 발생하지 않는 시스템은 없으므로, 현실적으로 무조건 선택될 수밖에 없는 특성이다

 

세 가지를 모두 만족할 수는 없다

❓왜 모두 챙길 수가 없을까?

⇒ network partition이 발생하면 정상적인 상태로 돌아오기 전까지 가용성과 일관성을 모두 지킬 수 없기 때문이다

network partition이 발생했다고 가정할 때, 일관성을 지키려고 하면 데이터 복제를 기다리는 것이 필요한데, 당장 분리된 노드끼리 데이터를 동기화할 수 없다보니 사용자의 write 요청에 대해 에러를 반환하거나 요청을 거부해야 한다. 이럴 경우, 무슨 상황에서든 서비스가 되어야 하는 가용성을 해치게 된다

반대로, 가용성을 챙기려면 정상적으로 요청은 처리하게 되지만, network partition이 일어난 상태이므로 정확한 데이터가 전달된다는 보장은 할 수 없게 된다. 그러므로, 모든 노드가 반환하는 데이터가 같아야 한다는 일관성을 해치게 된다

 

CAP 중 P는 필수불가결하게 선택되어야하는 요소이다. P를 포기한다면? 네트워크 장애를 그냥 두거나, 네트워크 장애가 절대 발생하지 않는 시스템을 구축해야 하는데 이는 모두 현실적으로 불가능하다

세 가지를 모두 선택할 수 없다는 것은 분산 시스템에서 network partition이 발생했을 때, C와 A 중 무엇을 더욱 우선하게, 더 치우치게 보장하면서 정상 작동할 것인지를 선택하는 것이라고 이해해야 한다. 이때 나머지 하나를 아예 포기하는 것이 아니라 덜 우선시하는 것이다.

이때 P는 필수적으로 보고, C와 A 각각을 더 우선하는 것을 CP와 AP라고 한다. CP, AP는 완벽하게 구현하는 것보다 세 가지 모두 중요하기 때문에 내가 어떤 시스템을 개발할 것인지, 요구사항이 무엇인지에 따라 무엇을 우선시할 것인지 결정하는 것이다

 

CP: Consistency(일관성) + Partition Tolerance(분할 허용성)

일관성이 우선이기 때문에, network partition이 발생했을 때, 일관성을 지키지 못하는 node는 문제가 해결될 때까지 unavailable하게 된다. 즉, 일관적인 데이터가 아니면 아예 동작하지 않도록 하는 것이다

⇒ 일관성을 갖기 위해 가용성과 성능을 희생하는 데이터베이스

 

MongoDB

 

MongoDB는 각 replica set 마다 single-master만 있을 수 있도록 한다. replica set 안에 오직 하나의 primary node만 모든 write operation을 수행할 수 있고, 나머지 replica node들은 secondary node로 primary node의 operation log를 읽어서 데이터를 복제해간다

*replica set: 하나의 데이터베이스를 관리하는 여러 대의 독립적인 서버(node) 그룹

 

만약 primary node가 unavailable 해지면, secondary node 중 가장 최근의 log를 읽은 node가 primary node가 되고,

나머지 secondary node와 데이터가 동기화될 때까지 client가 write request를 수행할 수는 없지만(⇒ 가용성 희생) 전체 네트워크에는 consistent한 데이터가 유지될 수 있도록 한다

 

 

 

 

❓일관성은 지키면서 성능은 향상 시킬 수 없을까?
eventual consistency(최종 일관성, 보다 유연한 일관성): 데이터 변경 사항이 즉시 모든 노드에 반영되지 않더라도, 시간이 지나면 결국에는 모든 노드의 데이터가 일치하게 된다는 개념. primary에서만 읽고 쓰는 건 강력한 일관성을 보장하는 것이고, 읽기 성능 분산을 위해 secondary 노드에서의 읽기도 허용하는 것!
기본적으로 primary node를 통해서만 읽을 수 있고, eventual consistency를 허용한다면 secondary node를 통해서도 데이터를 읽을 수 있다 

 

AP : Availiability(가용성) + Partition Tolerance(분할 허용성)

가용성이 우선이기 때문에, network partition이 발생해도 모든 노드들은 다 available한 상태가 된다

일관성을 일정 부분 포기했기 때문에 몇몇 노드들은 문제가 해결될 때까지 예전 버전의 데이터를 리턴할 수 있고, 문제가 해결되고 나면 노드 간의 데이터를 동기화해 데이터 불일치를 없애도록 한다

⇒  SNS, 채팅, 게임 등 빠른 응답이 필요한 서비스에 사용

 

Cassandra

 

Cassandra는 MongoDB와 다르게 masterless 아키텍처를 채택하고 있다. 이것은 클러스터 내의 모든 노드가 동등한 역할을 수행하고, 중앙에서 작업을 조정하는 master 노드가 없는 구조를 뜻한다. 어떤 노드에 장애가 발생하거나, partiton이 발생하더라도 남은 다른 노드가 클라이언트의 write 등의 operation을 처리할 수 있으므로 높은 가용성을 보장한다

결국 network partition이 발생했을 때 잠시 inconsistent(불일치)한 데이터가 발생하지만, 네트워크 연결이 복구되는 즉시 빠르게 이를 조정하는 방식으로 극복한다(eventual consistency)

 

DynamoDB

 

다중 AZ(Available Zone) 복제를 통해 뛰어난 가용성을 제공한다

network partition이나 서버 장애가 발생해도 데이터베이스 서비스가 계속 작동하도록 설계되어 있으며, 데이터는 자동으로 여러 위치에 복제되어 어떤 부분의 시스템이 다운되더라도 전체 시스템의 작동에 영향을 주지 않는다

일관성 기능은 기본적으로 제공하지만, 필요에 따라 높은 수준의 일관성으로 수정할 수 있는 옵션을 제공한다

 

 

PACELC Theorem?

CAP 정리는 분산 시스템에서 network partition이 발생한, 즉 네트워크 장애 상황일 때 가용성과 일관성 중 하나만 선택할 수 있다는 의미를 내포한다. 하지만 정상 상황일 때는 서술해주지 못한다는 한계를 갖는다. 이러한 한계를 보완한 것이 바로 PACELC 정리이다

PACELC 정리는 기존 CAP 정리에서 partition이 발생하지 않은(else) 상황이 추가되어 시스템이 일관성과 지연 시간 사이에서 선택해야 한다는 것을 의미한다

partition 발생 시에는 CAP 정리와 유사하다. partition이 없는 경우(else)에는 시스템은 일관성을 유지하면서도 낮은 지연 시간을 제공할 수 있다. 하지만 일관성을 강화하려고 하면 지연 시간이 증가할 수 있고(모든 노드가 동기화 되어야 하므로), 반대로 지연 시간을 최소화하려고 하면 일관성 수준이 낮아질 수 있다

 

Cassandra

Cassandra는 PA/EL이 가능하도록 설계되었다. 가용성을 우선시하여 partition이 발생해도 AP 시스템으로 설계되어 있고, 지연 시간을 최소화하기 위해 느슨한 일관성(eventual consistency)을 갖는다. 일관성을 튜닝할 수 있는 여러 옵션을 제공해 사용자가 일관성 수준을 설정할 수 있어서 설정에 따라 EL에서 EC로 수정할 수 있다.

 

장애 상황인 경우, 가능한 노드에만 데이터를 반영하고(AP) 정상으로 복구되면 필요한 노드에 데이터를 모두 반영한다. 정상 상황일 때도 지연 시간을 최소화하기 위해, 쓰기 작업을 보낸 후 모든 노드의 응답(ACK)을 기다리지 않는다(EL).


Reference

 

[분산 시스템] CAP 이론 제대로 이해하기 (CAP Theorem) (CAP에 대한 오해를 풀어보자)

NoSQL을 공부하다보면 가장 많이 접하게 되는 단어 중 하나가 CAP이다. 아무래도 NoSQL 스토리지들이 분산 시스템으로 동작하다보니, 이들을 이해하기 위해서는 꼭 알아두어야 할 개념이기 때문이

etloveguitar.tistory.com

 

 

[분산시스템]CAP 이론이란? PACELC 이론이란? (feat. 블록체인)

CAP 이론은 분산 컴퓨팅 시스템에 바탕으로, 성능과 안정성 간의 tradeoff를 설명하는 이론이다.먼저,CAP 이론을 설명하기 전! 각각 CAP 약자를 설명하겠다!Consistency(일관성) : 모든 클라이언트가 같은

velog.io

 

CAP 이론과 PACELC 이론

CAPCAP이론은 일관성(Consistency) , 가용성(Availability), 파티션 허용성(Partition tolerance)의 줄인 말로, 분산 시스템의 기본 원칙 중 하나인데, CAP 이론은 어떤 분산 시스템도 이 세가지 속성을 동시에 만

kejdev.github.io

 

 

CAP 이론이란

분산 시스템의 설계 이론을 말하는 것으로, 시스템이 Consistency (일관성), Availability (가용성), Partition Tolerance (분할 내성) 이 세 가지를 모두 동시에 완벽히 충족할 수 없다는 것을 말합니다. 이 3가

jofestudio.tistory.com

 

 

세 멤버 복제본 세트 - 데이터베이스 매뉴얼 - MongoDB Docs

복제본 세트의 혜택을 얻기 위해 필요한 최소 복제본 세트 멤버 수는 3명입니다. 3명의 멤버로 구성된 복제본 세트에는 3명의 데이터 보유 멤버(프라이머리-세컨더리-세컨더리)가 있거나(권장),

www.mongodb.com

 

'분산 시스템' 카테고리의 다른 글

Spark 이론  (1) 2026.02.04
Hadoop 이론  (0) 2026.02.04