Skip to content
목록으로 돌아가기

분산 아키텍처의 필연적 선택지, CAP 정리를 다시 읽다

Updated:
-- Edit page

네트워크로 연결된 수많은 서버가 마치 하나의 거대한 컴퓨터처럼 유기적으로 작동하는 시스템을 설계하는 과정에서 엔지니어는 필연적인 한계에 직면합니다. 데이터가 실시간으로 모든 지점에 복제되고, 어떤 상황에서도 서비스가 중단되지 않으며, 즉각적인 응답 속도를 보장하는 아키텍처는 이론적 이상향에 가깝습니다. 2000년 에릭 브루어가 제시한 CAP 정리는 이러한 분산 시스템 설계의 물리적 한계를 명확히 규정합니다.

CAP 정리는 일관성(Consistency), 가용성(Availability), 분할 내성(Partition Tolerance)이라는 세 가지 속성을 한 시스템이 동시에 완벽하게 충족할 수 없음을 의미합니다. 특히 현대의 클라우드 인프라에서 네트워크 장애나 지연은 피할 수 없는 상수입니다. 즉, 분할 내성은 선택의 대상이 아닌 필수 전제 조건이며, 설계자는 결국 일관성(CP)과 가용성(AP) 사이의 전략적 선택을 내려야 합니다.

CAP Theorem - CAP 정리의 세 가지 핵심 요소인 일관성, <b>가용성</b>, 분할 내성을 삼각형의 각 꼭짓점에 나타낸 개념도입니다.

구체적으로 살펴보면, 일관성은 시스템의 모든 노드가 어느 시점에서든 최신의 동일한 데이터를 보장해야 함을 뜻합니다. 반면 가용성은 특정 노드에 장애가 발생하더라도 시스템 전체가 요청에 대해 응답을 내놓아야 한다는 원칙입니다. 분산 환경에서 네트워크 단절이 발생했을 때, 데이터의 정확성을 위해 응답을 거부할 것인지(CP), 혹은 다소 오래된 데이터일지라도 서비스를 지속할 것인지(AP) 결정하는 것이 설계의 핵심입니다.

구분CP (Consistency + Partition Tolerance)AP (Availability + Partition Tolerance)
우선순위데이터 무결성 및 정확성서비스 연속성 및 응답성
장애 대응동기화 실패 시 응답 거부 또는 지연가용한 노드에서 데이터 우선 응답
핵심 모델Google Spanner, ZooKeeper, MongoDBAmazon DynamoDB, Apache Cassandra
주요 사례금융 결제, 자산 관리, 재고 시스템소셜 미디어, 콘텐츠 스트리밍, 장바구니

이러한 선택은 비즈니스의 성격에 따라 달라집니다. 넷플릭스의 사례를 보면 그들은 철저히 가용성을 최우선으로 하는 AP 전략을 취합니다. 사용자가 어제 보던 지점이 기기 간에 실시간으로 완벽하게 동기화되지 않더라도, 일단 영상 재생이 중단 없이 시작되는 것이 사용자 경험 측면에서 더 중요하기 때문입니다. 반면 구글 스패너는 분산 환경에서도 강력한 일관성을 유지하기 위해 원자 시계와 GPS를 활용한 정밀 동기화 메커니즘을 동원합니다. 금융 서비스처럼 데이터 1원의 오차도 허용할 수 없는 환경에서는 CP 설계가 그 가치를 증명합니다.

CAP Theorem - 분산된 네트워크가 두 그룹으로 분리되어 서로 연결되지 못하고 통신이 끊긴 모습입니다.

결국 CAP 정리는 단순히 어떤 기술을 선택하느냐의 문제가 아니라, 비즈니스가 허용할 수 있는 리스크의 지점을 찾는 과정입니다. 분산 시스템에서 발생하는 트레이드오프를 명확히 이해하고, 시스템의 목적에 부합하는 최적의 타협점을 찾는 역량이 현대 소프트웨어 아키텍처의 성패를 가르는 척도가 됩니다.

✅ 자주 묻는 질문 (FAQ)

