출발점

분산 시스템

노드가 여러 개라서 장애와 네트워크 단절을 피할 수 없습니다.

핵심 규칙

분할이 생기면 C, A, P를 동시에 모두 유지할 수 없습니다.

그래서 실전의 NoSQL은 보통 P(분할 내성)를 공통 전제로 두고, 그 다음에 일관성(C)가용성(A) 중 무엇을 더 우선할지 선택합니다.

공통 선택

P는 먼저 확보

네트워크가 갈라져도 시스템 자체는 계속 버텨야 하므로, 실제 비교는 대체로 CP vs AP가 됩니다.

분할 발생 시 질문: 응답을 잠시 멈춰서라도 같은 값을 지킬까, 아니면 응답을 계속하고 나중에 값을 맞출까?
CP

같은 값을 지키기 위해 잠시 멈춘다

분할 중에는 일부 요청을 막아서라도 모든 노드가 같은 상태를 보게 합니다.

포기 A

장애 중

쓰기 차단, 리더 재선출, 일시적 불가용이 생길 수 있습니다.

의미

값이 틀어지는 것보다 정확한 상태 유지를 더 중요하게 봅니다.

대표 예

Redis Cluster MongoDB HBase
AP

응답을 유지하고 값은 나중에 맞춘다

분할 중에도 서비스는 계속되지만, 최신 값이 잠시 다를 수 있음을 받아들입니다.

포기 C

장애 중

응답 지속, 복제 지연 허용, 노드마다 읽기 결과가 잠시 다를 수 있습니다.

의미

끊기지 않는 서비스가 우선이며, 값은 최종 일관성으로 수렴합니다.

대표 예

DynamoDB Cassandra
CA는 왜 보조 개념인가? 분할을 별도로 다루지 않는 단일 노드 또는 매우 제한된 환경에 가까운 선택이기 때문입니다. NoSQL의 분산 문맥에서는 보통 P를 깔고 CP와 AP의 성향을 읽는 것이 핵심입니다.