분산 시스템의 CAP 정리(CAP Theorem)가 무엇이고, 세 가지 속성에 대해 설명해주세요.
CAP Theorem은
분산 시스템에서는 Consistency(일관성), Availability(가용성), Partition Tolerance(분할 허용성)를 동시에 완벽하게 만족할 수 없다는 이론이다.
특히 네트워크 장애(Partition)가 발생하면 Consistency와 Availability 중 하나를 선택해야 한다.
분산 시스템은 하나의 서버가 아니라 여러 대의 서버가 함께 하나의 서비스를 제공하는 구조이다.
예를 들어
Server1
사용자 ----------- LoadBalancer
Server2
↓
DB1 DB2
또는
DB1
↓
DB2
↓
DB3
처럼 여러 서버 또는 여러 DB가 함께 동작한다.
Consistency는
모든 서버가 항상 같은 데이터를 가져야 한다.
를 의미한다.
예를 들어
DB1
주문 101건
DB2
주문 101건
이라면
어느 서버에서 조회해도
항상 같은 결과가 나와야 한다.
DB1
주문 101건
DB2
주문 100건
서버마다 데이터가 다르다.
이것은 Consistency가 깨진 상태이다.
Availability는
항상 요청에 대해 응답해야 한다.
를 의미한다.
예를 들어
DB 하나가 장애가 나더라도
사용자
↓
서비스
↓
정상 응답
을 반환해야 한다.
즉
서비스가 멈추지 않는 것이 중요하다.
Partition은
서버끼리 네트워크가 끊어지는 상황
을 의미한다.
예를 들어
DB1
X------------X
DB2
처럼
DB끼리 통신이 불가능한 상태이다.
Partition Tolerance는
이런 상황에서도 시스템이 계속 동작해야 한다.
를 의미한다.
예를 들어
DB1
X------------X
DB2
네트워크가 끊어졌다.
이때 사용자가 주문을 한다.
DB1은
주문 저장 성공
하지만
DB2는
네트워크 단절
↓
저장 실패
결과
DB1
101건
DB2
100건
서비스는 계속된다.
하지만 데이터는 다르다.
즉
Consistency가 깨졌다.
이것이
AP
이다.
DB2와 동기화될 때까지
기다린다.
DB1
↓
DB2 연결 대기
↓
Commit
사용자는
응답 없음
상태가 된다.
즉
Availability가 깨진다.
이것이
CP
이다.
Partition이 발생하면
Consistency
또는
Availability
둘 중 하나를 선택해야 한다고 말한다.
즉
Partition
│
┌────────┴────────┐
Consistency Availability
예를 들어
계좌이체
A 계좌
↓
B 계좌
인데
서버마다 잔액이 다르면 큰일이다.
응답이 조금 늦더라도
데이터가 반드시 같아야 한다.
따라서
CP
를 선택한다.
좋아요
댓글
팔로우
등은
잠시 숫자가 달라도
서비스가 계속 동작하는 것이 중요하다.
예를 들어
좋아요
100개
라고 보였다가
몇 초 뒤
101개
가 되어도 큰 문제가 아니다.
따라서
AP
를 선택한다.
면접에서 자주 나오는 질문이다.
결론부터 말하면
실제 분산 시스템에서는 거의 존재하지 않는다.
왜냐하면
분산 시스템에서는
네트워크 장애는 반드시 발생한다고 가정하기 때문이다.
즉
Partition Tolerance는 사실상 포기할 수 없다.
그래서
실무에서는
CP
또는
AP
중 하나를 선택한다.
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) 설계도 이러한 특성을 기반으로 합니다.