본문 바로가기
데이터베이스

CAP 이론 소개 - 데이터베이스 초보자용

by N.Damgom 2022. 3. 26.

밑에 세줄요약 있음

살펴보기

  • CAP 이론이란?
  • MongoDB의 CP 시스템과 Cassandra의 AP 시스템

CAP란?

분산 데이터베이스는 방대한 데이터를 다루기에 유용한 시스템이다. 분산 데이터베이스는 수평 확장할 수 있기 때문에 트래픽이 증가하더라도 낮은 지연 시간을 유지할 수 있고, 일부 노드 장애에 적절히 대응할 수 있다. NoSQL 데이터베이스는 대표적인 분산 데이터베이스이며, 유연하게 데이터를 다룰 수 있다는 장점이 있다.
NoSQL 데이터베이스는 서로 다른 특징을 가진 여러 제품이 있기 때문에 애플리케이션에 맞는 특성에 맞는 데이터베이스를 선택해야 한다. 이를 위해서는 각 제품의 특징뿐만 아니라 데이터베이스 이론 또한 이해해야 한다. CAP는 분산 데이베이스 속성에 관한 이론으로써, 분산 데이터베이스 활용이 많아지면서 최근 각광을 받고 있다.

CAP 이론은 시스템 장애로 인해 몇몇의 인스턴스가 다른 인스턴스와 통신할 수 없을 때 전체 데이터베이스를 어떻게 제어할 지 결정한다. 그러나 CAP 이론에 대해 잘못 이해되고 있는 부분이 있기 때문에, 이 아티클에서는 CAP 이론에 대해 정확히 소개하며, 적절한 분산 데이터베이스를 선택하는 방법에 대해 다룬다. 우선, 분산 데이터베이스 시스템을 알아보자.

목차

  • 분산 데이터베이스란 무엇인가
  • 예시를 통해 CAP 이론을 이해하기
  • CAP 이론의 용어를 이해하기
  • CAP 이론이란?
  • MongDB를 통해 CP를 이해하기
  • Cassandra를 통해 AP를 이해하기

분산 데이터베이스 시스템

NoSQL 타입의 분산 데이터베이스 시스템에서, 여러 대의 노드, 즉 여러 대의 컴퓨터는 데이터베이스를 사용하는 사용자 관점에서 하나의 데이터베이스에 접속하는 것처럼 보여진다. 분산 데이터베이스는 데이터를 여러 대의 노드에 저장한다. 노드란 데이터베이스 인스턴스를 구동하는 물리적인 서버이며 각 노드는 다른 노드와 서로 통신한다.
사용자가 데이터베이스에 쓰기 작업을 할 때, 데이터는 분산 데이터베이스를 구성하는 특정 노드에 써지며, 사용자는 어디에 데이터가 쓰여졌는 지 알지 못한다. 비슷하게, 사용자가 데이터를 조회할 때 요청을 받는 노드는 분산 데이터베이스 환경 내 인접한 노드를 탐색해 결과를 돌려주고, 사용자는 데이터가 어디에 저장되어 있는지 알 지 못한다. 이런 방식으로 사용자는 분산 데이터베이스가 마치 하나의 데이터베이스인 것처럼 사용할 수 있다.
분산 데이터베이스 시스템의 장점은 명확하다. 사용자 트래픽이 늘어남에 따라, 데이터베이스 관리자는 분산 데이터베이스 환경에 노드를 더함으로써 쉽게 수평 확장할 수 있다. 일반적으로 수직 확장보다 수평확장이 저렴하기 때문에 대용량 데이터와 트래픽에 효율적으로 대응할 수 있다.

이제 적절한 분산 시스템을 선택해보자. 이를 위해 CAP 이론에 대해 알아야 한다.

예시를 통해 CAP 이론을 이해하기

Brewer 이론으로도 알려진 CAP는 Consistency(일관성), Availability(가용성), Partition Tolerance(분할 허용성)의 약자이다. CAP 이론은 “적절한 응답 시간 내 세 가지 속성을 모두 만족시키는 분산 시스템을 구성할 수 없다”는 이론이다. 통신사 예시를 통해 각각을 이해해보자.

가용성, Availability

통신사가 있고 우리가 그 고객이라고 생각해보자. 통신사 고객센터는 언제든지 연락 가능하다. 고객은 필요한 정보를 고객센터를 통해 언제든지 알아낼 수 있다. 이것을 가용성이라고 한다.

일관성, Consistency

