Skip to content

분산 시스템에서 데이터 일관성 유지하기

Last updated: 2025-06-04  •6 min read

분산 시스템에서 데이터 일관성 유지하기

분산 시스템은 쉽게 말해 여러 컴퓨터가 하나처럼 협력하는 것을 의미합니다. 데이터를 여러 컴퓨터에 분산 저장하여, 컴퓨터 하나가 고장나도 서비스는 계속 운영될 수 있도록 지원하고, 사용자와 가까운 곳에서 데이터를 가져올 수 있어 응답 속도를 높일 수 있다는 장점이 있습니다.

하지만 네트워크가 항상 완벽할 수는 없으므로 데이터에 문제가 발생할 수 있습니다.

메시지가 전송 중 손실되거나, 중복 전송되거나, 순서가 뒤바뀌는 등 다양한 상황에서 데이터 일관성이 깨질 수 있습니다. 이러한 맥락에서 나온 유명한 이론이 바로 CAP 이론입니다.

CAP 이론은 분산 시스템 설계에서 근본적인 트레이드오프를 설명하는 이론입니다.

CAP는 순서대로 C(Consistency), A(Availability), P(Partition Tolerance)를 의미하며, 이 세 가지 속성 중 최대 두 가지만 동시에 만족시킬 수 있다는 이론입니다.

  • 일관성(Consistency): 모든 노드가 항상 동일한 데이터를 반환하는 것을 보장합니다.

    예를 들어 분산 시스템 A, B, C가 있고 노드 A에 데이터를 쓰면, 노드 B와 C에서도 동일한 데이터가 조회되어야 한다는 것입니다.

  • 가용성(Availability): 모든 요청에 대해 시스템이 항상 응답함을 보장합니다.

    예를 들어 분산 시스템 A, B, C가 있을 때, 노드 A에 장애가 발생하더라도, B 또는 C를 통해 여전히 서비스 요청을 보내고 응답을 받을 수 있어야 합니다.

  • 분할 허용성(Partition Tolerance): 네트워크 장애로 인해 시스템의 일부 노드 간 통신이 단절(네트워크 분할)되어도 시스템 전체가 계속 작동함을 보장합니다.

    예를 들어 분산 시스템 A, B, C가 있을 때, A와 (B, C) 간의 네트워크 연결이 끊어져도 A 그룹과 (B, C) 그룹은 독립적으로 계속 작동해야 합니다.

분산 시스템은 기본적으로 네트워크에 의존합니다. 그리고 네트워크는 완벽하지 않으므로 언제든지 문제가 발생할 수 있다고 가정해야 합니다. 그렇기 때문에 분산 시스템에서 P, 즉 분할 허용성은 반드시 확보해야 하는 속성으로 간주됩니다.

따라서 우리는 주로 A(가용성)C(일관성) 중 하나를 선택하거나, 그 사이의 적절한 균형점을 찾아야 합니다.

CP 시스템은 일관성(C)을 선택하고 가용성(A)을 일정 수준 포기하는 시스템입니다. 대표적으로 데이터의 정합성이 최우선으로 중요한 은행 시스템을 예로 들 수 있습니다.

어떤 고객이 ATM에서 돈을 인출하는 상황을 생각해보겠습니다. 만약 동시에 다른 ATM이나 온라인 뱅킹에서 같은 계좌의 잔액을 조회한다면, 모든 채널에서 항상 동일한 잔액을 보여주어야 합니다.

이때 은행 시스템은 일관성을 유지하기 위해 아래와 같은 순서로 작동하는데, 이 과정에서 네트워크 문제가 발생하면 일시적인 서비스 지연이 발생할 수 있지만, 데이터 정합성은 반드시 지켜집니다.

은행 시스템에서 일관성을 유지하기 위한 방법은 아래 이미지를 참고해주세요.

은행 시스템에서 일관성을 유지하기 위한 방법

AP 시스템은 가용성(A)을 선택하고 일관성(C)을 일정 수준 포기하는 시스템입니다. 대표적으로 빠른 응답과 지속적인 서비스 제공이 중요한 소셜 미디어 시스템을 예로 들 수 있습니다.

