Foundry
분산 시스템
중급
핵심

CAP 정리

분산 시스템의 근본 트레이드오프, 셋 다 만족은 불가능

CAP 정리

CAP 세 가지 속성

  • Consistency: 모든 노드가 같은 데이터 반환
  • Availability: 모든 요청에 응답 (에러 아닌 정상 응답)
  • Partition Tolerance: 네트워크 단절에도 동작

실무 선택

선택포기예시
CP가용성MongoDB, HBase
AP일관성Cassandra, DynamoDB

실무 포인트

  • 네트워크 파티션은 반드시 발생 → P는 필수 → 실제론 CP vs AP 선택
  • 대부분의 서비스: 최종 일관성(Eventual Consistency) 채택
  • 면접 빈출: "CAP에서 왜 셋 다 만족 못하나요?"
면접에서 이렇게 나옵니다

Q.CAP 정리를 설명해주세요

분산 시스템에서 셋 중 둘만 고를 수 있다는 정리입니다.

항목의미
일관성(C)모든 노드가 같은 값을 본다
가용성(A)요청에 항상 응답한다
분할 내성(P)노드 사이 통신이 끊겨도 동작한다

정확히 이해할 점이 있습니다. 분할 내성은 선택 사항이 아닙니다. 네트워크는 반드시 끊기므로 여러 대로 나눈 시스템은 P 를 가져야 합니다.

그래서 실제 선택은 분할이 일어났을 때 무엇을 포기할지입니다.

선택분할 시 행동맞는 데이터
CP정확성을 지키려고 응답을 거부한다잔액. 틀린 값보다 잠시 안 되는 것이 낫다
AP응답하되 옛 값을 줄 수 있다상품 목록. 옛 값이라도 보여주는 것이 낫다

흔한 실수: CA 시스템을 고를 수 있다고 답하는 것. 단일 노드가 아니면 CA 는 없습니다. 그리고 분할이 없는 평시에는 일관성과 가용성을 함께 가질 수 있어서, CAP 은 장애 시의 행동 규칙을 말하는 정리입니다.

Q.CP vs AP 시스템 예시를 들어주세요

성향분할 시 행동
CPZooKeeper, etcd, HBase과반을 못 모으면 쓰기를 거부한다
CP단일 리더 관계형 DB 구성리더를 잃으면 새 리더 선출까지 쓰기가 멈춘다
APCassandra, DynamoDB 기본 설정받아 두고 나중에 수렴시킨다
APDNS옛 값을 주더라도 응답한다

CP 쪽 도구가 하는 일을 보면 이유가 보입니다. 분산 잠금이나 리더 선출은 틀린 답이 곧 사고입니다. 두 노드가 동시에 리더라고 믿으면 데이터가 갈라집니다. 그래서 확신이 없으면 응답하지 않습니다.

AP 쪽은 반대입니다. 좋아요 수나 방문자 통계가 잠시 어긋나도 서비스가 계속 도는 편이 낫습니다.

같은 시스템에서 설정으로 바꿀 수 있는 경우도 많습니다. 쓰기와 읽기의 정족수를 조절해 성향을 옮기는 방식입니다.

흔한 실수: 제품 이름으로 성향을 외우는 것. 대부분의 저장소는 설정으로 성향이 바뀝니다. 어떤 설정에서 어떻게 동작하는지로 말하는 편이 정확합니다.

Q.실무에서 CAP을 어떻게 적용하나요?

시스템 전체를 하나로 정하지 않고 기능 단위로 나눠 정합니다.

기능선택이유
결제, 재고 차감일관성틀린 값이 곧 손실
로그인 세션가용성잠깐 옛 값이어도 큰 문제가 아니다
상품 목록, 검색가용성몇 초 지난 값이어도 된다
좋아요 수, 조회수가용성어긋남을 눈치채지 못한다
계정 권한 변경일관성회수한 권한이 남아 있으면 사고다

그리고 대부분의 시간에는 분할이 없습니다. 그래서 실무에서 더 자주 마주치는 판단은 평시의 지연 대 일관성 쪽입니다. 정족수를 높이면 정확하지만 느려지고, 낮추면 빠르지만 어긋날 수 있습니다.

이것을 다루는 방식이 그래서 이렇습니다.

방법내용
요청별 수준같은 저장소에서 중요한 읽기만 강한 일관성으로
경계 분리정확성이 필요한 데이터만 별도 저장소로
보정어긋남을 감지해 뒤에서 맞추는 절차를 둔다

흔한 실수: 전 시스템을 강한 일관성으로 맞추는 것. 필요 없는 곳에서 지연과 가용성을 잃습니다.

Q.BASE란 무엇인가요?

ACID 의 대안으로 제시된 성질입니다. 강한 일관성을 포기하고 가용성을 취하는 쪽입니다.

글자의미
BA기본적으로 가용하다. 일부가 죽어도 응답한다
S상태가 변할 수 있다. 쓰기가 없어도 값이 바뀔 수 있다
E결국 일치한다. 시간이 지나면 수렴한다
항목ACIDBASE
일관성항상결국
가용성정확성을 위해 포기할 수 있다우선한다
규모 확장수직 확장에 유리수평 확장에 유리
맞는 곳금전, 재고통계, 피드, 추천

두 번째 글자는 복제가 전파되는 동안 같은 값을 두 번 읽으면 다를 수 있다는 뜻입니다. 쓰기를 하지 않았는데도 조회 결과가 바뀝니다.

흔한 실수: BASE 를 "정합성을 포기한다"로 읽는 것. 포기가 아니라 언제 맞출지를 미루는 것입니다. 그래서 얼마나 걸려 수렴하는지, 그동안 사용자가 무엇을 볼 수 있는지를 설계해야 합니다.

먼저 스스로 답해보고 아래 답변과 견줘보세요. 막히는 부분은 문제로 확인할 수 있어요.

더 깊이 공부하기

읽었으면 문제로 확인해보세요

분산 시스템 문제를 풀면 틀린 문제가 자동으로 노트에 쌓입니다. 가입 없이 5문제를 먼저 풀어볼 수도 있어요.