CAP Theorem(분산 시스템의 CAP 정리)

null·2026년 8월 6일

개발지식

목록 보기
4/10

백엔드 면접 질문 #3 - CAP Theorem(분산 시스템의 CAP 정리)

❓ 면접 질문

분산 시스템의 CAP 정리(CAP Theorem)가 무엇이고, 세 가지 속성에 대해 설명해주세요.


CAP Theorem이란?

CAP Theorem은

분산 시스템에서는 Consistency(일관성), Availability(가용성), Partition Tolerance(분할 허용성)를 동시에 완벽하게 만족할 수 없다는 이론이다.

특히 네트워크 장애(Partition)가 발생하면 Consistency와 Availability 중 하나를 선택해야 한다.


분산 시스템이란?

분산 시스템은 하나의 서버가 아니라 여러 대의 서버가 함께 하나의 서비스를 제공하는 구조이다.

예를 들어

        Server1

사용자 ----------- LoadBalancer

        Server2

              ↓

          DB1      DB2

또는

DB1

↓

DB2

↓

DB3

처럼 여러 서버 또는 여러 DB가 함께 동작한다.


C - Consistency (일관성)

Consistency는

모든 서버가 항상 같은 데이터를 가져야 한다.

를 의미한다.

예를 들어

DB1

주문 101건

DB2

주문 101건

이라면

어느 서버에서 조회해도

항상 같은 결과가 나와야 한다.


Consistency가 깨진 경우

DB1

주문 101건

DB2

주문 100건

서버마다 데이터가 다르다.

이것은 Consistency가 깨진 상태이다.


A - Availability (가용성)

Availability는

항상 요청에 대해 응답해야 한다.

를 의미한다.

예를 들어

DB 하나가 장애가 나더라도

사용자

↓

서비스

↓

정상 응답

을 반환해야 한다.

즉

서비스가 멈추지 않는 것이 중요하다.


P - Partition Tolerance (분할 허용성)

Partition은

서버끼리 네트워크가 끊어지는 상황

을 의미한다.

예를 들어

DB1

X------------X

DB2

처럼

DB끼리 통신이 불가능한 상태이다.

Partition Tolerance는

이런 상황에서도 시스템이 계속 동작해야 한다.

를 의미한다.


왜 세 가지를 동시에 만족할 수 없을까?

예를 들어

DB1

X------------X

DB2

네트워크가 끊어졌다.

이때 사용자가 주문을 한다.


① Availability를 선택한다.

DB1은

주문 저장 성공

하지만

DB2는

네트워크 단절

↓

저장 실패

결과

DB1

101건

DB2

100건

서비스는 계속된다.

하지만 데이터는 다르다.

즉

Consistency가 깨졌다.

이것이

AP

이다.


② Consistency를 선택한다.

DB2와 동기화될 때까지

기다린다.

DB1

↓

DB2 연결 대기

↓

Commit

사용자는

응답 없음

상태가 된다.

즉

Availability가 깨진다.

이것이

CP

이다.


그래서 CAP 정리는

Partition이 발생하면

Consistency

또는

Availability

둘 중 하나를 선택해야 한다고 말한다.

즉

        Partition

          │

 ┌────────┴────────┐

Consistency   Availability

실무에서는 어떻게 선택할까?

금융 시스템

예를 들어

계좌이체

A 계좌

↓

B 계좌

인데

서버마다 잔액이 다르면 큰일이다.

응답이 조금 늦더라도

데이터가 반드시 같아야 한다.

따라서

CP

를 선택한다.


SNS

좋아요

댓글

팔로우

등은

잠시 숫자가 달라도

서비스가 계속 동작하는 것이 중요하다.

예를 들어

좋아요

100개

라고 보였다가

몇 초 뒤

101개

가 되어도 큰 문제가 아니다.

따라서

AP

를 선택한다.


CA는 존재하지 않을까?

면접에서 자주 나오는 질문이다.

결론부터 말하면

실제 분산 시스템에서는 거의 존재하지 않는다.

왜냐하면

분산 시스템에서는

네트워크 장애는 반드시 발생한다고 가정하기 때문이다.

즉

Partition Tolerance는 사실상 포기할 수 없다.

그래서

실무에서는

CP

또는

AP

중 하나를 선택한다.


CAP와 Outbox Pattern의 관계

Outbox Pattern도

네트워크는 언제든지 실패할 수 있다는

Partition을 전제로 설계된다.

예를 들어

DB 저장

↓

Outbox 저장

↓

Commit

↓

나중에 Kafka 전송

즉

즉시 모든 시스템의 데이터를 맞추는 것이 아니라

나중에 최종적으로(Eventual Consistency)

데이터를 맞춘다.


핵심 정리

항목설명
Consistency모든 서버의 데이터가 동일해야 한다.
Availability항상 응답해야 한다.
Partition Tolerance네트워크가 끊겨도 시스템은 동작해야 한다.

선택특징예시
CP정합성을 우선금융, 결제
AP가용성을 우선SNS, 메신저

면접 답변

CAP 정리는 분산 시스템에서 Consistency(일관성), Availability(가용성), Partition Tolerance(분할 허용성)를 동시에 완벽하게 만족할 수 없다는 이론입니다. 특히 네트워크 단절이 발생하면 Consistency와 Availability 중 하나를 선택해야 합니다. 금융 서비스처럼 데이터 정합성이 중요한 시스템은 CP를 선택하고, SNS처럼 서비스 지속성이 중요한 시스템은 AP를 선택하는 경우가 많습니다. 또한 Outbox Pattern과 같은 최종 일관성(Eventual Consistency) 설계도 이러한 특성을 기반으로 합니다.

0개의 댓글