CAP란?
- 분산 컴퓨터 시스템을 설명하는 데 사용되는 이론이다.
- 분산 컴퓨터 시스템에서 CAP 3가지 특성 중에서 2가지만 만족할 수 있으면 1가지는 만족할 수 없다는 이론이다.
📌 주의해야 될 것은 두 가지 속성만을 지원한다는 것이 아니라 두 가지 속성을 지원하기 위해서는 한 가지 속성을 희생해야 된다는 것이다.
분산 컴퓨터란 무엇인가??
- 일반적으로 웹 서버와 DB서버를 동일한 시스템에 설치하지는 않을 것이다. 이와 같이 "단일 시스템"이 아닌 다중 시스템 환경에서 서버가 여러 곳으로 분산되어 소프트웨어가 동작하는 것을 분산 컴퓨터(팅)이라고 한다.
우선 용어부터 정리하도록 하자.
일관성(Consistency)
- 일관성은 동시성, 동일성이라고도 하며 어떤 데이터에 대해서 일관적인 데이터를 보증한다는 것을 의미한다.
- 일관적인 데이터를 보증한다는 것은 어떤 특정 시점에 데이터를 요청, 조회할때 그 데이터는 항상 동일하다는 것을 의미한다. RDBMS에서 클라이언트 1이 특정 컬럼에 저장된 값 300을 500으로 변경했다면, 클라이언트 2가 그 데이터를 조회하면 그 값은 항상 500이어야 한다는 조건이다.
- 일관성은 RDBMS가 지원 하는 가장 기본적인 기능이지만 NoSQL에서는 빠른 분산 처리를 위해 일관성을 희생하기도 한다.
가용성(Availability)
- 가용성이란 모든 클라이언트의 Read와 Write에 대해 항상 응답이 가능(성공)해야 함을 말한다. 내고장성이라고도 하며, 내고장성을 가진 어떤 클러스터 내에 몇 개의 노드가 망가지더라도 정상적인 서비스가 가능하다. 이는 시스템 아키텍처 설계에서 말하는 고가용성(High Availability)와 유사한 개념으로 볼 수 있다.
- 몇몇 NoSQL은 가용성을 보장하기 위해 데이터 복제를 사용한다.
- 가용성을 설명하면 빠지지 않는 단어가 단일 고장점(SPOF, Single Point Failure)이다. 단일 고장점이란 시스템을 구성하는 개별 요소 중에서 어떤 하나의 요소가 망가졌을 때 시스템 전체를 멈추게 만드는 요소를 말한다. 단일 고장점을 가진 시스템은 이를 지원하기 위해 별도의 솔루션을 같이 사용하기도 한다.
분할 내구성(=분할 허용성, Partition Tolerance)
- 분할 내구성은 두 지역간의 네트워크가 단절되거나 네트워크의 데이터가 유실되더라도 각 지역의 시스템은 정상적으로 동작해야 한다는 것이다.
- CP 시스템 : Consistency와 Partition Tolerance를 지원하는 키-값 저장소, 가용성을 희생한다.
- AP 시스템 : Availabilty와 Partition Tolerance를 지원하는 키-값 저장소, 데이터 일관성을 희생한다.
- CA 시스템 : Consistency와 Availability를 지원하는 키-값 저장소, 분할 내구성을 희생한다. 그러나 통상 네트워크 장애는 피할 수 없는 일로 여겨지므로, 분산 시스템은 반드시 분할 내구성을 감내할 수 있도록 설계되어야 한다. 그러므로 실세계에서는 CA 시스템은 존재하지 않는것으로 여긴다.
- RDBMS는 일반적으로 CA영역에 있는 일관성과 가용성을 지원한다. (CAP는 분산 시스템이 전제조건이고 따라서 RDBMS에 CAP를 적용하는 것은 맞지 않다고도 한다. 여기)
- NoSql은 CP나 AP 형태를 가지고 있다. CP형태를 가진 NoSQL은 MongoDB, HBASE가 있으며 AP형태를 가지는 NoSQL은 Couchdb, Cassandra 등이 있다.
정리
CAP이론은 모든 RDBMS나 NoSQL을 설명하기에는 한계가 있으나 이러한 이론을 바탕으로 "얻는 것이 있으면 잃는 것도 있다"라는 진리를 깨닫자. 그리고 이러한 깨달음을 통해 자신이 서비스에 적절한 데이터 베이스 모델을 선택하도록 하자.!
Reference
- 에릭님
- 이것이 레디스다(한빛미디어)
- hamait.tistory.com/197
- sabarada.tistory.com/91
- 가상면접 사례로 배우는 대규모 시스템 설계 기초