이제 우리가 새로운 집으로 이사를 해서 집 주소를 변경해야한다고 생각해보자. 고객센터에 전화를 걸면 상담원과 연결된다. 상담원은 집 주소를 변경한다. 전화를 끊고 난 뒤, 집 주소는 정확히 말했으나 잘못된 호수를 말했다는 사실을 깨닫고 다시 고객센터에 전화를 건다. 이번에는 다른 상담원과 연결이 됐으나 연결된 상담원 또한 정확히 변경된 내용을 알고 있다. 두번째 통화에서 다른 상담원과 연결됐더라도, 첫번째 상담원과 같은 정보를 공유한다 이를 일관성이라고 한다.

분할 허용성, Partition tolerance

집과 회사에 와이파이가 잘 설치되어 있고, 최근들어 밖으로 잘 나가지 않아 현재 사용 중인 요금제가 더 이상 나에게 맞지 않는다는 것을 알게 됐다. 요금제를 변경하기 위해 고객센터에 다시 전화를 걸었다. 고객센터에서는 센터 내 전산 문제 때문에 본사와 통신할 수 없다고 한다. 하지만 고객센터는 정상적으로 운영되며, 통신이 복구될 때까지 잠시 기다리거나 변경을 적용하되, 다른 상담원은 잠시동안 예전 정보를 알고 있을 수 있다고 한다. 이를 분할 허용성이라고 한다.

CAP 이론을 이해하기

이제 하나씩 각 용어들을 공식적으로 이해해보자.

일관성, Consistency

일관성이란 사용자가 분산 데이터베이스 상의 어떤 노드와 통신하는 지 상관없이 같은 데이터를 조회할 수 있는 것을 의미한다. 조회한 데이터는 가장 최근에 쓰여진 데이터이다. 따라서 만약 하나의 노드에 쓰기 작업이 이루어졌다면, 이는 모든 복제본에 반영이 되어야 한다는 것이며, 이는 사용자가 어떤 노드와 통신하는 지와 상관없이 같은 데이터를 보여주게끔한다.
그러나 시스템이 모든 인스턴스에 변경 내용을 즉각 반영하는 것은 사실상 불가능에 가깝다. 따라서 일관성의 목표는 데이터의 동기화가 충분히 빨라 사용상의 문제가 없게끔 하는 것이다.
일관성은 금융이나 개인정보와 같이 모든 사용자가 일관성있는 데이터를 조회해야할 때 중요하다. 예를들어 금융 앱을 이용할 때 PC나 스마트폰, 태블릿 또는 어디에서 보든 지 같은 잔고를 확인할 수 있어야 한다.

가용성, Availablity

가용성이란 모든 요청이 응답을 받을 수 있어야 한다는 것을 의미한다. 사용자기 읽기 작업을 하든 쓰기 작업을 하든, 심지어 작업이 실패했더라도 사용자는 응답을 받을 수 있어야 한다. 즉 시스템이 중단되는 일 없이 언제든지 사용 가능한 상태여야 한다. 가용성은 사용자가 데이터가 일관되지 않더라도 언제든지 접근할 수 있다는 것을 의미한다. 예를들어 스마트폰과 PC에서 은행앱을 사용할 때 서로 잔고가 일치하지 않더라도 잔고를 조회할 수 있어야 한다.

분할 허용성, Partition Tolerance

분할이란 노드 간 통신이 끊어지는 것을 의미한다. 즉 한 노드가 다른 노드와 통신할 수 없을 때 분할이 생겼다고 한다. 이는 네트워크 장애나 서버 장애 혹은 다른 이유로 인한 것일 수 있다.
분할 허용성이란 시스템 내 분할이 생겼을 때 시스템이 여전히 작동하는 것을 의미한다. 즉 한 노드가 다른 노드와 통신할 수 없을 때, 다른 복제 노드가 사용자 요청에 응답할 수 있어야 한다. 이는 데이터의 복제본을 여러 다른 노드에 저장하여 처리하는 것을 의미한다. 따라서 분할이 생기더라도 복제본으로 부터 데이터를 조회할 수 있다. 분할 허용성은 분산 데이터베이스 시스템에서 필수적이다.

CAP 이론이란?

CAP 이론이란 분산 데이터베이스 시스템은 분할이 생겼을 때 일관성과 가용성 중 하나를 희생해야 한다는 것을 의미한다. 분산 데이터베이스 시스템은 반드시 네트워크 장애나 여러 이유들로 인해 장애가 발생할 수 밖에 없다. 그러므로 분산 데이터베이스 시스템은 반드시 분할 허용성을 가지고 있어야 하며, 일관성과 가용성 중 하나를 선택해야만 한다.
예를 들어 두 노드로 이루어진 분산 시스템에서 분할이 생겼을 때 데이터의 일관성을 보장하기란 불가능하다. 그러므로 분할이 생겼더라도 정상적으로 요청을 처리해 일관성을 희생하고 가용성을 높이던지, 잠시 요청 처리를 중단하고 중단된 노드가 재실행될 때까지 기다려 가용성을 희생하고 일관성을 지키는 방법 중 하나를 선택해야 한다. 따라서 NoSQL 데이터베이스는 CP 시스템과 AP 시스템으로 분류된다. CA 시스템은 일반적으로 하나의 노드에서 동작하는 모놀리식 데이터베이스 시스템을 의미한다.