예를 들어 인스타그램 게시물에 좋아요를 눌렀다고 가정해봅시다. 만약 일관성을 중시하는 CP 시스템을 채택했다면, 사용자가 좋아요를 누를 때마다 해당 정보가 모든 사용자에게 즉시 전파되고 동기화될 때까지 기다려야 할 수 있습니다.

즉, 매번 좋아요를 누를 때마다 약간의 지연(로딩)이 발생할 수 있음을 의미합니다.

하지만 가용성을 우선시하는 AP 시스템을 채택한다면, 일단 좋아요를 누른 사용자에게는 즉시 반영된 것처럼 보이고, 다른 사용자에게는 잠시 후 반영될 수 있습니다.

이러한 방식은 일시적으로 사용자마다 보이는 좋아요 수가 다를 수 있지만, 결국에는 모든 사용자가 동일한 좋아요 수를 보게 됩니다. (이는 뒤에서 설명할 AP 시스템이 추구하는 모델인 최종 일관성을 의미합니다.)

데이터 처리 순서와 일관성 수준

Section titled “데이터 처리 순서와 일관성 수준”

위에서 설명했듯이 CAP 이론에서 어떤 선택을 하느냐에 따라 시스템이 보장하는 데이터 일관성의 수준이 달라집니다. 여기서는 앞서 언급한 두 시스템이 구체적으로 어떤 일관성 모델을 추구하는지 자세히 알아보겠습니다.

강력한 일관성은 일반적으로 CP 시스템이 추구하는 모델입니다.

마치 단일 컴퓨터 시스템에서 작업하는 것처럼, 모든 요청이 전 세계 어디서 보든 정확히 동일한 순서로 처리된 것처럼 보이게 하는 것이 목표입니다. 이 방식은 여러 서버 간에 지속적인 확인, 동기화, 대기 과정이 필요하므로 구현이 복잡하고 비용이 많이 들 수 있다는 특징이 있습니다.

강력한 일관성 하에서 모든 서버가 이 순서대로 처리하자!라고 합의하게 만들려면 어떻게 해야 할까요? 이때 사용하는 것이 바로 합의 알고리즘입니다.

합의 알고리즘은 분산 시스템에 참여하는 여러 컴퓨터들이 특정 작업 순서나 값에 대해 모두 동일한 결정을 내리도록 하는 절차입니다.

다양한 합의 알고리즘이 존재하지만, 대부분 다음과 같은 기본적인 단계와 원칙을 따릅니다.

  1. 제안 (Proposal)

    • 하나 이상의 노드가 시스템 전체가 동의해야 할 값이나 작업(예: 데이터베이스에 저장할 값, 연산 순서 등)을 제안합니다.
  2. 소통 및 동의 확보 (Communication & Agreement Gathering)

    • 제안된 내용은 다른 노드들에게 전파되며, 각 노드는 해당 제안에 대해 미리 정해진 규칙에 따라 동의 여부를 판단합니다.

    • 이 과정에서 중요한 개념이 정족수(Quorum) 입니다. 정족수란 의사결정에 필요한 최소 참여자 수를 의미하며, 예를 들어 5개의 노드 중 3개 이상이 동의해야 제안이 유효하다고 판단하는 방식입니다.

  3. 결정 및 전파 (Decision & Propagation)

    • 정족수 이상의 동의를 받은 제안은 최종 결정으로 확정되며, 이 결정 사항은 전체 노드 또는 관련 노드들에게 빠르게 전파됩니다.

    • 모든 노드는 이 결정을 자신의 상태에 반영하고(예: 로컬 저장소에 기록), 이를 바탕으로 다음 작업을 일관되게 수행합니다.

합의 알고리즘의 예시로는 Raft, Paxos 등이 있습니다.

최종 일관성은 일반적으로 AP 시스템이 추구하는 모델입니다.

이 방법은 당장 순서가 맞지 않거나 데이터가 다르더라도, 충분한 시간이 지나면 언젠가는 모든 서버의 데이터가 결국 같아진다는 것을 보장합니다. 위에서 언급한 소셜 미디어의 좋아요 개수처럼, 몇 초 정도 데이터가 일치하지 않아도 큰 문제가 없는 경우에 적합합니다.

최종 일관성을 달성하는 대표적인 방법 중 하나는 CRDT (Conflict-free Replicated Data Type)를 사용하는 것입니다.

