2025-08-30 00:54

  • 분산 데이터 시스템은 일관성, 가용성, 분할 용납성 세 가지 중 두 가지만을 동시에 보장할 수 있습니다.

  • 네트워크 장애(분할)는 피할 수 없으므로, 현대 시스템은 주로 일관성(CP)과 가용성(AP) 사이에서 선택합니다.

  • CAP 이론은 시스템 설계 시 어떤 특성을 우선할지 결정하는 중요한 기준으로, 모든 개발자가 이해해야 할 필수 개념입니다.

분산 시스템의 핵심 나침반 CAP 이론 완벽 정복 핸드북

오늘날 우리가 사용하는 대부분의 서비스는 여러 컴퓨터가 함께 작동하는 ‘분산 시스템’을 기반으로 합니다. 넷플릭스에서 영화를 보고, 아마존에서 쇼핑하며, 인스타그램에 사진을 올리는 모든 순간의 데이터는 단 하나의 거대한 컴퓨터가 아닌, 전 세계에 흩어진 수많은 서버에 저장되고 처리됩니다. 하지만 이렇게 여러 컴퓨터가 데이터를 나눠 가지면 필연적으로 어려운 문제에 부딪힙니다. “A 서버에 저장된 데이터가 B 서버에도 똑같이 잘 전달되었을까?”, “네트워크가 잠시 끊겨도 서비스는 계속되어야 하지 않을까?” 하는 문제들 말이죠.

2000년, 컴퓨터 과학자 에릭 브루어(Eric Brewer)는 이 문제에 대한 놀라운 통찰을 제시했습니다. 바로 CAP 이론입니다. 이 이론은 분산 데이터 시스템이 동시에 가질 수 있는 세 가지 핵심 속성 중 최대 두 가지만을 만족시킬 수 있다는, 마치 물리학의 법칙과도 같은 원리입니다. 이 핸드북은 CAP 이론이 왜 등장했는지부터 그 깊은 의미와 실제 적용 사례까지, 여러분이 분산 시스템을 이해하는 데 필요한 모든 것을 담았습니다.

1. CAP 이론은 왜 탄생했을까? 시대적 배경

1990년대 후반, 인터넷이 폭발적으로 성장하며 웹 서비스의 규모는 상상 이상으로 커졌습니다. 기존의 방식, 즉 하나의 강력한 컴퓨터(서버)로 모든 것을 처리하는 ‘단일 시스템(Monolithic System)‘은 한계에 부딪혔습니다. 사용자가 수백만, 수천만 명으로 늘어나자 서버 한 대로 감당할 수 없게 된 것입니다.

이 문제를 해결하기 위해 등장한 것이 바로 **분산 시스템(Distributed System)**입니다. 여러 대의 평범한 컴퓨터를 네트워크로 연결하여 마치 하나의 거대한 컴퓨터처럼 작동하게 만드는 방식이죠. 이 방식은 몇 가지 큰 장점이 있었습니다.

  • 확장성 (Scalability): 사용자가 늘면 컴퓨터를 더 추가하기만 하면 되므로 유연하게 대응할 수 있습니다.

  • 고가용성 (High Availability): 여러 컴퓨터 중 하나가 고장 나더라도 다른 컴퓨터가 그 역할을 대신해 서비스가 중단되지 않습니다.

하지만 동전의 양면처럼, 분산 시스템은 새로운 골칫거리를 안겨주었습니다. 바로 ‘데이터를 어떻게 똑같이 유지할 것인가?’ 하는 데이터 일관성의 문제와 ‘언제든 사용자의 요청에 응답할 수 있는가?’ 하는 가용성의 문제, 그리고 이 모든 것을 방해하는 ‘네트워크 장애’의 문제입니다. CAP 이론은 바로 이 세 가지 핵심 가치가 서로 충돌하며, 설계자는 반드시 현실적인 타협점을 찾아야 한다는 사실을 명확히 알려주기 위해 탄생했습니다.

2. CAP 이론의 세 가지 기둥 C, A, P

CAP은 일관성(Consistency), 가용성(Availability), **분할 용납성(Partition Tolerance)**의 앞 글자를 딴 것입니다. 이 세 가지 요소는 분산 시스템이 지향하는 이상적인 목표이지만, 슬프게도 모두를 가질 수는 없습니다. 하나씩 자세히 살펴보겠습니다.

C: 일관성 (Consistency)

“모든 사용자는 언제나 같은 데이터를 본다.”

일관성은 분산 시스템의 모든 노드(서버)가 동시에 같은 데이터를 가지고 있음을 보장하는 속성입니다. 어떤 클라이언트가 시스템에 데이터를 쓰거나 수정하면, 그 이후에 들어오는 모든 읽기 요청은 방금 수정된 최신 데이터를 받아야 합니다.

  • 비유: 은행 계좌를 생각해 봅시다. 제가 서울 지점에서 10만 원을 입금하는 순간, 부산 지점에서 제 아내가 계좌를 조회해도 즉시 입금된 잔액이 보여야 합니다. 만약 서울에서는 잔액이 늘었는데 부산에서는 예전 잔액이 보인다면 ‘일관성’이 깨진 것입니다.

  • 기술적 의미: 모든 읽기 작업은 가장 최근에 성공한 쓰기 작업의 결과를 반환합니다.