CAP 정리란 무엇인가요?
분산 컴퓨팅 시스템에서 일관성, 가용성, 분할 내성이라는 세 가지 속성을 동시에 모두 만족시킬 수 없다는 이론적 원칙입니다. 현대 네트워크 환경에서는 장애가 불가피하므로 일관성과 가용성 중 무엇을 우선할지 결정하는 설계 지침이 됩니다.
일관성(Consistency)은 구체적으로 어떤 의미인가요?
모든 노드가 어느 시점에서든 최신의 동일한 데이터를 보장해야 함을 뜻합니다. 사용자가 어떤 경로로 시스템에 접근하더라도 가장 최근에 업데이트된 정확한 데이터를 동일하게 조회할 수 있는 상태를 의미합니다.
가용성(Availability)이 보장된다는 것은 무엇을 뜻하나요?
특정 노드에 장애가 발생하더라도 시스템 전체가 중단 없이 요청에 대해 응답을 내놓아야 한다는 원칙입니다. 일부 서버가 다운되거나 연결이 원활하지 않아도 사용자는 서비스 이용에 지장을 받지 않아야 합니다.
분할 내성(Partition Tolerance)이 왜 필수적인가요?
네트워크로 연결된 서버 간에 통신 단절이 발생하더라도 시스템이 전체 기능을 유지해야 하기 때문입니다. 클라우드 인프라에서는 네트워크 지연이나 장애가 빈번하므로 분산 시스템 설계 시 선택이 아닌 필수 전제 조건으로 간주합니다.
왜 세 가지 요소를 한꺼번에 가질 수 없나요?
네트워크 장애 발생 시, 데이터 일관성을 지키려면 동기화가 끝날 때까지 응답을 멈춰야 하고 가용성을 지키려면 부정확한 데이터라도 즉시 응답해야 하기 때문입니다. 결국 일관성과 가용성은 서로 충돌하는 관계에 있습니다.
CP 모델과 AP 모델의 가장 큰 차이점은 무엇인가요?
CP는 데이터 무결성을 최우선하여 장애 시 응답을 거부하거나 지연시키며, AP는 서비스 연속성을 위해 다소 오래된 데이터라도 우선 응답합니다. 즉, 데이터의 정확성과 서비스의 끊김 없는 실행 중 무엇에 방점을 두느냐의 차이입니다.
금융 시스템에서 CP 모델을 선택해야 하는 이유는 무엇인가요?
금융 결제나 자산 관리처럼 단 1원의 오차도 허용할 수 없는 환경에서는 데이터의 정확성이 서비스 가동보다 중요하기 때문입니다. 데이터가 완벽하게 일치하지 않는 상태에서 거래가 이뤄지면 심각한 자산 손실이 발생할 수 있습니다.
비즈니스 관점에서 CAP 정리를 어떻게 활용해야 하나요?
기술적인 선택을 넘어 비즈니스가 허용할 수 있는 리스크를 판단하는 기준으로 삼아야 합니다. 우리 서비스가 데이터 불일치를 견딜 수 있는지, 아니면 잠시 서비스가 중단되는 것이 더 치명적인지를 분석하여 최적의 타협점을 찾아야 합니다.
분산 데이터베이스를 쓸 때 데이터가 꼬이지 않으려면 어떤 모델을 고르는 게 좋을까요?
데이터가 꼬이지 않는 무결성이 가장 중요하다면 일관성을 강조하는 CP 모델을 선택하는 것이 맞습니다. 구글 스패너나 주키퍼 같은 시스템을 활용하면 네트워크에 문제가 생겼을 때 차라리 응답을 멈춤으로써 데이터 오류를 방지할 수 있습니다.
인스타그램 같은 SNS를 만들 때 서버 한두 개 나가도 앱이 안 멈추게 하려면 어떻게 설계해야 하나요?
사용자가 중단 없이 앱을 쓰는 것이 중요하다면 가용성을 우선하는 AP 모델을 권장합니다. 카산드라나 다이나모DB 같은 기술을 쓰면 일부 데이터 복제가 늦어지더라도 사용자는 멈춤 없이 게시물을 보거나 올리는 서비스를 이용할 수 있습니다.
📚 참고 자료 확인하기

Edit page
이 글 공유하기:

🔗 함께 읽으면 좋은 글

1 / 28