CAP 이론

기술노트

CAP 이론 (CAP Theorem)

← 목록으로 돌아가기

CAP 이론은 분산 데이터 시스템이 동시에 보장할 수 있는 세 가지 속성, 즉 일관성(Consistency), 가용성(Availability), 분할 용납성(Partition Tolerance) 중에서 최대 두 가지만을 만족시킬 수 있다는 원칙입니다.

2000년에 에릭 브루어(Eric Brewer)에 의해 제기된 이 이론은, 여러 대의 서버(노드)로 구성된 분산 시스템을 설계할 때 반드시 고려해야 할 기본적인 제약 조건을 제시합니다. 특히, 네트워크 장애는 언제든 발생할 수 있다는 현실을 인정하고, 그 상황에서 시스템이 어떤 특성을 우선할지 선택해야 함을 알려주는 중요한 지침입니다.


CAP의 세 가지 속성

1. 일관성 (Consistency)
모든 노드가 동시에 같은 데이터를 보여주는 것을 의미합니다.
  • 어떤 노드에 접속해서 데이터를 조회하더라도 항상 가장 최근에 쓰여진(committed) 데이터를 볼 수 있어야 합니다. 데이터의 일관성이 깨지면 안 되는 금융 시스템 등에서 매우 중요합니다.
2. 가용성 (Availability)
모든 요청에 대해 시스템이 항상 정상적인 응답을 주는 것을 의미합니다.
  • 특정 노드에 장애가 발생하더라도, 다른 노드들은 계속해서 읽기 및 쓰기 요청을 처리할 수 있어야 합니다. 즉, 시스템이 다운되지 않고 항상 작동 가능한 상태를 유지하는 것을 목표로 합니다.
3. 분할 용납성 (Partition Tolerance)
노드 간의 네트워크 연결이 끊어지거나(네트워크 분할), 메시지가 유실되더라도 시스템 전체가 계속해서 동작하는 것을 의미합니다.
  • 현대의 분산 시스템은 수많은 노드와 복잡한 네트워크로 연결되므로, 네트워크 분할은 피할 수 없는 문제입니다. 따라서 분산 시스템은 반드시 분할 용납성(P)을 가져야 합니다.

현실적인 선택: CP인가, AP인가?

분산 시스템은 반드시 분할 용납성(P)을 가져야 하므로, 네트워크 분할 상황이 발생했을 때 **일관성(C)과 가용성(A) 중 하나를 선택**하는 트레이드오프에 직면하게 됩니다.

CP 시스템 (Consistency + Partition Tolerance)
네트워크 분할 시, 데이터의 일관성을 우선하기 위해 가용성을 희생하는 시스템입니다.
  • **동작 방식:** 특정 노드에 쓰기 작업이 발생하면, 그 데이터가 다른 모든 노드에 복제될 때까지 기다립니다. 만약 네트워크 분할로 인해 일부 노드에 데이터가 복제되지 못하면, 데이터의 일관성을 해칠 수 있는 해당 노드에 대한 읽기/쓰기 요청을 거부하거나 에러를 반환합니다. 이로 인해 시스템의 일부는 일시적으로 "사용 불가능(unavailable)" 상태가 될 수 있습니다.
  • **대표 시스템:** `MongoDB`, `Redis`, `HBase`, `Zookeeper`
  • **적합한 경우:** 은행 계좌, 결제 시스템 등 데이터의 불일치가 절대로 허용되지 않는 서비스
AP 시스템 (Availability + Partition Tolerance)
네트워크 분할 시, 가용성을 우선하기 위해 일관성을 일부 희생하는 시스템입니다.
  • **동작 방식:** 네트워크 분할이 발생하더라도 모든 노드는 계속해서 읽기/쓰기 요청을 받습니다. 이로 인해 일부 노드는 아직 동기화되지 않은 낡은 데이터를 반환할 수 있습니다. 데이터는 네트워크가 복구된 후에 점진적으로 동기화되며, 이를 '결과적 일관성(Eventual Consistency)'이라고 부릅니다.
  • **대표 시스템:** `Cassandra`, `Amazon DynamoDB`, `CouchDB`
  • **적합한 경우:** 소셜 미디어 피드, 실시간 검색 등 일시적인 데이터 불일치가 큰 문제가 되지 않으며, 항상 서비스가 제공되는 것이 더 중요한 경우

결론적으로, CAP 이론은 "완벽한 분산 시스템은 없다"는 것을 알려줍니다. 개발자는 서비스의 특성을 정확히 파악하고, CAP 이론에 근거하여 일관성과 가용성 사이에서 현명한 트레이드오프를 선택해야 합니다.