261. 분산 데이터베이스 (Distributed Database)
핵심 인사이트 (3줄 요약)
- 본질: 분산 데이터베이스는 물리적으로 분리된 여러 노드에 데이터를 저장하며, 단일 시스템처럼 보이게 하는 투명성(Transparency) 제공을 목표로 하는 데이터베이스 시스템이다.
- 가치: 단일 데이터베이스의 확장성 한계를 극복하고,地理적 분산, 고가용성, 부하 분산 등을 달성할 수 있게 해준다.
- 융합: CAP 정리, 투명성 규칙, NoSQL, NewSQL, 데이터 복제, 샤딩과 밀접하게 연관되며, 현대 대규모 애플리케이션의 핵심 인프라이다.
Ⅰ. 개요 및 필요성 (Context & Necessity)
개념 정의
분산 데이터베이스(Distributed Database)는 물리적으로 분리된 여러 노드(서버)에 데이터를 저장하고 관리하는 데이터베이스 시스템이다. 사용자에게는 단일 데이터베이스처럼 보이게 하며, 데이터의 물리적 위치나 분산 구조를意識할 필요 없이 동일한 인터페이스로 데이터에 접근할 수 있게 한다. 이를 위해 위치 투명성, 분할 투명성, 복제 투명성 등의 투명성 규칙을 제공한다.
필요성
데이터量의 폭발적 증가와 사용자 수의 급증으로 인해, 단일 데이터베이스服务器的 용량 한계에 도달하게 되었다. 또한 글로벌 서비스에서는 사용자와 가까운 지역에 데이터 센터를 배치하여 응답 속도를 높여야 하고, 특정数据中心 장애 시에도 서비스가 계속되어야 한다. 이러한 요구사항을 충족하기 위해 분산 데이터베이스가 필수적으로 요구된다.
배경
1990년대부터 분산 데이터베이스에 대한 연구가 시작되었으며, 이후 Oracle RAC, IBM DB2 pureScale, Microsoft SQL Server AlwaysOn 등의 상용 제품이 등장했다. 2010년대에는 NoSQL 운동과 함께 Cassandra, MongoDB, HBase 등의 분산 NoSQL 데이터베이스가 등장하였으며, 최근에는 NewSQL이 전통적 RDBMS의 ACID 특성과 분산 확장성을 결합하여 새로운 패러다임으로 자리잡고 있다.
비유
분산 데이터베이스는 여러 지점에分行을 둔 전국적인 은행 시스템과 같다. 고객은 가까운分行에서取引할 수 있으며, 전체 은행의 잔고는 모두 동기화되어 있다. 특정分行이火灾でも他の分行で取引を継続でき、 전체 서비스가 중단되지 않는다.
📢 섹션 요약: 분산 데이터베이스는 여러 노드에 데이터를 분산 저장하여 확장성, 가용성, 지역적 응답 속도를 달성하며, 사용자에게는 단일 시스템처럼 보이게 하는 투명성을 제공한다.
Ⅱ. 아키텍처 및 핵심 원리 (Deep Dive)
분산 데이터베이스 구조
┌─────────────────────────────────────────────────────────────────────────────┐
│ 분산 데이터베이스 전체 구조 │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────────────────────┐ │
│ │ 사용자/애플리케이션 │ │
│ │ │ │ │
│ │ 분산 DB 인터페이스 │ │
│ │ │ │ │
│ │ ┌────────────────────┼────────────────────┐ │ │
│ │ ▼ ▼ ▼ │ │
│ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │
│ │ │ 글로벌 │ │ 글로벌 │ │ 글로벌 │ │ │
│ │ │ 카탈로그│ │ 쿼리 │ │ 트랜잭션 │ │ │
│ │ │ │ │ 최적화기 │ │ 관리자 │ │ │
│ │ └────┬────┘ └────┬────┘ └────┬────┘ │ │
│ │ │ │ │ │ │
│ │ └───────────────────┼───────────────────┘ │ │
│ │ ▼ │ │
│ │ ┌──────────┬──────────┴──────────┬──────────┐ │ │
│ │ ▼ ▼ ▼ ▼ │ │
│ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │
│ │ │ 노드 1 │ │ 노드 2 │ │ 노드 3 │ │ 노드 4 │ │ │
│ │ │ (로컬 DB)│ │ (로컬 DB)│ │ (로컬 DB)│ │ (로컬 DB)│ │ │
│ │ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │ │
│ │ │ │ │ │ │ │
│ │ ▼ ▼ ▼ ▼ │ │
│ │ ┌─────────────────────────────────────────────────────┐ │ │
│ │ │ 네트워크 통신 (복제/동기화) │ │ │
│ │ └─────────────────────────────────────────────────────┘ │ │
│ └─────────────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
[다이어그램 해설]
분산 데이터베이스의 핵심은 "투명성"이다. 사용자는 데이터가 물리적으로 어디에
저장되어 있는지意識할 필요 없이 동일한 인터페이스로 접근할 수 있다. 글로벌
카탈로그가 전체 데이터의 위치를 관리하고, 글로벌 쿼리 최적화기가 분산된
노드에 걸쳐 최적의 쿼리 실행 계획을 생성하며, 글로벌 트랜잭션 관리자가
분산 트랜잭션의 일관성을 보장한다.
투명성 6가지 규칙
┌─────────────────────────────────────────────────────────────────────────────┐
│ 분산 데이터베이스 투명성 6가지 규칙 │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ 1. 위치 투명성 (Location Transparency) │
│ ─────────────────────────────────────── │
│ • 데이터의 물리적 위치를 몰라도 접근 가능 │
│ • 예: "SELECT * FROM customers" - customers 테이블이 어디에 있는지 몰라도OK │
│ • 물리적 위치 변경이 애플리케이션에 영향 없음 │
│ │
│ 2. 분할 투명성 (Fragmentation/Partition Transparency) │
│ ─────────────────────────────────────────────────────────── │
│ • 데이터가 분할(수평/수직)되어 있음을 인식할 필요 없음 │
│ • 예: customers 테이블이 여러 파티션에 나뉘어 있어도 단일 테이블로 조회 │
│ • 분할로 인한 조인이나 집합 연산의 복잡성 은폐 │
│ │
│ 3. 복제 투명성 (Replication Transparency) │
│ ─────────────────────────────────────────── │
│ • 동일 데이터가 여러 노드에 복제되어 있음을 인식할 필요 없음 │
│ • 예: 데이터가 3개 노드에 복제되어 있어도 동일하게 조회 │
│ • 복제로 인한 일관성 관리 은폐 │
│ │
│ 4. 병행 투명성 (Concurrency Transparency) │
│ ─────────────────────────────────────── │
│ • 여러 사용자의 동시 접근이 상호干扰 없이 처리됨 │
│ • 동시성 제어 메커니즘을意識할 필요 없음 │
│ │
│ 5. 장애 투명성 (Failure Transparency) │
│ ─────────────────────────────────────── │
│ • 노드 장애 시에도 서비스가 계속됨 │
│ • 장애 복구 과정이 사용자에게 보이지 않음 │
│ │
│ 6. 지역 사상 투명성 (Local Mapping Transparency) │
│ ───────────────────────────────────────────── │
│ • 각 로컬 데이터베이스의 모델(스키마) 차이를 은폐 │
│ • 예: Oracle과 MySQL이混재된 환경에서도 동일 인터페이스 제공 │
│ │
│ ┌─────────────────────────────────────────────────────────────────────┐ │
│ │ 투명성 수준과 복잡도 │ │
│ │ │ │
│ │ 높음 투명성 ←──────────────→ 낮음 투명성 │ │
│ │ 사용자 편의 ↑ 시스템 복잡도 ↑ │ │
│ │ 성능 최적화 어려움 성능 최적화 용이 │ │
│ │ │ │
│ │ ※ 모든 투명성을 제공하면 시스템 복잡도가 증가하고 성능이 저하될 수 있음 │ │
│ └─────────────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
[다이어그램 해설] 투명성은 분산 데이터베이스의 핵심 설계 목표이다. 높은 투명성은 사용자 편의성을 높이지만 시스템 복잡도를 증가시킨다. 예를 들어, 위치 투명성을 제공하려면 글로벌 카탈로그가 필요하고, 복제 투명성을 제공하려면 일관성 관리 메커니즘이 필요하다. 따라서 실제 시스템에서는 성능과 편의성 사이의 균형점을 찾아야 한다.
분산 데이터베이스 설계 고려사항
┌─────────────────────────────────────────────────────────────────────────────┐
│ 분산 데이터베이스 설계 고려사항 │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ 1. 데이터 분할 (Data Partitioning/Sharding) │
│ ───────────────────────────────────────────── │
│ • 수평 분할: 튜플(행) 단위 분할 - ROW를 여러 노드에 분산 │
│ • 수직 분할: 속성(열) 단위 분할 - Column을 다른 노드에 저장 │
│ • 복합 분할: 수평 + 수직 조합 │
│ │
│ 2. 복제 전략 (Replication Strategy) │
│ ───────────────────────────────── │
│ • 동기식 복제: 모든 복제본에 기록 완료 후 응답 (일관성 ↑, 지연 ↑) │
│ • 비동기식 복제: 하나에 기록 후 백그라운드 복제 (일관성 ↓, 지연 ↓) │
│ │
│ 3. 쿼리 처리 │
│ ───────────── │
│ • 분산 조인: 여러 노드에 걸친 조인 연산 │
│ • 분산 집계: 여러 노드의 결과를 집계 │
│ • 쿼리 최적화: 네트워크 비용을 고려한 실행 계획 수립 │
│ │
│ 4. 트랜잭션 관리 │
│ ───────────────── │
│ • 2PC (Two-Phase Commit): 분산 트랜잭션의 원자성 보장 │
│ • Saga 패턴: 긴 트랜잭션을 로컬 트랜잭션으로 분할 │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
📢 섹션 요약: 분산 데이터베이스 설계 시 데이터 분할, 복제 전략, 쿼리 처리, 트랜잭션 관리 등을 고려해야 하며, 투명성과 성능 사이의 균형을 맞추는 것이 중요하다.
Ⅲ. 구현 및 실무 응용 (Implementation & Practice)
MongoDB 분산 데이터베이스 예시
// MongoDB Sharded Cluster 구조
// 1. Shard: 실제 데이터 저장 노드
// mongod --shardsvr --replSet rs0 --port 27017 --dbpath /data/shard0
// 2. Config Server: 메타데이터 저장
// mongod --configsvr --replSet configReplSet --port 27019 --dbpath /data/config
// 3. Mongos: 쿼리 라우터 (투명성 제공)
sh.addShard("rs0/node1:27017")
sh.addShard("rs0/node2:27017")
sh.addShard("rs0/node3:27017")
// 컬렉션 분산 저장
sh.enableSharding("mydb")
sh.shardCollection("mydb.orders", {customer_id: "hashed"})
// 분산 查询 예시 (위치 투명성)
db.orders.find({customer_id: "CUST-001"})
// → Mongos가 적절한 Shard로 쿼리 라우팅
// → 사용자는 단일 컬렉션만 조회하는 것처럼 보임 (투명성)
Cassandra 분산 데이터베이스 예시
-- Cassandra 클러스터 설정
-- 키스페이스 생성 (데이터 복제 전략 정의)
CREATE KEYSPACE myapp
WITH REPLICATION = {
'class': 'NetworkTopologyStrategy',
'dc1': 3,
'dc2': 3
}
AND DURABLE_WRITES = true;
-- 테이블 생성 (샤딩/파티셔닝 자동)
CREATE TABLE myapp.orders (
order_id UUID PRIMARY KEY,
customer_id text,
order_date timestamp,
total_amount decimal,
status text
);
-- 파티션 키를 통한 데이터 분산
-- customer_id가 파티션 키로 사용되어 데이터가 노드에 분산됨
-- 쓰기 (투명성: 클라이언트는 단일 테이블에 쓰기)
INSERT INTO myapp.orders (order_id, customer_id, order_date, total_amount, status)
VALUES (uuid(), 'CUST-001', toTimestamp(now()), 150.00, 'pending');
-- 읽기 (투명성: 파티션 키로 자동 라우팅)
SELECT * FROM myapp.orders WHERE customer_id = 'CUST-001';
-- → Cassandra가 파티션 키를 기반으로 적절한 노드에서 읽기
클라우드 분산 데이터베이스
┌─────────────────────────────────────────────────────────────────────────────┐
│ 주요 클라우드 분산 데이터베이스 │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ Amazon Aurora: │
│ • 스토리지와 컴퓨팅 분리 │
│ • 6개 복제본 (3가용 영역에 2개씩) 자동 복제 │
│ • 쓰기: Primary 1개, 읽기: 15개까지Replica 지원 │
│ • 자동 페일오버 (소요 시간: ~30초) │
│ │
│ Google Cloud Spanner: │
│ • 글로벌 분산 (전 세계 리전 지원) │
│ • TrueTime (원자시계 + GPS) 기반 글로벌 일관성 │
│ • 강철 일관성 (Serializable isolation) │
│ • 수평적 확장 │
│ │
│ Azure Cosmos DB: │
│ • 다중 모델 (Document, Key-Value, Graph, Column) │
│ • 다중 API (SQL, MongoDB, Cassandra, Gremlin 호환) │
│ • Tunable consistency (5단계) │
│ • 글로벌 분산 (리전 추가/제거 자동) │
│ │
│ CockroachDB: │
│ • 글로벌 분산 PostgreSQL 호환 │
│ • Raft Consensus 기반 복제 │
│ • 강철 일관성 (Serializable) │
│ • 자동 샤딩 및 리밸런싱 │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
📢 섹션 요약: MongoDB, Cassandra 등 주요 분산 데이터베이스는 자동 샤딩, 복제, 페일오버 등을 통해 투명성을 제공하며, 클라우드 서비스(Aurora, Spanner, Cosmos DB, CockroachDB)도 다양한 분산 기능을 지원한다.
Ⅳ. 품질 관리 및 테스트 (Quality & Testing)
분산 데이터베이스 테스트
┌─────────────────────────────────────────────────────────────────────────────┐
│ 분산 데이터베이스 품질 테스트 항목 │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ [투명성 테스트] │
│ ───────────── │
│ □ 위치 투명성: 데이터 위치 몰라도 查询 가능 확인 │
│ □ 분할 투명성: 파티션 단위로 데이터 조회 시 전체 데이터 조회처럼 보임 확인 │
│ □ 복제 투명성: 복제 존재 인식하지 않고 동일하게 조회 확인 │
│ │
│ [확장성 테스트] │
│ ──────────── │
│ □ 노드 추가 시 자동 리밸런싱 동작 확인 │
│ □ 데이터 이동 없이 용량 확장 확인 │
│ □ 확장 후 성능 저하 수준 측정 │
│ │
│ [가용성 테스트] │
│ ───────────── │
│ □ 노드 장애 시 자동 페일오버 동작 확인 │
│ □ 네트워크 분단 시 Quorum 기반 동작 확인 │
│ □ 복구 후 데이터 동기화 확인 │
│ │
│ [일관성 테스트] │
│ ──────────── │
│ □ 분산 트랜잭션의 ACID 보장 확인 │
│ □ 복제 지연으로 인한 불일치 수준 측정 │
│ □ 일관성 수준별 동작 확인 │
│ │
│ [성능 테스트] │
│ ────────── │
│ □ 분산 쿼리 vs 단일 노드 쿼리 성능 비교 │
│ □ 네트워크 지연이 성능에 미치는 영향 분석 │
│ □ 대규모 데이터셋에서 쿼리 성능 측정 │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
📢 섹션 요약: 분산 데이터베이스 테스트는 투명성, 확장성, 가용성, 일관성, 성능을 모두 검증해야 하며, 실제 환경과 유사한 시나리오로 테스트해야 한다.
Ⅴ. 최신 트렌드 및 결론 (Trends & Conclusion)
###serverless 분산 데이터베이스
최근에는serverless 분산 데이터베이스가 새로운 트렌드로 자리잡고 있다. Amazon Aurora Serverless, PlanetScale, Neon 등이 대표적이다. 이러한 시스템은 사용량에 따라 자동으로 용량이 조정되며, 인프라 관리가 필요하다.
HTAP와 분산 데이터베이스
HTAP(Hybrid Transactional/Analytical Processing)는 OLTP와 OLAP를 하나의 분산 플랫폼에서 처리하는 기술이다. TiDB, SingleStore, Exasol 등이 HTAP를 지원하며, 분산 아키텍처를 활용하여 실시간 분석과 트랜잭션을 동시에 처리한다.
결론
분산 데이터베이스는 현대 대규모 애플리케이션의 핵심 인프라이다. 투명성을 통해 사용자에게 단일 시스템처럼 보이게 하면서, 확장성, 가용성, 성능을 제공한다. 시스템을 설계할 때는 데이터 분할, 복제 전략, 일관성 모델 등을 면밀히 분석하여 요구사항에 맞는 분산 데이터베이스를 선택해야 한다.
📢 섹션 요약: 분산 데이터베이스는 투명성을 제공하여 단일 시스템처럼 보이게 하면서 확장성, 가용성, 성능을 달성하며, 최신 트렌드인serverless와 HTAP와도 융합正在한다.
핵심 인사이트 ASCII 다이어그램 (Concept Map)
┌─────────────────────────────────────────────────────────────────────────────┐
│ Distributed Database Concept Map │
│ │
│ ┌───────────────────────────┐ │
│ │ Distributed Database │ │
│ │ (분산 데이터베이스) │ │
│ └─────────────┬─────────────┘ │
│ │ │
│ ┌───────────────────┼───────────────────┐ │
│ ▼ ▼ ▼ │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ 투명성 │ │ 확장성 │ │ 가용성 │ │
│ │6가지 규칙│ │ (샤딩) │ │ (복제) │ │
│ └────┬────┘ └────┬────┘ └────┬────┘ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 관련 기술 │ │
│ │ CAP | NoSQL | NewSQL | 2PC | Saga | Consensus │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ 대표 시스템: MongoDB | Cassandra | CockroachDB | Aurora | Spanner │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
참고
- 분산 데이터베이스는 투명성 6가지 규칙을 통해 사용자에게 단일 시스템처럼 보이게 한다.
- 위치 투명성, 분할 투명성, 복제 투명성, 병행 투명성, 장애 투명성, 지역 사상 투명성이 있다.
- 데이터 분할(샤딩)과 복제 전략이 핵심 설계 요소이다.
- CAP 정리, 일관성 모델, Consensus 알고리즘 등 분산 시스템 이론과 밀접하게 연관된다.