분산 SQL(Distributed SQL)은 SQL 인터페이스를 유지하면서 데이터를 여러 노드에 자동으로 분산하는 데이터베이스 카테고리다. ACID 트랜잭션과 수평 확장을 동시에 제공한다.
분산 SQL vs 전통 RDBMS vs NoSQL
| 항목 | 전통 RDBMS | NoSQL | 분산 SQL |
|---|
| SQL 지원 | 완전 지원 | 미지원/제한 | 완전 지원 |
| 수평 확장 | 제한 (수직 위주) | 우수 | 우수 |
| ACID 트랜잭션 | 완전 지원 | 제한/없음 | 완전 지원 |
| 분산 트랜잭션 | 미지원 | 미지원 | 지원 |
| 일관성 | 강한 일관성 | 최종 일관성 | 강한 일관성 |
| 자동 샤딩 | 없음 | 있음 | 있음 |
주요 분산 SQL 데이터베이스
CockroachDB:
- PostgreSQL 호환
- Raft 합의 + MVCC
- Multi-Region 지원
- 자동 샤딩 (Range 기반)
YugabyteDB:
- PostgreSQL + Cassandra API
- DocDB 스토리지 엔진
- Geo-Partitioning
Google Spanner:
- 글로벌 규모 트랜잭션
- TrueTime API (GPS + 원자시계)
- Serializable isolation
TiDB:
- MySQL 호환
- TiKV + Raft
- HTAP (TiFlash)
PlanetScale:
- Vitess 기반
- MySQL 호환
- 브랜치 기능
분산 트랜잭션 처리
2PC (Two-Phase Commit):
Phase 1 Prepare: 모든 노드에 커밋 가능 여부 확인
Phase 2 Commit: 모두 준비되면 커밋, 아니면 롤백
단점: 코디네이터 장애 시 블로킹
Percolator (Google):
행 단위 잠금 + BigTable 기반
낙관적 동시성 제어
Raft 기반 복제:
각 샤드(Range)가 독립적 Raft 그룹
과반수 합의로 쓰기 확정
CockroachDB 실전
sql
-- 자동 샤딩 확인
SHOW RANGES FROM TABLE orders;
-- 지역 분산 (Multi-Region)
ALTER DATABASE mydb PRIMARY REGION "us-east1";
ALTER DATABASE mydb ADD REGION "eu-west1";
ALTER DATABASE mydb ADD REGION "ap-northeast1";
-- 테이블 지역성 설정
ALTER TABLE users SET LOCALITY REGIONAL BY ROW;
-- crdb_region 컬럼 자동 추가 → 해당 지역 노드에 데이터 배치
-- 분산 트랜잭션 (일반 SQL과 동일)
BEGIN;
UPDATE accounts SET balance = balance - 1000 WHERE id = 'A' AND region = 'kr';
UPDATE accounts SET balance = balance + 1000 WHERE id = 'B' AND region = 'us';
COMMIT; -- 자동으로 분산 2PC 처리
관련 문서
- •[[htap|HTAP]]
- •[[nosql-patterns|NoSQL 패턴]]
- •[[database-observability|데이터베이스 관찰가능성]]