CRDT는 분산 시스템, 특히 최종 일관성을 추구하는 모델에서 발생하는 데이터 충돌 문제를 해결하기 위해 고안된 특별한 데이터 구조입니다.

이름에서 알 수 있듯이, 충돌 없는 복제 데이터 타입을 의미하며, 여러 위치에서 동시에 데이터가 변경되더라도 결국에는 모든 복제본이 수학적으로 동일한 최종 상태로 자연스럽게 수렴하도록 설계되었습니다.

좋아요와 같은 기능을 구현하는 데 사용될 수 있는 덧셈/뺄셈 카운터(PN-Counter)가 바로 대표적인 CRDT의 예시입니다.

이론적으로 CAP 이론과 일관성 모델을 이해했다면, 실무에서는 이 중 어떤 것을 선택해야 할까요?

사실 현실 세계의 많은 분산 시스템은 단순히 CP 또는 AP로 명확하게 나뉘지 않습니다. 대신, 상황에 따라 유연하게 일관성과 가용성 수준을 조절하는데, 이를 일관성 튜닝(Consistency Tuning) 이라고 부르기도 합니다.

실제로 Amazon DynamoDBCassandra 같은 NoSQL 데이터베이스 시스템은 개발자가 일관성과 가용성 사이에서 균형을 조정할 수 있는 다양한 설정을 제공합니다.

예를 들어, 데이터 복제본의 총 개수를 N, 읽기 작업에 필요한 최소 복제본 응답 수를 R, 쓰기 작업에 필요한 최소 복제본 응답 수를 W라고 할 때, 이 N, R, W 값을 조절하여 일관성 수준을 변경할 수 있습니다.

일반적으로 R + W > N 이면 강한 일관성을 보장하고, R + W <= N 이면 최종 일관성을 지향하게 됩니다. 예를 들어, N=3(데이터 복제본 3개), W=2(쓰기 시 2개 복제본에 성공해야 함), R=2(읽기 시 2개 복제본에서 읽어옴)로 설정하면 R+W (4) > N (3)이므로 강한 일관성에 가까운 동작을 기대할 수 있습니다. 반면, W=1, R=1로 설정하면 가용성은 높아지지만 일관성은 낮아집니다.

이 외에도, 읽기 요청 시 오래된 데이터를 읽었을 경우 백그라운드에서 최신 데이터로 업데이트하는 읽기 복구(Read Repair) 기법 등을 활용하여 점진적으로 데이터 일관성을 향상시키기도 합니다.

아래 표는 실생활의 서비스들이 어떤 일관성 전략을 주로 사용하는지 정리한 것입니다.

실생활 서비스별 일관성 전략 상세

서비스시스템 유형주요 고려 사항일관성 전략
은행 시스템CP데이터 정합성이 가장 중요강력한 일관성 (합의 알고리즘 기반)
소셜 미디어 피드AP응답 속도와 사용자 경험이 중요최종 일관성 (CRDT 등 활용)
전자상거래 장바구니/재고CP 또는 유연한 모델재고 정확도 및 결제 일관성 중요강한 일관성 또는 상황에 따른 유연한 조정
실시간 채팅 앱주로 AP빠른 메시지 전달 우선최종 일관성 (메시지 순서 보장 노력)

분산 시스템에서 완벽한 일관성, 완벽한 가용성, 완벽한 네트워크 안정성을 동시에 달성하는 것은 불가능합니다. 그래서 우리는 시스템의 특성, 비즈니스 요구사항, 그리고 사용자 경험을 종합적으로 고려하여 적절한 균형점을 찾아야 합니다.

은행 시스템처럼 데이터의 정확성이 무엇보다 중요하다면 일관성을 최우선으로 고려해야 하고, 소셜 미디어처럼 빠른 응답과 끊김 없는 서비스가 중요하다면 가용성을 우선적으로 고려할 수 있습니다. 또한, 많은 최신 분산 시스템은 단일 전략만을 고수하기보다는, 다양한 기술과 설정을 조합하여 상황에 맞게 유연한 일관성 모델을 제공하기도 합니다.

궁극적으로 분산 시스템을 설계하거나 선택할 때는, 우리 서비스와 사용자에게 무엇이 가장 중요한 가치인지 깊이 고민하고, 그에 맞는 최적의 일관성 전략을 선택하는 것이 중요합니다.