샤딩(Sharding) vs 파티셔닝(Partitioning) 정리
✅ 개요
| 항목 |
샤딩 (Sharding) |
파티셔닝 (Partitioning) |
| 정의 |
**데이터를 여러 DB 서버**에 분산 저장하는 방식 |
**하나의 DB 내에서 테이블 데이터를 분할**하여 저장 |
| 대상 |
**DB 서버 단위** |
**테이블/스토리지 단위** |
| 목적 |
수평 확장(Scale-out) 및 부하 분산 |
쿼리 성능 향상, 관리 효율화 |
| 처리 위치 |
애플리케이션 또는 DB 미들웨어에서 샤딩 전략 관리 |
DBMS 내부에서 자동 또는 수동 설정 |
| 대표 기술 |
Vitess, Citus, Mycat 등 |
MySQL 파티셔닝, Oracle 파티션 테이블 등 |
| 예시 |
고객 ID에 따라 DB1, DB2, DB3에 나눠 저장 |
월별 데이터 파티션: 2024년 1월, 2월, 3월 테이블 구분 |
🗂️ 파티셔닝 종류
🔹 Range Partitioning (범위 기반)
PARTITION BY RANGE (order\_date) (
PARTITION p202401 VALUES LESS THAN ('2024-02-01'),
PARTITION p202402 VALUES LESS THAN ('2024-03-01')
);
🔹 List Partitioning (리스트 기반)
PARTITION BY LIST (region) (
PARTITION east VALUES IN ('SEOUL', 'INCHEON'),
PARTITION west VALUES IN ('BUSAN', 'GWANGJU')
);
🔹 Hash Partitioning (해시 기반)
PARTITION BY HASH(customer\_id) PARTITIONS 4;
🧱 샤딩 구조 예시
┌────────────┐
│ Application│
└─────┬──────┘
┌──────────┴──────────┐
▼ ▼
┌────────────┐ ┌────────────┐
│ DB_001 │ │ DB_002 │
└────────────┘ └────────────┘
▲ ▲
고객ID 1~5000 고객ID 5001~
고객 ID, 지역, 테넌트 등으로 샤딩 키를 정해 샤딩 로직을 직접 구현하거나, 미들웨어나 프레임워크에서 분산 처리
⚖️ 비교 요약
| 비교 항목 |
샤딩 |
파티셔닝 |
| 목적 |
데이터 수평 분산 (스케일 아웃) |
쿼리 최적화, 유지보수 편의 |
| 운영 복잡도 |
높음 (샤딩 키, 라우팅 필요) |
낮음 (DB 내부 관리) |
| 쿼리 대상 |
샤딩된 서버 각각 |
단일 서버 내 여러 파티션 |
| 데이터 이동 |
샤드 간 이동 시 복잡 |
파티션 재조정 상대적으로 쉬움 |
| JOIN/집계 |
샤드 간 조인 불가 (앱단 처리 필요) |
파티션 간 조인 가능 (일부 제한) |
📝 결론
- 샤딩은 DB 자체를 나누는 분산 처리 전략으로, 대규모 트래픽 시스템에 적합
- 파티셔닝은 테이블 레벨에서 성능 최적화를 위한 기능이며, 관리 편의성 중심
- 둘 다 데이터 분산 처리 전략이지만, 적용 위치와 목적이 다르므로 대비되는 개념으로 볼 수 있음
✅ 샤딩은 "어디에 저장할 것인가", 파티셔닝은 "어떻게 나눠서 저장할 것인가"