A: 가용성 (Availability)

“시스템은 언제나 정상적으로 응답한다.”

가용성은 시스템의 일부 노드에 장애가 발생하더라도, 모든 사용자의 요청에 대해 항상 (오류가 아닌) 응답을 받을 수 있음을 보장하는 속성입니다. 여기서 중요한 점은 ‘최신 데이터’를 보장하는 것은 아니라는 점입니다. 일단 어떤 응답이든 제공하는 것을 목표로 합니다.

  • 비유: 인스타그램 피드를 새로고침한다고 상상해 봅시다. 네트워크가 불안정해서 아주 최신 게시물을 불러오지 못하더라도, 몇 분 전의 피드라도 보여주며 “서비스에 접속할 수 없습니다”라는 오류 메시지를 띄우지 않는 것이 가용성을 지키는 것입니다. 사용자는 약간 오래된 데이터를 보더라도 서비스 자체가 ‘먹통’이 되는 것보다는 낫다고 느낍니다.

  • 기술적 의미: 모든 요청은 시스템의 상태와 관계없이 유효한 응답을 받습니다.

P: 분할 용납성 (Partition Tolerance)

“네트워크가 끊겨도 시스템은 계속 동작한다.”

분할 용납성은 분산 시스템의 노드 간 통신에 장애가 발생(네트워크 분할)하더라도 시스템이 계속 작동하는 것을 견뎌내는 능력입니다. 분산 시스템은 필연적으로 네트워크를 통해 통신하므로, 네트워크 장애는 숙명과도 같습니다. 라우터 고장, 스위치 문제, 데이터 센터 간 해저 케이블 손상 등 원인은 다양합니다.

  • 비유: 거대한 온라인 쇼핑몰의 데이터 센터가 미국과 유럽에 각각 있다고 가정해 봅시다. 두 데이터 센터를 잇는 대서양 케이블에 문제가 생겨 통신이 두절(네트워크 분할)되었습니다. 이때 미국 사용자는 미국 데이터 센터에, 유럽 사용자는 유럽 데이터 센터에 접속하여 계속 쇼핑할 수 있다면 이 시스템은 분할 용납성을 갖춘 것입니다. 물론 이때 양쪽의 재고 데이터가 일치하지 않는 문제가 생길 수 있습니다.

  • 기술적 의미: 노드 간 메시지 손실이나 지연이 발생해도 시스템은 동작을 멈추지 않습니다.

3. 현실의 선택: 왜 CA는 존재하기 어려운가?

CAP 이론의 핵심은 “세 가지 중 두 가지만 선택할 수 있다”는 것입니다. 그렇다면 선택지는 CA, CP, AP 세 가지가 됩니다.

  • CA (일관성 + 가용성): 모든 노드가 항상 일관성을 유지하며, 모든 요청에 응답합니다. 이는 네트워크 분할(P)이 절대로 발생하지 않는다는 가정 하에서만 가능합니다. 하지만 분산 시스템에서 네트워크 장애는 피할 수 없는 현실입니다. 따라서 현대적인 의미의 분산 시스템에서는 CA를 선택지로 고려하지 않습니다. 이는 사실상 분산 시스템이 아닌, 단일 노드 시스템(전통적인 관계형 데이터베이스)의 특징에 가깝습니다.

결국 분산 시스템 설계자는 네트워크 분할(P)을 기본 전제로 깔고, 일관성(C)과 가용성(A) 사이에서 무엇을 더 우선할지 선택해야 합니다.

CP (일관성 우선) 시스템: 정확성이 생명일 때

“데이터가 틀릴 바에는 차라리 응답하지 않겠다.”

네트워크 분할이 발생했을 때, 데이터의 일관성을 최우선으로 지키는 시스템입니다. 어떻게 이것이 가능할까요?

  1. 상황: 노드 A와 노드 B 사이에 네트워크가 끊겼습니다.

  2. 쓰기 요청: 사용자가 노드 A에 데이터를 수정해달라고 요청합니다.

  3. 동작: 노드 A는 이 변경 사항을 노드 B에 전달할 수 없습니다. 데이터 불일치가 발생할 위험이 있으므로, 노드 A는 쓰기 요청을 거부하거나, 시스템의 일부(예: 노드 B)를 일시적으로 ‘읽기 전용’으로 만들거나 아예 응답하지 않도록(서비스 불가 상태) 만듭니다.

  4. 결과: 데이터의 정합성은 100% 보장되지만, 일부 사용자는 서비스를 이용할 수 없게 됩니다(가용성 저하).

  • 주요 사용처: 은행 시스템, 결제 시스템, 실시간 재고 관리 등 데이터의 정확성이 비즈니스의 핵심인 경우에 사용됩니다. 1원이라도 돈이 틀리면 안 되고, 재고가 없는데 주문이 들어가면 안 되기 때문입니다.

  • 대표 시스템: MongoDB, Redis, HBase, Zookeeper

