잡다한 IT 지식

분산 시스템과 CAP 본문

SRE(site reliability engineering)/개념

분산 시스템과 CAP

가나무마 2025. 8. 19. 23:30

좋습니다. 지금 글은 큰 틀과 흐름이 아주 잘 잡혀 있어요. 다만 용어의 정확성, 설명 간 연결부, 중복·불필요 표현을 조금만 정리하면 훨씬 매끄럽습니다.
아래는 제가 전체적으로 보완·수정한 버전입니다. 현재의 양식과 구조는 그대로 유지했습니다.


1. 분산 시스템이란?


분산 시스템은 공통의 목표를 위해 여러 개의 독립된 노드가 네트워크를 통해 협력하여 동작하는 시스템입니다.

예를 들어, 데이터를 여러 노드에 분산 저장하는 NoSQL 시스템, 읽기 부하를 분산하기 위한 RDBMS의 읽기 복제본도 분산 시스템의 사례로 볼 수 있습니다.


2. 분산 시스템은 왜 쓸까?


2.1 단일 서버 기반 아키텍처의 한계

어느 스타트업의 초창기 아키텍처 설계


어느 회사가 서비스를 런칭했다고 가정해 봅시다.
초기에는 시장 반응 검증이 목적이므로 대규모 트래픽을 고려하지 않은 단순한 아키텍처를 사용했습니다.

이때 Auto Scaling Group은 단일 인스턴스에 장애가 발생했을 때 동일한 인스턴스를 재기동하는 용도로만 쓰였습니다. 즉, 인스턴스 수는 항상 1개였습니다.

그러나 시간이 지나 트래픽이 증가하면서 단일 인스턴스로는 더 이상 부하를 감당할 수 없는 상황이 발생합니다.


서버를 여러 대 띄우고 로드밸런서를 통해 작업을 분배

웹 서버 계층은 애플리케이션이 Stateless로 설계되어 있다면 수평적 확장이 비교적 쉽습니다. 로드밸런서를 두고 서버 수를 늘리면 됩니다.

그렇다면 데이터 계층(RDS)에도 같은 방식이 적용될까요?

 

DB의 수평적 확장을 위해선 분산 시스템 설계가 필요하다.


아쉽게도 RDS는 웹 서버처럼 단순히 인스턴스를 늘린다고 해서 수평 확장이 되지 않습니다.

데이터 계층은 여러 DB 인스턴스가 동시에 쓰기·읽기를 처리할 때 데이터 동기화 문제가 필연적으로 발생합니다.
동기화가 제대로 되지 않으면 같은 쿼리에 대해 인스턴스마다 다른 결과를 반환할 수 있습니다.

따라서 RDS를 수평적으로 확장하려면 단순 복제 이상의 방법, 예를 들어 샤딩(Sharding) 같은 분산 데이터베이스 설계가 필요합니다.
그리고 이러한 분산 시스템의 동작 원리를 이해하기 위해 등장하는 개념이 바로 CAP 이론입니다.


3. CAP란?

CAP

CAP은 Consistency(일관성), Availability(가용성), **Partition Tolerance(분할 내성)**의 앞 글자를 딴 개념입니다.

분산 시스템은 이 세 가지 특성을 동시에 만족할 수 없으며, 상황에 따라 이 중 2가지만 선택할 수 있다는 것이 CAP 이론의 핵심입니다.

흔히 다음과 같이 CA / CP / AP의 세 가지 분류로 설명됩니다.


3.1 Consistency (일관성)

Consistency는 분산 시스템의 모든 노드가 동일한 데이터를 보장하는 특성입니다.

사용자가 어느 노드에 요청을 보내더라도 항상 같은 결과를 받아야 합니다.

예: Kubernetes에서 사용하는 etcd는 강한 일관성(strong consistency)을 보장합니다.
→ 클러스터 구성 정보가 저장된 etcd는 과반수 노드 합의(RAFT 알고리즘)를 통해 항상 최신의 동일한 데이터를 반환합니다.

