CAP 정리
네트워크 분단(partition)이 일어난 순간에 일관성과 가용성 중 하나를 고르는 문제입니다. 평상시에는 둘 다 만족하므로, "우리는 CP" 같은 말은 분단 상황의 동작을 뜻합니다.
CAP 정리
CAP 세 가지 속성
- Consistency: 모든 노드가 같은 데이터 반환
- Availability: 모든 요청에 응답 (에러 아닌 정상 응답)
- Partition Tolerance: 네트워크 단절에도 동작
실무 선택
| 선택 | 포기 | 예시 |
|---|---|---|
| CP | 가용성 | MongoDB, HBase |
| AP | 일관성 | Cassandra, DynamoDB |
끊기지 않은 평상시의 선택
CAP 는 분단이 일어난 순간만 말합니다. 그런데 시스템은 대부분의 시간을 끊기지 않은 상태로 보냅니다. 그 시간에도 선택이 남습니다.
사본이 여러 곳에 있으면, 읽을 때 모든 사본에 물어 최신값을 확인할지 가까운 사본 하나만 읽을지 고릅니다.
| 평상시 선택 | 얻는 것 | 잃는 것 |
|---|---|---|
| 사본 여럿에 물어본다 | 최신값을 본다 | 가장 느린 사본을 기다린다 |
| 가까운 사본만 읽는다 | 빠르다 | 잠깐 옛 값을 볼 수 있다 |
그래서 실제 설계는 분단일 때의 선택과 평상시의 선택을 따로 정합니다. 분단에서 일관성을 고른 시스템이 평상시에는 지연을 위해 옛 값을 허용하는 조합도 흔합니다.
연산마다 다르게 정한다
시스템 전체를 하나로 정할 필요가 없습니다. 잔액 조회는 최신값이 필요하고 상품 설명은 잠깐 옛 값이어도 됩니다. 같은 저장소에서 연산마다 다르게 두는 것이 실제에 가깝습니다.
면접에서 "우리는 AP 입니다" 로 끝내지 않고, 어느 연산에서 무엇을 포기했는지까지 말하면 설계를 실제로 해 본 것으로 읽힙니다.
실무 포인트
- 네트워크 파티션은 반드시 발생 → P는 필수 → 실제론 CP vs AP 선택
- 대부분의 서비스: 최종 일관성(Eventual Consistency) 채택
- 면접 빈출: "CAP에서 왜 셋 다 만족 못하나요?"
- Q.CAP 정리를 설명해주세요
- Q.CP vs AP 시스템 예시를 들어주세요
- Q.실무에서 CAP을 어떻게 적용하나요?