지난 데이터베이스 글에서 트랜잭션의 ACID 특성에 대해 알아보고, 데이터베이스가 가지는 격리수준에 대해 알아봤다. 이번 글에서는 데이터베이스 별로 나누는 CAP 성질에 대해 알아보도록하자.
CAP 이론은 이론적으로 데이터베이스가 CAP 세 가지 성질을 모두 만족시키는 것이 불가능하다는 것을 설명하는 이론이다. 세 가지 성질이라고 하면 다음과 같다.
여기서 가용성과 분할 내성은 비슷해 보이나 분산 시스템에서 각각 다른 개념이다. 둘 다 시스템의 신뢰성에 연관이 있다.
가용성은 시스템 동작이 얼마나 신뢰성을 갖는 지에 대한 척도 중 하나이다. 시스템에서 언제나 원하는 데이터를 빠르게 가져올 수 있는 지에 대한 내용이다. 서버의 가용성을 늘리기 위해서는 여러 서버를 동시에 운영하고 부하 분산 기술을 적용할 수 잇다.
분할 내성은 시스템이 얼마나 견고한지에 대한 특성이다. 시스템의 분할 내성을 높이려면, 분산 데이터베이스에서 데이터를 복제하여 다른 노드에서도 데이터에 접근할 수 있고, 복제복 일부가 손상되어도 또 다른 복제본으로 이를 대체할 수 있다.
ACID의 C도 일관성, CAP의 C도 일관성을 의미한다. 그러나 각각 이론에서 세부적인 내용은 약간 다르다.
CAP이론에서의 C는 모든 클라이언트가 동시에 같은 데이터를 볼 수 있어야 한다는 것을 의미한다. 분산 시스템에서 데이터의 일관성을 보장하기 위해 다양한 방식의 복제 및 동기화 기술을 사용한다. 이를 통해 모든 클라이언트가 항상 동일한 데이터를 볼 수 있도록 한다. → 시스템 전체 구성에 대한 집중
ACID 이론에서의 C는 데이터베이스에서 데이터가 항상 일관된 상태를 유지한다는 것을 의미한다. 즉 트랜잭션의 시작이 끝나고 난 후에 데이터베이스의 상태가 항상 일치한다는 것을 의미한다. → 시스템 구성보다는 작업 이후에 상태에 집중
CAP을 이론적으로 모두 만족할 수 있는 데이터베이스는 없다고 한다. → 현실적으로 구현 가능한가는 다른이야기라고 하는데.. 조금 어렵다.
우리가 자주 사용하는 관계형 데이터베이스인 MySQL은 CA
또 key-value 데이터베이스로 자주 사용하는 mongodb나 redis는 CP
그리고 Column-Oriented으로 데이터를 저장하는 Cassandra의 경우에는 AP를 만족하는 데이터베이스로 분류된다.
CA (Consistency, Availability)
CP (Consistency, Partition tolerance)
AP (Availability, Partition tolerance)
자료 출처