안녕하세요. 현재 세상에는 수많은 데이터를 저장할 수 있는 서비스가 많이 나와있습니다. 그런데 이런 와중에 내가 만드는 시스템은 어떤 Database를 사용해야 좋을까요? 확장성은 어느정도로 가져가야할지, 사용할 수 있는 비용은 어느정도인지, 팀의 기술 숙련도는 어떤지... 등등 여러가지를 생각해야합니다. 오늘은 여러분의 database 선택의 한가지 척도로써 도움을 줄 수 있는 CAP 이론에 대해서 이야기 해보고자 합니다.
CAP 이론
CAP 이론(또는 Brewer`s theorem)이란 Network로 연결된 분산된 데이터베이스 시스템은 일관성(Consistency), 가용성(Availability), and 분할 내구성(Partition Tolerance)의 3가지 특성중 2가지 특성만을 충족 할수 있고 3가지 모두 충족할 수 없다는 이론입니다. 그러면 각 구성요소에 대해서 알아보도록 하겠습니다.
일관성(Consistency)
일관성을 가진다는 것은 모든 데이터를 요청할 때 응답으로 가장 최신의 변경된 데이터를 리턴 또는 실패를 리턴한다는 것입니다. 즉, 모든 읽기에 대해서 DB노드가 항상 동일한 데이터를 가지고 있어야한다는 의미입니다.
DB가 2개의 Instance를 유지하고 있다면 A에 요청하든 B에 요청하든 동일한 값이 반환됨을 의미합니다. 이말은 A에 update를 하든 B에 update를 했을 경우 누군가 동기화 되기전 READ를 한다면 바로 반환하는 것이 아니라 모두 동기화 후 READ가 되어야 합니다.
가용성(Availability)
가용성은 모든 요청에 대해서 정상적인 응답을 한다는 것입니다. 즉, 클러스터의 노드 일부에서 장애(Down 등)가 발생하더라도 READ와 WRITE 등의 동작은 항상 성공적으로 리턴되어야 한다는 것입니다.
분할 내구성(Partition Tolerance)
분할 내구성이란 DB Node간의 통신 장애가 발생하더라도 동작해야한다는 것입니다. Instacne A와 B가 있습니다. 이때 A와 B의 Instance간의 네트워크에 장애가 발생했습니다. 유저는 A DB에서 쿼리를 했습니다. Instance A는 B의 상태를 알지 못하지만 A 자체만으로 동작합니다. 이를 분할 내구성이라고 합니다.
가용성 VS 분할 내구성
가용성과 분할 내구성의 개념이 조금 헷갈릴 수 있을 것입니다. 개인적으로 확인 했을 때 가용성은 노드에서 장애가 발생하여 Down 되었을 때, 분할 내구성은 노드간의 통신이 정상적으로 이루어지지 않을 때 라고 확인하였습니다.
Client 입장에서보면 차이가 있습니다. 전자의 경우 client a와 b가 있을때 모두 동일한 장애가 나지 않는 node를 이용하지만, 후자의 경우 client 별로 바라보고 있는 node가 다를 수 있습니다.
실제 DB 비교
CAP 이론에 맞춰 DB가 어떤 특성 2가지를 가지고 있는지 확인한 삼각형 그래프입니다. 몇가지 DB를 예를들어 확인해보도록 하겠습니다.
Mysql
MySQL은 위의 삼각형 그래프에서 CA에 속한다고 되어있습니다. 하지만 실질적으로는 설정하기에 따라서 CP 또는 CA에 속할 수 있습니다. 기본적으로 MySQL을 그냥 사용했을 때는 CA에 속하게됩니다. 왜나하면 main이 되는 master 노드가 있고 그 노드를 복제해서 사용하는 slave 가 있는 패러다임을 사용하기 때문입니다. 이때 MySql은 가용성과 일관성을 만족하게 됩니다.
하지만 MySQL은 cluster 설정을 지원합니다. cluster 설정을 하면 MySQL은 CP를 만족하는 시스템이 됩니다. 왜냐하면 data를 유지할만한 cluster 노드가 존재하지 않으면 cluster는 종료될 것이기 때문입니다.
DynamoDB
DynamoDB는 aws에서 지원하는 key/Value의 NoSQL로 AP에 속한다고 알려져있습니다. Dynamo는 key값을 hashing 하고 또 이 값을 mod하여 맞는 서버에 저장해둡니다. 그리고 전체 노드 중 일부 node에 복제해 둡니다. 그리고 data versioning도 진행합니다. DynamoDB에는 strongly consistent 설정을 할 수 있습니다. 이 설정을 하게 되면 DynamoDB는 CP로 변하게 됩니다. 이 설정을 하게 되면 가장 최신의 데이터를 반드시 리턴하게 됩니다. 따라서 모든 노드를 찾기 때문에 가용성은 조금 떨어지게 됩니다.
마무리
CAP 이론 처럼 완벽한 CP, AP 시스템은 없고 대부분 CP와 AP의 어느 중간 쯤에 존재합니다. 그리고 위의 예제에서 봤듯이 configuration에 따라서 변하는 부분이기도 합니다. 또한 이론 자체에 몇가지 한계점이 존재합니다. 가장 문제가 되는것이 P에 대한 명확한 정의가 부족하다는 것입니다. 이런 문제점을 극복하고자 PACELC 이론이 나오기도 했습니다. 따라서 오늘의 이론은 어디까지나 참고로 봐주시기 바랍니다.
하지만 CAP 중 2가지를 선택할 수 있다는 것은 DataBase를 선택할 때 기준이 될 수 있는 중요한 것으로 보여집니다.
다음 번에는 CAP 이론을 보강해서 나온 PACELC 이론은 다음에 추가로 다뤄보도록 하겠습니다.
감사합니다.
참조
educative, What is the CAP theorem
http://eincs.com/2013/07/misleading-and-truth-of-cap-theorem/
'datasource > 데이터베이스' 카테고리의 다른 글
[database] mysql과 mariaDB 중 어떤 DB가 나에게 맞을까? (0) | 2021.05.26 |
---|---|
[데이터베이스] MySQL의 Lock과 트랜잭션 모델 (4) | 2020.11.04 |
[데이터베이스] Lock에 대해서 알아보자 - 기본편 (1) | 2020.10.29 |
[데이터베이스] 트랜잭션과 격리성 (4) | 2020.10.04 |
database 이름 짓기 (1) | 2019.12.23 |
댓글