CAP 정리란?
CAP 정리란 분산 시스템은 원하는 세 가지 특성, 즉 일관성, 가용성 및 분할 내성 중 두 가지만 제공할 수 있음을 증명한 정리입니다.
검은색과 파란색의 그라데이션 배경
CAP 정리란?

"저렴함, 신속함, 우수함: 두 가지만 고르세요"라는 제목으로 조경이나 도장 또는 다른 업체들의 광고를 보신 적이 있으신가요?

CAP 정리는 분산 시스템에 이와 유사한 논리를 적용합니다. 즉, 분산 시스템은 일관성(Consistency), 가용성(Availability 분할 내성(Partition tolerance)(CAP의 'C', 'A' 및 'P')의 세 가지 원하는 특성 중 두 가지만 제공할 수 있습니다.

분산 시스템은 동시에 둘 이상의 노드(물리적 또는 가상 머신)에 데이터를 저장하는 네트워크입니다. 모든 클라우드 애플리케이션은 분산 시스템이므로, 애플리케이션에 가장 필요한 특성을 제공하는 데이터 관리 시스템을 선택하려면 클라우드 앱의 설계 시에 CAP 정리를 반드시 이해하고 있어야 합니다.

CAP 정리는 2000년 분산 컴퓨팅에 대한 강연에서 Eric A. Brewer 교수가 처음으로 주장했기 때문에 Brewer의 정리라고도 합니다. 2년 후에, MIT의 Seth Gilbert 및 Nancy Lynch 교수는 "Brewer 교수의 가설"에 대한 증명을 공개했습니다.

 

CAP 정리의 'CAP'에 대해 자세히 알아보기

CAP 정리에서 언급한 세 가지의 분산 시스템 특성을 자세히 살펴봅니다.

일관성

일관성이란 어떤 노드에 연결되었는지와 무관하게 모든 클라이언트가 동시에 동일 데이터를 볼 수 있음을 의미합니다. 이러한 상황이 발생하려면, 데이터가 하나의 노드에 기록될 때마다 이 데이터는 쓰기가 '성공'으로 간주되기 전에 시스템의 다른 모든 노드로 즉시 전달되거나 복제되어야 합니다.

가용성

가용성이란 하나 이상의 노드가 작동 중지된 경우에도 데이터를 요청하는 클라이언트가 응답을 받음을 의미합니다. 이를 다른 방법으로 설명해 보면, 분산 시스템의 모든 작업 중인 노드는 예외 없이 모든 요청에 대해 유효한 응답을 리턴합니다.

분할 내성

분할(Partition)이란 분산 시스템 내의 통신 단절, 즉 두 노드 간의 연결이 유실되거나 일시적으로 지연된 상태입니다. 분할 내성(Partition Tolerance)이란 시스템의 노드 간에 다수의 통신 단절에도 불구하고 클러스터가 계속해서 작동함을 의미합니다.

CAP 정리 NoSQL 데이터베이스 유형

NoSQL 데이터베이스는 분산 네트워크 애플리케이션에 적합합니다. 수직 확장이 가능한 SQL(관계형) 데이터베이스와 달리 NoSQL 데이터베이스는 수평 확장이 가능하고 설계에 따라 분산됩니다. 즉, 여러 개의 상호 연결된 노드로 구성된 성장 네트워크에서 빠르게 확장할 수 있습니다. (자세한 내용은 "SQL과 NoSQL 데이터베이스: 차이점"을 참조하십시오.)

오늘날, NoSQL 데이터베이스는 이들이 지원하는 두 개의 CAP 특성을 기반으로 분류됩니다.

  • CP 데이터베이스: CP 데이터베이스는 가용성을 희생시키면서 일관성과 분할 내성을 제공합니다. 두 노드 간에 분할이 발생하면, 시스템은 분할이 해결될 때까지 일관되지 않은 노드를 종료(즉, 사용 불가능하게)해야 합니다.

  • AP 데이터베이스: AP 데이터베이스는 일관성을 희생시키면서 가용성과 분할 내성을 제공합니다. 분할이 발생했을 때 모든 노드가 사용 가능한 상태로 유지되지만 잘못된 분할에 놓인 노드는 다른 노드보다 오래된 버전의 데이터를 리턴할 수 있습니다. (분할이 해결되면 AP 데이터베이스는 일반적으로 노드를 재동기화하여 시스템의 모든 불일치를 복구합니다.)

  • CA 데이터베이스: CA 데이터베이스는 모든 노드에서 일관성과 가용성을 제공합니다. 그러나 시스템에 있는 두 노드 사이에 분할이 있으면 일관성과 가용성을 제공할 수 없기 때문에 내결함성을 제공할 수 없습니다.

분산 시스템에서는 분할을 피할 수 없으므로 CA 데이터베이스 유형을 맨 마지막에 두었습니다. 즉, CA 분산 데이터베이스는 이론적으로 논의할 수 있지만, 현실에서 사용하기 위해 존재할 수 없습니다. 이는 필요한 경우 분산 애플리케이션에 대한 CA 데이터베이스를 보유할 수 없다는 의미는 아닙니다. 많은 관계형 데이터베이스(예: PostgreSQL)는 일관성과 가용성을 제공하며, 복제를 통해 여러 노드에 배치될 수 있습니다.

MongoDB 및 CAP 정리

MongoDB는 BSON(바이너리 JSON) 문서로 데이터를 저장하는, 널리 사용되는 NoSQL 데이터베이스 관리 시스템입니다. 여러 위치에서 실행되는 빅데이터 및 실시간 애플리케이션에 자주 사용됩니다. CAP 정리와 관련하여, MongoDB는 CP 데이터 저장소이며 가용성을 희생시키면서 일관성을 유지하여 네트워크 분할을 해결합니다.

MongoDB는 단일 마스터 시스템으로, 각 복제본 세트(IBM 외부 링크)에는 모든 쓰기 조작을 수신하는 하나의 기본 노드만 있을 수 있습니다. 동일한 복제본 세트의 다른 모든 노드는 1차 노드의 조작 로그를 복제하여 자체 데이터 세트에 적용하는 2차 노드입니다. 기본적으로 클라이언트는 1차 노드에서 읽지만, 이는 2차 노드에서도 읽을 수 있도록 허용하는 읽기 환경 설정(IBM 외부 링크)을 지정할 수도 있습니다.

1차 노드가 사용 불가능하게 되면, 가장 최근의 조작 로그가 있는 2차 노드가 새 1차 노드로 선정됩니다. 다른 모든 2차 노드가 새 마스터를 따라잡으면 클러스터를 다시 사용할 수 있게 됩니다. 클라이언트가 이 간격 동안 쓰기 요청을 할 수 없으므로, 데이터는 전체 네트워크에서 일관성을 유지합니다.

Cassandra 및 CAP 정리(AP)

Apache Cassandra는 Apache Software Foundation에서 관리하는 오픈 소스 NoSQL 데이터베이스입니다. 분산 네트워크에 데이터를 저장할 수 있는 와이드 컬럼 데이터베이스입니다. 그러나 MongoDB와는 달리 Cassandra는 마스터리스 아키텍처를 보유하며 결과적으로 하나가 아닌 다수의 장애 지점이 있습니다.

CAP 정리와 관련하여 Cassandra는 AP 데이터베이스이며 가용성과 파티션 허용을 제공하지만 항시 일관성을 제공할 수는 없습니다. Cassandra에 마스터 노드가 없으므로, 모든 노드는 지속적으로 사용 가능해야 합니다. 그러나 Cassandra는 클라이언트가 언제든지 모든 노드에 쓸 수 있도록 허용하고 불일치를 가능한 한 빨리 조정하여 궁극적인 일관성을 제공합니다.

네트워크 분할의 경우에만 데이터가 불일치가 되고 그러한 불일치가 신속하게 해결되므로 Cassandra는 노드가 피어를 따라잡을 수 있도록 "복구" 기능을 제공합니다. 하지만 지속적인 가용성 덕분에 결과적으로 고성능 시스템을 갖출 수 있게 되므로 많은 경우에 상쇄 효과가 있습니다.

마이크로서비스와 CAP 정리

마이크로서비스는 자체 데이터베이스 및 데이터베이스 모델을 포함하여 자체 스택을 통합하고 네트워크를 통해 서로 간에 통신하는 느슨하게 결합된, 독립적으로 배치 가능한 애플리케이션 구성요소입니다. 클라우드 서버와 온프레미스의 데이터 센터 모두에서 마이크로서비스를 실행할 수 있으므로, 하이브리드멀티클라우드 애플리케이션에서 마이크로서비스가 많이 사용되고 있습니다.

CAP 정리를 이해하면 여러 위치에서 실행 중인 마이크로서비스 기반 애플리케이션을 설계할 때 최상의 데이터베이스를 선택하는 데 도움이 됩니다. 예를 들어, 애플리케이션에 데이터 모델을 빠르게 반복하고 수평으로 확장하는 기능이 필수이지만, 궁극적 일관성(엄격한 일관성의 반대)을 허용할 수 있는 경우 Cassandra 또는 Apache CouchDB와 같은 AP 데이터베이스는 사용자 요구사항을 충족시키고 배치를 간소화할 수 있습니다. 반면에, 애플리케이션이 eCommerce 애플리케이션이나 지불 서비스에서와 같이 데이터 일관성에 크게 의존하는 경우에는 PostgreSQL 등의 관계형 데이터베이스를 선택할 수 있습니다.

관련 솔루션
IBM Cloud의 클라우드 데이터베이스

업무에 필수적인 워크로드에서부터 모바일과 웹 앱 및 분석에 이르기까지 다양한 유스케이스를 지원하기 위해 IBM에서 제공하는 다양한 클라우드 데이터베이스를 확인해 봅니다.

IBM Cloud의 클라우드 데이터베이스 살펴보기
IBM Cloudant

IBM Cloudant는 웹, 모바일, IoT 및 서버리스 애플리케이션에 사용되는 Apache CouchDB 기반의 확장형 분산 클라우드 데이터베이스입니다.

IBM Cloudant 살펴보기
DataStax Enterprise with IBM

구매, 배치 및 지원의 단일 소스인, IBM의 Apache Cassandra에서 빌드된 이 확장형의 고가용성 클라우드 네이티브 NoSQL 데이터베이스를 활용합니다.

DataStax Enterprise with IBM 살펴보기
리소스 MongoDB란?

MongoDB는 오픈 소스, 비관계형 데이터베이스 관리 시스템으로, 테이블과 행 대신 유연한 문서를 활용해 다양한 데이터 형식을 처리하고 저장합니다.

마이크로서비스란?

마이크로서비스 아키텍처에서 각 애플리케이션은 더 작고 느슨하게 결합되고 독립적으로 배치 가능한 여러 서비스로 구성됩니다.

CouchDB란?

Apache CouchDB는 데이터를 JSON 기반 형식으로 저장하는 오픈 소스 NoSQL 문서 데이터베이스입니다.

다음 단계

IBM Cloud 데이터베이스 솔루션은 데이터 및 분석을 위한 매니지드 서비스로 구성된 완전한 포트폴리오를 제공합니다. 오픈 소스 기반의 하이브리드 방식을 활용하는 이러한 솔루션은 데이터를 많이 다루는 애플리케이션 개발자, 데이터 사이언티스트, IT 설계자의 요구 사항을 충족합니다. 하이브리드 데이터베이스는 성능, 도달 범위, 가동 시간, 이동성을 향상하고 비용 절감을 늘리기 위해 분산 하이브리드 데이터 클라우드를 생성합니다.

IBM Cloud 데이터베이스 솔루션 찾기