AP (가용성 우선) 시스템: 중단 없는 서비스가 중요할 때

“데이터가 약간 틀려도 괜찮으니, 절대 멈추지 마라.”

네트워크 분할이 발생했을 때, 어떻게든 서비스를 계속 제공하는 것을 최우선으로 하는 시스템입니다.

  1. 상황: 노드 A와 노드 B 사이에 네트워크가 끊겼습니다.

  2. 쓰기/읽기 요청: 사용자들이 각 노드에 자유롭게 데이터를 쓰거나 읽습니다.

  3. 동작: 노드 A는 노드 B의 상태를 모르지만 일단 자신의 로컬 데이터로 응답합니다. 노드 B도 마찬가지입니다. 이로 인해 잠시 동안 A와 B의 데이터는 서로 다를 수 있습니다.

  4. 결과: 사용자들은 서비스가 중단되었다고 느끼지 않습니다(가용성 보장). 하지만 일부 사용자는 오래된 데이터를 보거나, 데이터 충돌이 발생할 수 있습니다. 시스템은 나중에 네트워크가 복구되었을 때, 서로 다른 데이터를 동기화하고 충돌을 해결하는 복잡한 과정을 거쳐야 합니다(이를 ‘최종적 일관성, Eventual Consistency’이라 부릅니다).

  • 주요 사용처: 소셜 미디어 피드, 콘텐츠 제공 서비스, 대부분의 온라인 쇼핑몰 장바구니 등. 사용자가 몇 초 전의 ‘좋아요’ 개수를 보거나, 이미 품절된 상품이 잠시 보이는 것보다 서비스 자체가 멈추는 것이 더 큰 문제인 경우에 적합합니다.

  • 대표 시스템: Amazon DynamoDB, Cassandra, CouchDB

CAP 이론 적용 시스템 비교

시스템 분류우선순위동작 방식대표 사례
CPC > A네트워크 분할 시, 데이터 일관성을 위해 일부 노드의 응답을 중단.MongoDB, Redis, HBase
APA > C네트워크 분할 시, 각 노드가 독립적으로 응답하여 가용성을 유지.Cassandra, DynamoDB, CouchDB
CAC + A(이론상) 네트워크 분할이 없는 단일 노드 시스템.전통적인 RDBMS (Oracle, MySQL)

4. CAP 이론을 넘어서: 현대적 해석과 PACELC

CAP 이론은 분산 시스템 설계의 위대한 이정표이지만, 현실은 이론처럼 칼로 자르듯 나뉘지 않습니다. 많은 현대 시스템은 사용자가 직접 일관성 수준을 조절할 수 있는 옵션을 제공합니다. 예를 들어, 어떤 작업은 매우 강한 일관성을 요구하고, 다른 작업은 느슨한 일관성을 허용하는 식입니다.

또한 CAP 이론을 보완하는 PACELC 이론도 등장했습니다. 이는 다음과 같이 설명됩니다.

“만약 P(네트워크 분할)가 발생하면, 시스템은 A(가용성)와 C(일관성) 사이에서 선택해야 한다. E(그렇지 않은 경우, Else), 시스템은 L(지연 시간, Latency)과 C(일관성) 사이에서 선택해야 한다.”

즉, 평상시(네트워크가 정상일 때)에도 시스템은 ‘데이터를 즉시 모든 노드에 복제하여 일관성을 높일 것인가(지연 시간 증가)’ 아니면 ‘일단 사용자에게 빠르게 응답하고 데이터는 나중에 천천히 복제할 것인가(지연 시간 감소, 일관성 저하)‘를 선택해야 한다는 것입니다. 이처럼 PACELC는 CAP 이론을 더 현실적인 시나리오로 확장한 개념입니다.

결론: 완벽한 시스템은 없다, 오직 현명한 선택만 있을 뿐

CAP 이론은 우리에게 “모든 것을 가질 수는 없다”는 중요한 교훈을 줍니다. 분산 시스템을 설계하는 것은 결국 비즈니스의 요구사항에 맞춰 C와 A 사이에서 신중하게 저울질하는 과정입니다.

  • 금융 거래 시스템을 만든다면, 잠시 서비스가 느려지거나 중단되더라도 데이터의 정확성을 지키는 CP 모델을 선택해야 합니다.

  • 바이럴 콘텐츠 플랫폼을 만든다면, 데이터가 약간 다르더라도 절대 멈추지 않고 사용자에게 즐거움을 주는 AP 모델이 더 현명한 선택일 것입니다.

CAP 이론은 단순히 기술적 개념을 넘어, 우리가 만드는 서비스의 본질이 무엇인지 깊이 고민하게 만드는 철학적인 질문을 던집니다. 이 핸드북을 통해 여러분이 분산 시스템의 세계를 항해하는 데 든든한 나침반을 얻으셨기를 바랍니다.

레퍼런스(References)

CAP 이론