분산 시스템 설계: 클러스터링·GFS/HDFS·CAP 이론
클러스터링, GFS와 HDFS의 파일 분산 방식, CAP 이론과 일관성 모델을 중심으로 분산 시스템 설계 원리를 정리한다.
2026-08-14 · 최초 발행 2026-01-16
노드가 늘어날 때 함께 생기는 문제
분산 시스템은 네트워크로 연결된 자율적 컴퓨터가 사용자에게 하나의 일관된 시스템으로 보이도록 협력하는 아키텍처다. 노드를 추가해 확장성을 확보하고 장애에도 서비스를 유지하려 하지만, 네트워크 지연과 부분 장애, 데이터 일관성 문제가 설계의 중심으로 따라온다.
수평 확장(Scale-out)은 노드를 더해 성능을 높이는 방식이다. 예를 들어 서버를 10대에서 20대로 늘릴 수 있다. 수직 확장(Scale-up)은 CPU 증설처럼 단일 노드의 성능을 높이는 접근이다. 수평 확장은 비용 효율적이고 무한 확장이 가능하다는 이점이 있다.
장애를 다루기 위해 데이터나 서비스를 여러 노드에 복제하고, 하트비트(Heartbeat)와 타임아웃으로 이상을 감지한다. 장애가 확인되면 자동 페일오버(Failover)나 데이터 재구성을 수행한다. 사용자는 데이터 위치, 일부 노드의 장애, 복제본 존재를 인식하지 않아도 서비스를 이용할 수 있어야 한다.
가용성과 처리 목적에 따른 클러스터 구성
클러스터링은 여러 컴퓨터를 논리적으로 묶어 고가용성(HA)이나 고성능(HPC)을 제공하는 방식이다. 페일오버, 로드 밸런싱, 클러스터 파일 시스템이 이를 뒷받침한다.
장애 시 역할을 넘기는 HA 클러스터
Active-Passive 구성에서는 주 서버(Active) 1대와 대기 서버(Passive) 1대 이상이 역할을 나눈다. 주 서버에 장애가 생기면 대기 서버가 서비스를 인계한다. 구조가 단순하고 데이터 일관성을 보장하기 쉽지만, 대기 서버 자원이 유휴 상태가 되며 페일오버에는 보통 수초-수분이 필요하다.
Active-Active 구성에서는 모든 노드가 동시에 요청을 처리한다. 로드 밸런서가 요청을 분산하고 장애 노드를 자동으로 제외한다. 자원 활용률은 100%이며 페일오버 시간을 최소화해 무중단으로 운영할 수 있지만, 데이터 동기화와 세션 공유가 복잡해진다.
요청을 어떤 노드로 보낼지 결정하는 방식
로드 밸런싱에는 순서대로 노드를 고르는 라운드 로빈(Round Robin), 현재 연결 수가 가장 적은 노드를 선택하는 최소 연결(Least Connections), 클라이언트 IP를 기준으로 같은 노드에 라우팅하는 IP 해시(IP Hash), 노드 성능에 따라 요청을 나누는 가중치(Weighted) 방식이 있다.
Health Check는 TCP 연결로 포트 응답 여부를 확인하거나, /health 엔드포인트처럼 특정 URL의 HTTP 응답을 검사한다. 응답하지 않는 노드는 타임아웃 뒤 자동으로 제외하고, 복구되면 다시 투입한다.
병렬 연산을 위한 HPC 클러스터
고성능 컴퓨팅 클러스터는 과학 시뮬레이션, 날씨 예측, 유전체 분석처럼 대규모 병렬 연산이 필요한 작업을 대상으로 한다. MPI(Message Passing Interface)와 인피니밴드(InfiniBand) 네트워크를 사용하며, 슈퍼컴퓨터와 렌더팜(Render Farm)이 예다.
대용량 데이터를 나누어 보관하는 파일 시스템
분산 파일 시스템은 파일을 여러 서버에 분산 저장하면서도 사용자가 투명하게 접근하도록 한다. 대용량 데이터 저장, 높은 처리량, 내결함성이 목적이며 GFS(Google File System), HDFS(Hadoop Distributed File System), Ceph, GlusterFS가 대표적이다.
GFS의 메타데이터와 청크 처리
GFS는 멀티 GB 파일과 순차 읽기·쓰기를 중심으로 설계됐으며, 수천 대 서버 환경에서는 장애가 일상적으로 발생한다고 가정한다.
Master는 파일명과 청크 위치 같은 메타데이터를 관리하는 단일 서버다. Chunk Server는 64MB 청크 단위의 실제 데이터를 저장하며, Client는 Master에서 메타데이터를 받은 뒤 Chunk Server와 직접 데이터를 읽는다.
데이터는 기본 3개로 복제하며 다른 랙에 분산한다. 네트워크 토폴로지를 고려해 동일 랙 장애에 대비하고, Chunk Server에 장애가 발생하면 Master가 복제 수를 유지하도록 재복제를 지시한다.
쓰기에서는 Client가 Master에 권한을 요청하고, Master가 Primary Chunk Server를 지정해 임시 리스(Lease)를 부여한다. Client는 모든 복제본에 파이프라인으로 데이터를 전송한다. Primary가 쓰기 순서를 정해 Secondary에 지시하고, 모든 복제본이 완료되면 Client에 성공을 응답한다.
HDFS가 블록을 복제하는 방식
HDFS는 GFS 논문을 기반으로 Apache Hadoop 프로젝트에서 구현한 오픈소스 시스템이다. Java 기반이며 다양한 플랫폼과 커뮤니티 생태계를 지원한다.
NameNode는 GFS의 Master처럼 메타데이터를 관리한다. DataNode는 Chunk Server에 대응하며 기본 128MB 블록(Block)을 저장한다. Secondary NameNode는 NameNode의 백업 역할을 하지만 완전한 HA는 아니다. HDFS 3.x는 Standby NameNode를 지원한다.
블록은 기본 3개로 복제한다. 첫 번째 복제본은 클라이언트와 동일 노드에 두고, 두 번째 복제본은 다른 랙의 노드에 배치하며, 세 번째 복제본은 두 번째 복제본과 같은 랙의 다른 노드에 둔다.
DataNode 장애로 NameNode가 하트비트를 받지 못하면 해당 블록을 재복제한다. NameNode 장애는 메타데이터 손실 위험을 만들기 때문에 현대 HDFS는 Active/Standby NameNode의 HA 구성을 사용한다. 각 블록에는 체크섬을 저장해 읽을 때 데이터 무결성을 검증한다.
이런 파일 시스템은 Hadoop MapReduce와 Spark 작업의 저장소, 웹 서버 수백 대에서 수집한 로그 분석, 페타바이트급 백업 데이터 저장, 비디오 콘텐츠의 분산 저장과 전송에 활용된다.
네트워크 분할에서 CAP이 드러내는 선택
CAP 이론은 분산 시스템이 일관성(Consistency), 가용성(Availability), 분할 허용(Partition Tolerance) 가운데 최대 2가지만 동시에 보장할 수 있다고 설명한다. Eric Brewer가 2000년에 제안했고, Seth Gilbert와 Nancy Lynch가 2002년에 증명했다.
일관성은 모든 노드가 동시에 같은 데이터를 보이는 성질이다. 강한 일관성에서는 쓰기 뒤 모든 읽기 요청이 최신 데이터를 반환한다. 은행 계좌 잔액이 모든 ATM에서 동일해야 하는 경우가 이에 해당한다.
가용성은 모든 요청이 타임아웃 없이 성공 또는 실패 응답을 받는 성질이다. 일부 노드에 장애가 있어도 시스템 전체는 동작한다. 소셜 미디어는 일시적 불일치를 허용하더라도 서비스를 유지하는 선택을 할 수 있다.
분할 허용은 스위치 장애나 지역 간 회선 단절처럼 노드 간 통신이 끊긴 상황에서도 시스템이 작동하는 성질이다. 분산 시스템에서는 네트워크 장애가 항상 발생할 수 있으므로 P는 필수다.
CP 시스템은 네트워크 분할이 발생했을 때 일부 노드의 요청을 거부해 가용성을 희생한다. HBase는 리전 서버 장애 시 해당 리전의 서비스가 일시 중단될 수 있고, MongoDB(Replica Set)는 Primary 장애 뒤 새 Primary가 선출될 때까지 쓰기를 차단한다. 금융 거래와 재고 관리가 이 선택을 활용한다.
AP 시스템은 네트워크 분할 중에도 각 노드가 독립적으로 동작하도록 하며, 일시적 불일치를 허용한다. Cassandra는 Eventual Consistency로 모든 노드에서 읽기와 쓰기가 가능하고, DynamoDB는 읽기·쓰기 지연이 증가하더라도 요청을 처리한다. 소셜 미디어, 추천 시스템, 캐시가 해당 방식의 활용처다.
CA는 네트워크 분할을 피할 수 없는 분산 환경에서는 현실적으로 불가능하다. 단일 서버에서는 CA가 가능하지만 분산 시스템은 아니다.
일관성 수준과 성능의 교환 관계
강한 일관성(Strong Consistency)은 쓰기 뒤 모든 읽기가 최신 값을 반환하도록 한다. 2PC(Two-Phase Commit), Paxos, Raft로 구현하며 높은 지연과 낮은 처리량이 따른다.
최종 일관성(Eventual Consistency)은 쓰기 뒤 일정 시간이 지나면 모든 복제본이 같은 상태로 수렴한다. Gossip 프로토콜과 Vector Clock이 구현에 쓰이며, 낮은 지연과 높은 처리량을 제공한다.
인과 일관성(Causal Consistency)은 인과 관계가 있는 쓰기가 모든 노드에서 같은 순서로 보이도록 한다. 예를 들어 "좋아요" 뒤의 "댓글"은 항상 그 순서로 표시된다. 강한 일관성과 최종 일관성 사이의 균형점이다.
복제·샤딩·합의로 시스템을 운영한다
복제(Replication)는 내결함성과 읽기 성능 향상을 위해 데이터를 여러 곳에 둔다. Master-Slave, Multi-Master, Quorum 기반 방식이 있다.
샤딩(Sharding)은 데이터를 여러 노드로 나누어 수평 확장하는 방법이다. 키 기반 샤딩은 hash(key) % N처럼 해시 함수로 키를 노드에 매핑한다. 범위 기반 샤딩은 A-M은 노드1, N-Z는 노드2처럼 키 범위별로 노드를 할당한다.
합의 알고리즘(Consensus Algorithm)은 분산 노드가 하나의 값에 합의하도록 한다. Paxos는 이론적으로 완벽하지만 구현이 복잡하고, Raft는 Paxos보다 이해하기 쉬운 알고리즘으로 etcd와 Consul이 사용한다. 리더 선출, 분산 락, 설정 관리가 대표적인 활용 영역이다.
클러스터링은 고가용성을, GFS와 HDFS는 대용량 데이터의 분산 저장을 제공한다. Active-Active 클러스터는 자원 활용을 극대화하고, HDFS의 블록 복제는 랙 장애까지 대비한다. 네트워크 분할에서도 서비스 연속성을 유지하려면 AP 시스템을 선택할 수 있으며, 워크로드 특성에 따라 CP와 AP 중 어느 쪽을 택할지 결정해야 한다.