분산시스템 아키텍처: 일관성·통신·장애 허용 설계
분산시스템의 아키텍처와 투명성, CAP 정리, 통신·데이터 관리, 합의와 장애 허용 설계 원칙을 정리한다.
2026-08-14 · 최초 발행 2026-01-12
여러 컴퓨터를 하나의 서비스처럼 다루는 구조
분산시스템은 네트워크로 연결된 독립적인 컴퓨터들이 협력해, 사용자에게는 하나의 통합된 시스템처럼 보이도록 서비스를 제공하는 컴퓨팅 아키텍처다. 단일 컴퓨터의 처리 능력만으로 감당하기 어려운 대규모 연산과 데이터 처리 요구에서 출발한다.
이 구조가 추구하는 것은 하드웨어·소프트웨어·데이터의 공유, 성능 향상, 신뢰성 확보, 확장성이다. 여러 프로세스가 동시에 실행되고, 노드를 추가해 성능을 높일 수 있으며, 일부 노드가 멈춰도 서비스를 계속 제공할 수 있어야 한다. 사용자는 그 내부의 분산 구조를 의식하지 않아도 된다.
| 특성 | 의미 |
|---|---|
| 자원 공유 | 하드웨어, 소프트웨어, 데이터를 함께 사용 |
| 동시성 | 여러 프로세스가 동시에 실행 |
| 확장성 | 노드 추가를 통한 성능 향상 |
| 장애 허용 | 일부 노드 장애에도 서비스 지속 |
| 투명성 | 분산 구조를 사용자에게 은폐 |
계층형 구조와 서비스 분할 방식
클라이언트, 미들웨어, 서버, 데이터 계층은 분산 환경에서 역할을 나누는 한 가지 형태다. 미들웨어는 클라이언트 요청과 여러 서버, 데이터 저장소 사이를 연결한다.
클라이언트-서버 아키텍처는 클라이언트와 서버가 직접 통신하는 2-tier 구조에서 출발한다. 프레젠테이션, 비즈니스 로직, 데이터를 분리하면 3-tier가 되며, 더 많은 계층을 두는 N-tier 구조로도 확장된다.
P2P 아키텍처에서는 참여자가 피어로 동작한다. 구조화된 P2P는 Chord와 Pastry처럼 DHT 기반 탐색을 사용하고, 비구조화 P2P는 Gnutella처럼 Flooding 기반 탐색을 사용한다. Napster는 중앙 인덱스 서버를 활용하는 하이브리드 P2P의 사례다.
마이크로서비스 아키텍처는 독립적으로 배포 가능한 작은 서비스의 집합으로 구성된다. 서비스 간에는 REST API나 메시지 큐로 통신하며, 확장성·유연성·독립적인 개발과 배포를 제공한다.
사용자가 보지 않아야 할 분산 환경의 차이
분산 투명성은 자원의 분산 배치를 사용자에게 감추는 성질이다. 로컬과 원격 자원을 같은 방식으로 접근하게 하거나, 자원의 위치와 이동, 복제본의 존재를 드러내지 않는 것이 여기에 속한다.
| 투명성 | 설명 | 예시 |
|---|---|---|
| 접근 투명성 | 로컬·원격 자원에 동일하게 접근 | RPC, RMI |
| 위치 투명성 | 자원 위치 은폐 | DNS, 네이밍 서비스 |
| 마이그레이션 투명성 | 자원 이동 은폐 | VM 라이브 마이그레이션 |
| 복제 투명성 | 복제본 존재 은폐 | 분산 캐시 |
| 동시성 투명성 | 동시 접근 관리 | 분산 락 |
| 장애 투명성 | 장애 복구 은폐 | 장애조치(Failover) |
| 확장 투명성 | 시스템 확장 은폐 | Auto-scaling |
일관성, 시간, 합의가 만나는 지점
CAP 정리는 일관성, 가용성, 분할 허용이라는 조건을 함께 다룬다. 일관성은 모든 노드가 동일한 데이터를 제공하는 성질이고, 가용성은 모든 요청에 응답을 보장하는 성질이다. 분할 허용은 네트워크가 분할된 상황에서도 시스템이 동작하는 성질을 뜻한다.
CA는 RDBMS, CP는 MongoDB와 HBase, AP는 Cassandra와 DynamoDB로 제시된다.
분산 환경에서는 시간과 이벤트 순서도 별도의 문제다. 시계 동기화는 물리적 시계와 논리적 시계를 다루며, Lamport 타임스탬프는 이벤트 순서를 결정한다. 벡터 클록은 인과관계를 추적하는 데 사용한다.
| 알고리즘 | 특징 | 용도 |
|---|---|---|
| Paxos | 이론적 기반, 복잡 | Google Chubby |
| Raft | 이해하기 쉬움 | etcd, Consul |
| PBFT | 비잔틴 장애 허용 | 블록체인 |
| ZAB | Zookeeper 전용 | Apache Zookeeper |
요청을 전달하고 원격 기능을 호출하는 방법
분산 통신은 요청-응답 형태의 동기식 방식, 메시지 큐를 사용하는 비동기식 방식, 이벤트 기반의 발행-구독 방식으로 나뉜다. 동기식 통신은 블로킹 요청-응답 모델을, 비동기식 통신은 논블로킹 메시지 전달을 사용한다.
원격 호출은 호출자와 서버 사이에서 마샬링, 네트워크 전달, 언마샬링이 이어지는 흐름으로 수행된다.
| 프로토콜 | 특징 | 사용처 |
|---|---|---|
| RPC | 원격 프로시저 호출 | 분산 시스템 기본 |
| gRPC | HTTP/2, Protocol Buffers | 마이크로서비스 |
| REST | HTTP 기반, 자원 중심 | Web API |
| AMQP | 메시지 큐 프로토콜 | RabbitMQ |
| MQTT | 경량 발행-구독 | IoT |
복제와 샤딩으로 데이터를 분산하는 방식
데이터 복제는 일관성과 가용성 사이의 선택을 포함한다. 동기 복제는 강한 일관성을 제공하지만 지연이 증가하고, 비동기 복제는 높은 가용성을 제공하지만 일관성 지연이 생긴다. 준동기 복제는 그 사이의 절충안이다.
샤딩은 데이터를 여러 조각으로 나누고, 각 샤드에 복제본을 둘 수 있게 한다.
| 모델 | 강도 | 설명 |
|---|---|---|
| 강한 일관성 | 높음 | 모든 읽기가 최신 쓰기 반영 |
| 순차적 일관성 | 중간 | 연산 순서 보장 |
| 인과적 일관성 | 중간 | 인과관계 있는 연산 순서 보장 |
| 최종 일관성 | 낮음 | 결국 모든 복제본 동기화 |
장애를 감지하고 서비스를 이어 가는 설계
분산 환경에서 장애는 노드 중단인 크래시 장애, 메시지 손실인 누락 장애, 응답 지연인 타이밍 장애, 임의 오작동인 비잔틴 장애로 나타난다. 장애 원인에 맞춰 장애조치, 복구·복제, 네트워크 분할 처리를 수행한다.
고가용성 패턴으로는 대기 서버를 준비하는 Active-Passive, 다중 활성 서버를 사용하는 Active-Active, 리더 선출 알고리즘인 Leader Election, 장애 전파를 막는 Circuit Breaker가 있다.
분산 환경에서 사용되는 시스템과 서비스
| 시스템 | 제공사 | 특징 |
|---|---|---|
| GFS/Colossus | 분산 파일 시스템 | |
| MapReduce | 분산 처리 프레임워크 | |
| Cassandra | Apache | 분산 NoSQL DB |
| Kafka | Apache | 분산 메시지 큐 |
| Kubernetes | CNCF | 컨테이너 오케스트레이션 |
클라우드 분산 서비스에는 AWS의 EC2, S3, DynamoDB, SQS가 있고, Azure는 VM, Blob Storage, CosmosDB를 제공한다. GCP에서는 Compute Engine, Cloud Storage, Spanner를 제공한다.
분산시스템은 확장성, 가용성, 성능을 제공하지만, CAP 정리에 따른 일관성과 가용성의 트레이드오프, 동기화, 합의 알고리즘이라는 고유한 과제를 안고 있다. 클라우드 컴퓨팅·빅데이터·마이크로서비스가 발전할수록 장애 허용과 데이터 일관성을 보장하면서 확장 가능한 시스템을 구축하는 역량이 중요해진다.