📌 문제
CAP 이론에 대해 설명하시오.
✅ 답안
1. 개념(Definition)
**CAP 이론(CAP Theorem)**은 **분산 컴퓨터 시스템(Distributed Computing System)**에서 동시에는 일관성(Consistency), 가용성(Availability), 파티션 허용성(Partition Tolerance) 세 가지를 모두 충족시킬 수 없다는 이론이다.
- 2000년, **에릭 브루어(Eric Brewer)**가 제안하였고, 이후 2002년 **세르게이 길버트(Sergey Gilbert)**와 **낸시 린치(Nancy Lynch)**가 수학적으로 증명하였다.
2. 역할 & 목적
- 분산 시스템 설계 시 세 가지 속성 중 어떤 것을 우선시할 것인가를 결정하는 기준 제공
- 장애 상황에서 시스템이 어떻게 반응할지를 예측 가능하게 함
- 클라우드 기반 아키텍처 및 데이터베이스 설계의 핵심 이론
3. 구성요소 (CAP의 구성 요소 설명)
| 구성 요소 | 설명 |
|---|
| Consistency (일관성) | 모든 노드가 동일한 데이터를 동시에 볼 수 있어야 함 (예: 최신 데이터 반영 보장) |
| Availability (가용성) | 모든 요청이 실패하지 않고 응답을 반환해야 함 (정상 응답 보장) |
| Partition Tolerance (파티션 허용성) | 네트워크 일부 장애(분리) 발생 시에도 시스템은 계속 동작해야 함 (장애 허용성 보장) |
4. 원리
- 네트워크가 Partition(파티션: 네트워크 분할) 상태가 되면, Consistency 또는 Availability 중 하나는 희생해야 한다.
- 따라서 CAP 세 가지 중 두 가지만 동시에 만족 가능하다.
5. 시스템 분류 (CAP에 따른 분산 시스템 유형)
| 유형 | 설명 | 예시 시스템 |
|---|
| CP (일관성 + 파티션 허용성) | 가용성을 희생하고, 데이터의 정합성과 장애 허용성 중시 | HBase, MongoDB (Single Master), Redis |
| CA (일관성 + 가용성) | 파티션 상황을 허용하지 않음 (현실적 구현 어려움) | 전통적인 RDBMS (단일 서버 기반) |
| AP (가용성 + 파티션 허용성) | 일관성을 희생하고, 응답성과 장애 허용성 중시 | Cassandra, CouchDB, DynamoDB |
6. 핵심 용어 정리
| 용어 | 의미 |
|---|
| CAP Theorem | 분산 시스템에서 Consistency, Availability, Partition Tolerance를 동시에 만족시킬 수 없다는 이론 |
| Partition | 네트워크 노드 간의 통신이 단절된 상태 |
| Trade-off | 시스템 설계 시 특정 요소를 선택하면 다른 요소를 희생해야 하는 선택 관계 |
7. 특징
- 현실적인 분산 시스템에서는 Partition Tolerance는 필수
- 대부분 시스템은 CP 또는 AP 구조로 설계
- 클라우드 및 마이크로서비스 아키텍처에서 매우 중요한 설계 원칙
8. 장단점
| 항목 | 장점 | 단점 |
|---|
| CAP 이론 적용 | 설계 선택 기준 제공 | 세 가지를 동시에 만족 불가 → 트레이드오프 필요 |
9. 비교: BASE vs ACID
| 구분 | ACID (RDBMS 중심) | BASE (CAP 기반 분산 시스템) |
|---|
| 원칙 | 일관성 중심 (CP) | 가용성과 성능 중심 (AP) |
| 철학 | 강한 일관성 | 최종 일관성(Eventual Consistency) |
| 예시 | MySQL, Oracle | Cassandra, DynamoDB |
10. 어린이 버전 요약 🧒
"인터넷에 여러 대의 컴퓨터가 함께 일할 때는, 정확한 정보도 주고 싶고, 빠르게 대답도 하고 싶고, 고장 나도 잘 돌아가게 하고 싶은데… 이 세 가지를 다 잘 하긴 어렵대요. 그래서 둘만 고르고 하나는 포기해야 해요!"
✅ 결론
- CAP 이론은 분산 시스템 설계의 핵심 이론으로, 일관성, 가용성, 파티션 허용성 중 어떤 것을 우선할지를 결정하는 기준을 제공한다.
- 실제 시스템은 보통 Partition Tolerance는 필수로 두고, Consistency 또는 Availability 중 하나를 선택하여 설계한다.