데이터베이스(DB)는 서비스의 심장입니다.
하지만 데이터가 폭발적으로 늘어나면,
단일 DB는 성능·비용·안정성 모두에서 한계를 맞게 됩니다.
이때 등장하는 해결책이 바로 샤딩(Sharding)입니다.
하나의 커다란 데이터셋을 여러 DB 서버에 나누어 저장하는 기법
| 방식 | 설명 | 예시 |
|---|---|---|
| Range Sharding | 키 값 범위별 분리 | ID 1~1,000,000 → DB1, 그 이후 → DB2 |
| Hash Sharding | 해시 함수로 균등 분배 | user_id % 4 → 0: DB1, 1: DB2... |
| Geo Sharding | 지역 기반 분리 | KR 데이터 → DB1, JP 데이터 → DB2 |
| Directory Sharding | 중앙 라우터가 결정 | 샤드 매핑 테이블로 위치 관리 |
[Application]
↓
[Sharding Logic]
↓
┌────────┬────────┬────────┐
│ DB1 │ DB2 │ DB3 │
└────────┴────────┴────────┘
| 단점 | 설명 |
|---|---|
| 쿼리 복잡도 | 여러 샤드에 걸친 조인, 검색이 어려움 |
| 운영 복잡성 | 샤드 추가·이동·병합 시 데이터 마이그레이션 필요 |
| 트랜잭션 문제 | 샤드 간 트랜잭션(XA) 구현이 복잡 |
| 데이터 불균형 | 특정 샤드에 데이터 몰리면 성능 저하 (Hot Spot) |
| 서비스 | 샤딩 기준 |
|---|---|
| 카카오톡 | 사용자 ID 기반 Hash Sharding |
| 배달의민족 | 주문 ID 기반 Range Sharding |
| 글로벌 게임 서버 | 지역(Region) 기반 Geo Sharding |
샤딩은 성능 한계와 비용 문제를 동시에 해결하는 강력한 무기지만,
설계와 운영의 복잡성을 감수해야 합니다.