데이터베이스에는 CAP 이론이 존재한다. CAP 이론은 일관성(Consistency), 가용성(Availability), 분단 허용성(Patition Tolerance)의 줄임말로, 이렇게 3가지 특성 중 2가지 특성만 충족 가능하다는 이론이다. 이는 구현하고자 하는 서비스에 적합한 DB를 고르는 데에 중요한 척도가 되기도 한다.
일관성은 ACID 원칙에도 등장하는 특성으로 어떠한 환경에서도 항상 최신의 데이터가 반환되어야 한다는 특성이다. 즉, 여러 개의 장비를 통해 같은 데이터를 같은 시간에 조회한다면 모두 같은 결과 값을 반환해주어야 한다.
일관성이 보장되는 DB의 경우에는 내부적으로 트랜잭션이나 그와 비슷한 매커니즘을 가지고 있다는 뜻이기도 하다.
가용성은 서버가 가동되고 있는 동안 클라이언트로부터 들어오는 모든 요청에 대한 정상적인 응답을 반환하는 특성이다. 말 그대로 서버가 돌아가는 이상, 언제든 사용 가능한 DB의 특성이라고 할 수 있다.
이는 다른 클러스터의 노드 일부에서 장애가 발생하더라도 요청에 대한 응답은 항상 성공적으로 반환되어야 한다.
분단 허용성은 여러 대의 클러스터가 존재할 때, 클러스터 간의 통신이 끊기더라도 시스템이 잘 동작해야 한다는 특성이다. 예를 들어 여러 개의 DB 노드 간의 통신 장애가 발생하여 통신이 끊기더라도 요청이 들어오면, 다른 인스턴스의 상태를 모르더라도 요청에 대한 응답을 반환한다.
가용성과 분단 허용성이 비슷하게 와닿을 수 있다. 이에 대하여 둘의 특징을 집어 보면, 가용성은 노드에 장애가 발생하였을 때, 분단 허용성은 노드 간의 통신에 장애가 발생하였을 때로 생각한다면 구분할 수 있다.
관계형 데이터베이스는 CAP 중 어떤 특성 2가지를 충족하고 있을까? 결론부터 말하면 관계형 데이터베이스는 CA를 보장하는 시스템이다.
관계형 데이터베이스는 데이터들 간의 관계가 연결되어 있기 때문에 일관성이 매우 중요하다. 만약 관계형 데이터베이스가 다량의 서버를 운용하는 클러스터링으로 운영된다고 생각해보자. 여러 개의 서버 중 하나의 서버의 연결이 끊어졌을 때, 분단 허용성을 지킨다면 서버 간의 통신이 원활하지 않아도 Read/Write가 적용되기 때문에 서버 간의 데이터의 일관성을 깨트리게 된다. 이러한 경우, 모든 서버를 종료하여 클라이언트가 접속할 수 없도록 해야 한다.
그러나 RDBMS가 CA를 포기한다면 CP가 어느정도 보장되는 시스템을 구축할 수 있다.
NoSQL은 CP나 AP시스템이다. NoSQL은 대용량의 분산 시스템에 사용되기 때문에 CP보다도 AP가 더 적절하다. 만약 C, 즉 일관성이 보장되는 시스템이어야 한다면 한번의 Write 작업을 위해 모든 서버가 응답할 때까지 Lock을 걸어 일관성을 보장해야 하는데, 이럴 경우 성능 이슈가 크기 때문에 대용량의 분산 시스템에 일관성은 적절하지 않다.
그러나 DynamoDB의 경우 strongly consistent를 설정할 수 있는데, 이를 설정하면 CP로 변하게 된다.
CAP이론은 일관성(Consistency), 가용성(Availability), 분단 허용성(Partition Tolerance) 이렇게 3가지 특성 중 2가지 특성만 보장하는 것이 최선이라는 DB 이론이다.
보통 CA, CP, AP의 형태를 띈다.
RDBMS의 경우 다량의 서버로 운용하는 클러스터링에 적합하지 않다.
NoSQL의 경우 대용량 분산 시스템으로 사용된다.
가장 중요한 것은 CAP 이론에서 완전한 CA, CP, AP는 없고, 그 사이 어느 곳에 위치하게 된다는 것이다.
CAP 이론가 DB를 선택하는 데에 중요한 지표가 되는 것은 어떻게 보면 당연한 것 같다.