463. CAP 이론

⚠️ 이 문서는 분산 데이터베이스를 설계할 때, **"완벽한 일관성(C), 언제나 죽지 않는 가용성(A), 네트워크 단절에도 견디는 내성(P)"이라는 3가지 토끼를 동시에 다 잡는 것은 수학적으로 불가능하며, 반드시 하나를 포기해야 한다는 분산 시스템의 절대 법칙인 'CAP 이론'**을 다룹니다.

핵심 인사이트 (3줄 요약)

  1. 본질: 분산 컴퓨터 시스템은 Consistency(일관성), Availability(가용성), Partition Tolerance(파티션 내성) 3가지 중 최대 2가지만 가질 수 있다는 정리(Theorem)다.
  2. P(파티션 내성)는 필수: 현실의 네트워크는 무조건 끊길 수 있으므로(P), 아키텍트는 네트워크가 끊겼을 때 "서비스를 멈추고 기다릴까(CP)?" 아니면 "일단 옛날 데이터라도 보여줄까(AP)?"를 선택해야 한다.
  3. 가치: 관계형 DB(RDBMS)가 꽉 잡고 있던 세상에 "데이터가 좀 틀려도 좋으니 안 죽는 DB를 만들자(AP)"라는 NoSQL의 탄생에 수학적인 명분을 제공한 이론이다.

Ⅰ. 개요: 3가지 소원을 들어주지 않는 램프 (Context & Necessity)

우리가 한국(A 서버)과 미국(B 서버)에 데이터베이스를 쪼개놨다(분산 DB).

  • C (Consistency, 일관성): 한국에서 글을 쓰자마자 0.001초 뒤 미국에서 조회해도 방금 쓴 글이 똑같이 보여야 한다.
  • A (Availability, 가용성): 미국 서버가 고장 나도, 한국 서버는 절대 죽지 않고 손님의 요청에 응답해야 한다.
  • P (Partition Tolerance, 파티션 내성): 한국과 미국을 잇는 태평양 해저 케이블(네트워크)이 끊어져도 시스템은 돌아가야 한다.

CAP 이론의 핵심은 이렇다. "해저 케이블이 끊어졌네(P 발생)? 한국에서 새 글이 올라왔어. 근데 미국으로 복사를 못 해줘. 어떡할래?"

  • 선택 1: "미국 유저한테 옛날 데이터를 보여주자!" $\rightarrow$ A(가용성) 선택, C(일관성) 포기 (AP 시스템)
  • 선택 2: "옛날 데이터 보여주면 큰일 나! 해저 케이블 고쳐질 때까지 미국 서버는 에러 띄우고 멈춰!" $\rightarrow$ C(일관성) 선택, A(가용성) 포기 (CP 시스템)

📢 섹션 요약 비유: CAP 이론은 **'싸고, 맛있고, 분위기 좋은 식당은 없다'**는 법칙과 같습니다. 싸고 맛있으면 분위기가 시장통이고, 맛있고 분위기 좋으면 비싸죠. 데이터베이스도 완벽한 일관성(C), 안 죽는 생존력(A), 끊김 방어(P)를 다 가질 수는 없습니다.


Ⅱ. CAP의 3가지 조합과 대표 DB ★

현대의 모든 분산 시스템은 다음 3가지 중 하나로 분류된다.

1. CA 시스템 (Consistency + Availability)

  • 특징: 네트워크 끊김(P)을 절대 허용하지 않는다. 즉, 네트워크가 끊어질 일이 없는 **'하나의 튼튼한 거대한 서버(단일 노드)'**에서만 가능하다.
  • 대표 DB: 오라클, MySQL, PostgreSQL (전통적인 RDBMS)
  • 한계: 분산 시스템이 아니므로 클라우드 시대에는 맞지 않는다.

2. CP 시스템 (Consistency + Partition Tolerance)

  • 특징: 네트워크가 끊겨서 데이터 동기화가 안 되면, 차라리 서비스를 멈춰서(가용성 포기) 가짜 데이터를 보여주는 것을 막는다. (돈이 오가는 금융권 필수)
  • 대표 DB: MongoDB, HBase, Redis (결제 시스템 등 완벽한 정합성이 필요할 때)

