ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • CAP 이론: 분산 시스템 설계의 트레이드오프
    Tech Career/System designs 2025. 7. 21. 23:32
    반응형

    # 들어가며: 분산 시스템의 마법 같은 세 가지 속성, 하지만…

    분산 시스템을 설계할 때, 우리는 흔히 확장성(Scalability), 가용성(Availability), 내구성(Durability), 성능(Performance) 등 다양한 목표를 추구합니다. 이 중에서도 특히 중요한 세 가지 속성이 있습니다: 일관성(Consistency), 가용성(Availability), 분할 허용성(Partition Tolerance). 그리고 이 세 가지 속성 사이에는 분산 시스템 설계자가 반드시 이해하고 타협해야 하는 근본적인 제약이 존재합니다. 바로 CAP 이론입니다.

    CAP 이론은 2000년 Eric Brewer 교수가 제안한 "Brewer's CAP Theorem"에서 유래했으며, 이후 Seth Gilbert와 Nancy Lynch에 의해 2002년 정형화되었습니다. 이 이론은 분산 컴퓨팅 환경에서는 일관성, 가용성, 분할 허용성 중 단 두 가지만을 동시에 만족시킬 수 있다고 말합니다. 즉, 셋 중 하나는 반드시 포기하거나 타협/완화해야 한다는 의미입니다.

    이번 포스팅에서는 CAP 이론의 각 요소를 자세히 살펴보고, 실제 분산 시스템 설계에서 어떤 트레이드오프가 발생하는지, 그리고 이를 어떻게 극복하거나 선택해야 하는지 알아보겠습니다.

    더보기

    [Side Note] 트레이드오프 이해의 중요성: 면접관의 질문에 흔들리지 않기

    시스템 디자인 면접 중 면접관은 종종 "이런 상황에서는 어떻게 하시겠습니까?", "A와 B를 동시에 만족시킬 수 없을까요?"와 같이 여러분의 트레이드오프 이해도를 파악하기 위한 질문을 던질 수 있습니다. 이때, CAP 이론과 같이 분산 시스템의 근본적인 제약을 이해하고 있다면, "현재 주어진 요구사항에서는 A와 B 중 A를 우선시해야 합니다. B를 동시에 만족시키기 어렵기 때문입니다. 이는 보통 시스템의 일관성(Consistency)과 가용성(Availability) 중 어느 것에 더 중점을 둘 것인가 하는 트레이드오프의 문제이며, 저희는 [이러 저러한 이유] 때문에 A를 선택했습니다."와 같이 명확하고 논리적으로 답변할 수 있습니다.

    하지만 이러한 트레이드오프의 개념을 명확히 알지 못한다면, 면접관의 질문에 억지로 답을 하려다 스스로 논리적인 모순에 빠지거나, 불가능한 것을 가능하다고 주장하는 등 실수로 이어질 수 있습니다. 트레이드오프를 이해하는 것은 단순히 지식을 아는 것을 넘어, 면접관의 의도를 파악하고 대화를 주도하며 자신의 설계 결정에 대한 확신과 논리적 근거를 제시할 수 있는 중요한 역량입니다.


    # 1. CAP 이론의 세 가지 요소

    CAP 이론을 구성하는 세 가지 요소는 다음과 같습니다.

    ## 1.1. 일관성 (Consistency)

    • 정의: 분산 시스템의 모든 노드에 있는 데이터가 동일한 순간에 같은 값을 가져야 한다는 속성입니다. 어떤 노드에서 데이터를 읽더라도 항상 가장 최근에 쓰여진 값을 볼 수 있어야 합니다.
    • 예시: 은행 계좌 잔고 시스템을 생각해보십시오. 고객이 A ATM에서 10만원을 인출한 후, 즉시 B ATM에서 잔고를 확인했을 때, 10만원이 인출된 후의 잔고가 보여야 합니다. 이전 잔고가 보인다면 일관성이 깨진 것입니다.
    • 강한 일관성 (Strong Consistency): 모든 노드가 실시간으로 동기화되어 항상 최신 데이터를 보장합니다. 분산 트랜잭션과 2PC(Two-Phase Commit) 같은 복잡한 메커니즘이 필요할 수 있습니다.
    • 결과적 일관성 (Eventual Consistency): 일시적으로 데이터 불일치가 발생할 수 있지만, 충분한 시간이 지나면 모든 노드의 데이터가 결국에는 일치하게 되는 속성입니다. 성능과 가용성을 위해 많이 사용됩니다.

    ## 1.2. 가용성 (Availability)

    • 정의: 분산 시스템의 모든 노드가 항상 동작하며, 어떠한 요청에 대해서도 응답할 수 있어야 한다는 속성입니다. 시스템의 일부 노드에 장애가 발생하더라도, 남은 노드들이 정상적으로 서비스를 제공할 수 있어야 합니다.
    • 예시: 웹 서비스에서 사용자가 요청을 보냈을 때, 어떤 서버에 요청이 가더라도 항상 응답을 받을 수 있어야 합니다. 시스템이 멈추거나 응답하지 않는 상황이 없어야 합니다.
    • 이를 위해 로드 밸런싱, 다중화(Redundancy), 자동 장애 복구(Failover) 등의 기술이 적용됩니다.

    ## 1.3. 분할 허용성 (Partition Tolerance)

    • 정의: 분산 시스템 내에서 네트워크 단절(Partition)이 발생하더라도 시스템이 계속해서 정상적으로 동작할 수 있어야 한다는 속성입니다. 노드들 간의 통신이 끊어져도, 각 노드 그룹이 독립적으로 작동하면서 서비스를 제공할 수 있어야 합니다.
    • 예시: 데이터센터 간 네트워크 장애나 서버 간 통신 두절 상황에서도, 시스템이 완전히 멈추지 않고 최소한의 기능을 제공하는 것입니다.
    • 실제 분산 시스템에서 네트워크 단절은 언제든 발생할 수 있는 피할 수 없는 현상입니다. 따라서 대부분의 현대 분산 시스템은 분할 허용성을 기본 전제로 설계됩니다.

    # 2. CAP 이론의 트레이드오프: 두 가지만 선택해야 하는 이유

    CAP 이론의 핵심은 일관성, 가용성, 분할 허용성 세 가지를 동시에 만족시킬 수 없다는 것입니다. 그 이유는 네트워크 단절(P)이 발생했을 때 명확해집니다.

    네트워크 단절 상황(P가 발생한 상황)을 가정해 봅시다. 시스템이 두 개의 독립적인 파티션으로 나뉘었고, 각 파티션에는 동일한 데이터의 복제본이 있습니다. 이때 한 파티션의 노드에서 데이터 'X'를 '새로운 값'으로 업데이트했다고 가정해 봅시다.

    • 만약 시스템이 '일관성(C)'을 유지하려고 한다면:
      • 새로운 값을 업데이트한 후, 이 정보가 다른 파티션에 도달할 때까지 해당 데이터에 대한 읽기/쓰기 요청을 거부해야 합니다. (다른 파티션에 구 값이 있으므로 일관성이 깨질 수 있기 때문)
      • 이는 결국 '가용성(A)'을 희생하는 결과로 이어집니다.
    • 만약 시스템이 '가용성(A)'을 유지하려고 한다면:
      • 네트워크 단절 중에도 각 파티션이 독립적으로 요청을 처리하고 응답해야 합니다.
      • 이 경우, 한 파티션에서 업데이트된 새로운 값이 다른 파티션에 즉시 전달되지 않으므로, 다른 파티션에서는 오래된 데이터('일관성(C)'이 깨진 값)를 읽게 될 수 있습니다.
      • 이는 결국 '일관성(C)'을 희생하는 결과로 이어집니다.

    이처럼 네트워크 단절(P)이 발생했을 때, 우리는 '일관성'을 지킬 것인가, 아니면 '가용성'을 지킬 것인가 둘 중 하나를 선택해야 합니다. 이것이 CAP 이론의 본질적인 트레이드오프입니다.


    # 3. CAP 이론 기반 시스템 설계 유형

    실제 시스템들은 CAP 이론에 따라 주로 세 가지 유형으로 나뉩니다. (P는 항상 가져가는 전제이므로, C 또는 A 중 무엇을 선택하느냐로 나뉩니다.)

    • 3.1. CP 시스템 (Consistency + Partition Tolerance)
      • 특징: 네트워크 단절 상황에서 일관성을 최우선으로 합니다. 일관성을 유지하기 위해 필요하다면 서비스 요청을 거부(가용성 희생)합니다.
      • 사용 예시: 은행 시스템, 분산 락, 리더 선출(Zookeeper, etcd 등)과 같이 데이터의 정확성이 절대적으로 중요한 시스템.
      • 장점: 데이터 정합성 보장.
      • 단점: 장애 상황 시 서비스 중단(가용성 저하) 가능성.
    • 3.2. AP 시스템 (Availability + Partition Tolerance)
      • 특징: 네트워크 단절 상황에서 가용성을 최우선으로 합니다. 일관성이 일시적으로 깨지더라도 서비스를 계속 제공합니다. 이후 네트워크 복구 시 데이터를 동기화하여 일관성을 맞춥니다 (결과적 일관성).
      • 사용 예시: 소셜 미디어 피드, 쇼핑몰 상품 목록, 블로그 등 항상 서비스가 제공되어야 하는 시스템. (데이터가 약간 오래되어도 사용자가 큰 불편을 느끼지 않는 경우)
      • 장점: 높은 가용성, 장애 상황에서도 서비스 지속.
      • 단점: 데이터 불일치가 일시적으로 발생할 수 있음. (개발자가 결과적 일관성 모델을 이해하고 처리해야 함)
    • 3.3. CA 시스템 (Consistency + Availability) - 비현실적 이상향
      • 특징: 분할 허용성(Partition Tolerance)을 포기하고, 네트워크 단절이 발생하지 않는다는 이상적인 환경을 가정합니다. 이 경우 일관성과 가용성을 모두 달성할 수 있습니다.
      • 문제점: 현실 세계의 네트워크는 항상 불안정하며, 단절이 언제든 발생할 수 있습니다. 따라서 CA 시스템은 대부분의 실제 분산 시스템에서는 비현실적인 모델로 간주됩니다. (엄밀히 말해 분산 시스템의 범주에 속하지 않는 단일 서버 환경이나, 완벽하게 통제된 로컬 클러스터 환경 등에서만 가능)

    # 4. CAP 이론과 실제 시스템: 결과적 일관성(Eventual Consistency)의 중요성

    대부분의 대규모 분산 시스템은 AP (Availability + Partition Tolerance) 모델을 채택하고 결과적 일관성을 지향합니다. 이는 웹 서비스처럼 항상 사용자에게 응답해야 하는 시스템의 특성 때문입니다. 사용자는 몇 초 정도 오래된 데이터를 보더라도 서비스가 아예 응답하지 않는 것보다는 훨씬 덜 불편함을 느낍니다.

    • 결과적 일관성 구현 방법:
      • Vector Clocks: 데이터 버전 관리를 통해 충돌 감지 및 해결.
      • Gossip Protocol: 노드 간 주기적인 정보 교환을 통해 데이터 동기화.
      • Read Repair: 읽기 요청 시 불일치하는 데이터를 발견하면 바로 동기화.
      • Last-Write-Wins (LWW): 최신 타임스탬프를 가진 데이터가 승리.
    • 대표적인 AP 시스템: Cassandra, DynamoDB, MongoDB(샤딩 시), Riak 등 NoSQL 데이터베이스들이 주로 AP 시스템이며 결과적 일관성을 제공합니다.
    • 대표적인 CP 시스템: Zookeeper, etcd, Kafka(일부), 그리고 대부분의 RDBMS 클러스터(Paxos, Raft 같은 합의 알고리즘 기반)가 CP 시스템에 가깝습니다.

    # 마치며: 정답이 아닌 선택의 영역

    CAP 이론은 분산 시스템 설계에 있어 절대적인 정답이 없으며, 주어진 요구사항과 비즈니스 목표에 따라 적절한 트레이드오프를 선택해야 함을 명확히 보여줍니다. 여러분이 어떤 시스템을 설계하든, '우리 시스템은 어떤 속성을 우선시할 것인가?'라는 질문에 답할 수 있어야 합니다.

    다음 포스팅에서는 분산 시스템의 데이터 분산 및 확장성에 필수적인 개념인 'Consistent Hashing'에 대해 자세히 알아보겠습니다. CAP 이론과 함께 여러분의 시스템 설계 역량을 한 단계 더 높여줄 중요한 개념이니, 기대해 주시기 바랍니다!

    궁금한 점이 있으시다면 언제든지 질문해 주십시오!

    반응형

    댓글

Designed by naubull2.