MongoDB를 통해 CP를 이해하기

MongoDB를 통해 가용성을 포기한 분산 데이터베이스 시스템을 이해해보자. MongoDB는 데이터를 하나 혹은 여러 개의 프라이머리 노드에 이진 JSON 형태로 저장한다. 각 프라이머리 노드는 로그를 이용해 비동기적으로 업데이트 되는 복제본을 가진 여러 개의 세컨더리 노드를 가진다. 각 노드는 다른 모든 노드와 통신하여 서로의 상태를 확인한다. 만약 몇 초동안 응답을 받지 못하면 해당 노드는 접근 불가능한 상태로 지정된다.
프라이머리 노드가 중단되었다면 세컨더리 노드 중 하나가 프라이머리 노드로 승격되어야 한다. 새로운 프라이머리 노드가 선출되는 동안 시스템은 모든 쓰기 작업은 잠시 사용 불가능(unavailable)한 상태가 된다. 따라서 MongoDB는 CP 시스템으로 분류된다.

Cassandra를 통해 AP를 이해하기

Cassandra를 통해 일관성을 포기한 분산 데이터베이스 시스템을 이해해보자. 카산드라는 Peer-to-peer 시스템이다. 즉 카산드라는 프라이머리 노드 없이 모든 노드가 읽기 작업과 쓰기 작업을 수행할 수 있고 복제본을 분리된 다른 노드에 저장한다. 프라이머리 노드 없이 모든 노드가 같은 작업을 수행하므로 SPF가 없다는 장점이 있다. 지정된 복제 수만큼 데이터를 시계 방향으로 인접한 노드에 복제한다.
한 노드가 노드 간 통신에서 끊어진 상황을 가정해보자. 해당 노드가 다른 노드와 통신할 수 없어도 해당 노드는 여전히 읽기 작업과 쓰기 작업을 수행할 수 있으나 데이터가 다른 노드와 맞지 않는 상태, 즉 일관성이 깨진 상태가 된다. 카산드라는 이를 최종적 일관성(Eventual Consistency)를 통해 추후에 복구한다. 따라서 모든 노드간 데이터가 동기화되기 전까지 각 노드는 서로 다른 버전의 데이터를 가지고 있다.
따라서 카산드라는 일관성을 포기한 대신 높은 가용성을 확보한 AP 시스템으로 분류된다.

마무리

CAP 이론을 통해 애플리케이션에 적절한 데이터베이스를 선택할 수 있다. 그러나 CAP 이론을 단순히 이분법적으로 바라보면 안된다. 분할 상황에서 아무 값도 돌려주지 않는 사용 불가능한 상황 대신 단순히 몇초간 더 기다려서 값을 줄 수 있고 읽기 작업만 수행하게끔 할 수 있다. 그러므로 CAP 이론은 절대적이지 않다. 어느 한 쪽을 희생하는 것이 아닌 C와 A 사이의 스펙트럼으로 이해해야 한다. 또한 몇몇의 NoSQL 데이터베이스는 적절히 C와 A의 비율을 조정할 수 있다.
원문: https://www.analyticsvidhya.com/blog/2020/08/a-beginners-guide-to-cap-theorem-for-data-engineering/

CAP Theorem and Distributed Database Systems for Data Engineering

CAP theorem helps to handle your distributed database systems when a few database servers refuse to communicate with each other.

www.analyticsvidhya.com

CAP 이론에 대해 친절하게 설명한 글입니다.
이해하기 어려운 예시는 쉬운 예시로 바꾸고 한글로 옮기기 어려운 문장이 많아 의역했습니다.
정확한 내용은 본문 참고바랍니다. CAP는 분산데이터베이스가 정상상태일 때를 기술하지 못하므로 PACELC 를 추가로 보시길 권합니다. PACELC는 PAC(CAP 에서 순서만 바꾼 것)+ ELC 입니다.
PAC: Partition에서 A or C
ELC: Else 상황(Patition이 아닌 정상)에서 Latency or Consistency
예를들어 몽고디비의 writeConcern을 1로 한다면 EL이고, 과반 이상으로 한다면 EC겠네요.

세줄 요약
1. CAP 다 할수 없는 시스템은 없다. 하지만 분산환경에서 P는 필수
2. AP 시스템: 노드 하나 껏다 켜져서 잠시 동기화 안맞더라도 일단 응답 주고 보자.
3. CP 시스템: 어허~그래도 동기화 될 때까지 기다리자