3. AP 시스템 (Availability + Partition Tolerance)

  • 특징: 네트워크가 끊겨서 동기화가 안 되더라도, 일단 접속한 유저에게 옛날 데이터라도 보여준다(일관성 포기). 서비스가 죽는 것보단 낫기 때문이다.
  • 대표 DB: Cassandra, CouchDB, DynamoDB (SNS 타임라인, 좋아요 개수 등 1~2개 틀려도 상관없는 시스템)

Ⅲ. CAP 이론의 진화: PACELC 정리

CAP 이론은 "네트워크가 끊겼을 때(P)"의 상황만 가정한다는 한계가 있다. "그럼 네트워크가 빵빵하게 잘 연결되어 있을 때는 뭐가 문제인데?"라는 질문에 대답하기 위해 PACELC 정리가 등장했다.

  • Partition(네트워크 단절 시) $\rightarrow$ Availability(가용성)과 Consistency(일관성) 중 하나를 선택하라.
  • Else(네트워크가 정상일 때) $\rightarrow$ Latency(응답 속도)와 Consistency(일관성) 중 하나를 선택하라.

네트워크가 정상이어도, 한국과 미국 데이터를 완벽하게 맞추려면(C) 통신하는 시간 동안 사용자가 기다려야 한다(L 손해). 응답 속도(L)를 빠르게 하려면 대충 맞추고 끝내야 한다(C 손해).

┌──────────────────────────────────────────────────────────────┐
│           CAP 이론의 3가지 속성 트레이드오프 시각화                 │
├──────────────────────────────────────────────────────────────┤
│                                                              │
│                      [ C (일관성) ]                            │
│                      항상 똑같은 데이터                         │
│                         /\                                   │
│                        /  \                                  │
│         (CA 시스템)    /    \   (CP 시스템)                     │
│        RDBMS, MySQL  /      \  MongoDB, HBase                │
│                    /________\                                │
│    [ A (가용성) ]                 [ P (파티션 내성) ]              │
│    절대 안 죽음        (AP 시스템)    네트워크가 끊겨도 생존           │
│                      Cassandra                               │
│                                                              │
│ ★ 특징: 3각형의 꼭짓점 3개를 동시에 가질 수 없다. 선분(2개)만 선택 가능. │
└──────────────────────────────────────────────────────────────┘

Ⅳ. 결론

"완벽을 버려야 확장이 가능해진다." 분산 데이터베이스(NoSQL)가 세상을 지배하게 된 근본적인 철학이 바로 CAP 이론이다. 넷플릭스나 인스타그램은 전 세계의 수억 명을 처리하기 위해 과감하게 C(일관성)를 버리고 AP 시스템을 선택했다. 친구가 방금 올린 사진이 내 스마트폰에 3초 늦게 뜬다고(일관성 파괴) 해서 화를 내는 사람은 없기 때문이다. 아키텍트는 비즈니스의 성격을 파악하여 "우리 서비스는 돈이 오가는 CP 시스템인가, 아니면 트래픽을 견뎌야 하는 AP 시스템인가?"를 가장 먼저 결정해야 한다.


📌 관련 개념 맵

  • 관련 시스템: 분산 데이터베이스, NoSQL
  • 대척점 이론: ACID (440번 문서 - RDBMS의 절대 규칙)
  • 보완/발전 이론: BASE (464번 문서), PACELC 정리
  • 해결 기술: Eventual Consistency (결과적 일관성)

👶 어린이를 위한 3줄 비유 설명

  1. 전학 간 친구와 '비밀 일기장'을 나눠 쓰기로 했어요. 일기장 내용(C)은 매일 똑같아야 하고, 언제든 일기장을 펼쳐볼 수 있어야(A) 해요.
  2. 그런데 태풍이 와서 친구랑 전화(네트워크)가 끊어졌어요(P).
  3. 이제 나는 선택해야 해요. 친구랑 통화가 될 때까지 일기장을 덮어두고 멈출 건지(CP), 아니면 옛날 내용이더라도 일단 일기장을 펼쳐서 읽을 건지(AP) 말이죠!