kubernetes의 etcd 저장소


3.2 Availability (가용성)

DynamoDB의 글로벌 테이블을 활용한 멀티 리전 배포

Availability는 일부 노드에 장애가 발생해도 정상 동작하는 노드가 요청에 응답할 수 있는 특성을 의미합니다.

예: DynamoDB 글로벌 테이블은 여러 리전에 데이터를 복제합니다. 특정 리전에 장애가 발생해도 다른 리전에서 읽기/쓰기 작업을 처리할 수 있으므로 높은 가용성을 제공합니다.


3.3 Partition Tolerance (분할 내성)

Partition Tolerance는 네트워크 단절(Partition)이 발생하더라도 시스템이 일부 기능을 유지할 수 있는 능력을 의미합니다.

예: DynamoDB는 특정 리전이 단절되더라도 나머지 리전에서 정상 응답을 할 수 있습니다.


4. CP, AP, CA?


4.1 P는 필수

현실의 네트워크 환경에서는 언제든 장애가 발생할 수 있으므로 Partition Tolerance(P)는 선택이 아닌 전제 조건입니다.

따라서 CAP 이론을 적용할 때는 P를 기본으로 하고, 그 위에서 **C(일관성)**과 A(가용성) 중 하나를 선택해야 합니다.

즉, CAP 이론은 Partition 상황에서 가용성을 지킬 것인가, 일관성을 지킬 것인가를 설명하는 이론입니다.


4.2 CP (Consistency + Partition Tolerance)

CP 시스템은 Partition이 발생하면 응답을 멈추고, 노드 복구가 될 때까지 데이터 연산을 제한합니다.

  • 장점: 모든 노드의 데이터가 항상 일관성을 유지
  • 단점: 일부 상황에서는 요청을 처리하지 못해 가용성이 낮아짐

예:

  • etcd → 과반수 노드가 살아있지 않으면 읽기/쓰기를 모두 거부
  • Zookeeper → 합의를 기반으로 동작하는 대표적인 CP 시스템

4.3 AP (Availability + Partition Tolerance)

AP 시스템은 Partition이 발생해도 응답을 계속합니다. 장애 노드를 기다리지 않고 가용한 노드에서 요청을 처리합니다.

  • 장점: 빠른 응답, 높은 가용성
  • 단점: 일관성이 일시적으로 깨질 수 있으며, 이후 동기화 과정이 필요

예:

  • Cassandra, DynamoDB → 네트워크 분리 상황에서도 가능한 한 응답을 제공

4.4 CA (Consistency + Availability)

CA는 Partition을 고려하지 않는 조합입니다.
즉, 네트워크 단절이 절대 발생하지 않는 환경을 전제로만 성립합니다.

  • 장점: 항상 일관성과 가용성을 모두 만족
  • 단점: 현실의 분산 환경에서는 Partition을 배제할 수 없으므로 사실상 불가능

예:

  • 단일 노드 데이터베이스
  • 네트워크 분리가 없는 중앙 집중형 시스템

실제 분산 환경에서 CAP을 논할 때 CA는 주로 “이론적인 경우”로만 설명됩니다.


5. PACELC


앞에서 본 것처럼 CAP 이론은 Partition이 발생했을 때 A와 C 중 무엇을 선택할 것인가만 설명합니다.
하지만 Partition이 없는 정상적인 상황에서는 어떤 trade-off가 존재하는지는 다루지 못합니다.

이를 보완하기 위해 나온 개념이 PACELC 이론입니다.

  • Partition이 있을 때 (P) → Availability(A) vs Consistency(C)
  • Partition이 없을 때 (Else) → Latency(L) vs Consistency(C)

즉, PACELC는 네트워크 분리 상황뿐만 아니라, 정상 상황에서도 시스템이 지향하는 특성을 함께 설명합니다.

PACELC의 세부적인 분류와 예시는 다음 글에서 별도로 다뤄보겠습니다.


참고 자료