티스토리 뷰
DB 파티셔닝(Partitioning)과 샤딩(Sharding) 원리 및 알고리즘 예제 정리
1. 데이터베이스 파티셔닝(Partitioning) 정의 및 유형
데이터베이스 파티셔닝은 단일 DBMS 서버 내에서 거대한 하나의 테이블을 여러 개의 작은 물리적 단위로 분할하여 관리하는 기술입니다. 데이터의 논리적 구조는 유지되지만, 물리적인 저장 공간이 분리되어 쿼리 성능 향상과 관리 편의성을 제공합니다.
| 파티셔닝 방식 | 분할 기준 및 메커니즘 | 주요 활용 예시 |
|---|---|---|
| Range Partitioning | 지정한 컬럼의 연속적인 범위(수치, 날짜 등)를 기준으로 데이터를 분할합니다. | 일별, 월별, 년별 로그 데이터 관리 |
| List Partitioning | 컬럼의 값이 특정 명시적 열거형 값 목록에 포함되는지 여부로 분할합니다. | 지역 코드(서울, 부산 등), 부서별 데이터 |
| Hash Partitioning | 균등한 데이터 배분을 위해 해시 함수 엔진이 반환한 결과값을 기준으로 분할합니다. | 범위가 없고 고르게 분산해야 하는 회원 데이터 |
MySQL 기준 수평 파티셔닝(Horizontal) 구현 DDL 예제
아래 코드는 created_at 컬럼의 연도 범위를 기준으로 테이블을 3개의 물리적 파티션으로 분할하는 수평 파티셔닝 예제입니다.
id INT NOT NULL,
amount INT,
created_at DATE NOT NULL,
PRIMARY KEY (id, created_at)
)
PARTITION BY RANGE (YEAR(created_at)) (
PARTITION p_past VALUES LESS THAN (2024),
PARTITION p_2024 VALUES LESS THAN (2025),
PARTITION p_future VALUES LESS THAN MAXVALUE
);
이 구조에서 WHERE created_at >= '2024-01-01' 쿼리를 수행하면 DBMS 옵티마이저는 p_past 파티션을 아예 탐색하지 않는 파티션 프루닝(Partition Pruning)을 가동하여 디스크 I/O 비용을 줄입니다.
2. 데이터베이스 샤딩(Sharding)의 개념과 데이터 분산 알고리즘
파티셔닝이 '단일 서버 내부'에서의 분할이라면, **샤딩(Sharding)**은 거대한 테이블을 스케일 아웃(Scale-out)하기 위해 여러 대의 독립된 데이터베이스 서버(샤드 Node)에 데이터를 분산 저장하는 아키텍처 기술입니다.
샤딩을 구현할 때는 데이터를 어떤 노드에 배치할지 결정하는 샤드 키(Shard Key) 선정과 라우팅 알고리즘이 핵심 요소가 됩니다.
① 모듈러 샤딩 (Modular Sharding)
메커니즘: Shard_ID = Shard_Key % Node_개수 공식을 사용하여 샤드 위치를 결정합니다. 데이터가 수학적으로 균등하게 분산된다는 장점이 있습니다.
User_ID: 101 -> 101 % 3 = Node 2 저장
User_ID: 102 -> 102 % 3 = Node 0 저장
User_ID: 103 -> 103 % 3 = Node 1 저장
⚠️ 한계점: 트래픽 증가로 데이터베이스 노드를 추가(예: 3대 -> 4대)할 경우, 모듈러 연산 기준값(N)이 바뀌므로 기존에 저장되어 있던 모든 데이터의 대규모 재배치(Data Migration)가 강제 발생합니다.
② 인시스턴트 해싱 알고리즘 (Consistent Hashing)
메커니즘: 가상의 링(Hash Ring) 위에 서버 노드의 위치와 데이터의 해시값을 매핑하고, 데이터의 해시값에서 시계 방향으로 가장 가까운 서버 노드를 찾아 데이터를 할당하는 방식입니다.
Hash(User_Data) = 20000000 일 때,
가장 가까운 시계방향 노드인 Node_B로 데이터 라우팅 결정
✅ 장점: 새로운 노드가 추가되거나 기존 노드가 제거될 때, 전체 데이터를 재배치할 필요 없이 일부 인접 노드의 데이터 영역만 최소한으로 이동하므로 수평 확장에 유리합니다.
3. 샤딩 도입 시 발생하는 아키텍처적 한계와 트레이드 오프
샤딩은 시스템 스케일 아웃의 최종 단계에서 고려되는 강력한 기술이지만, 분산 아키텍처 특성상 다음과 같은 정형적 한계를 동반하므로 설계 비용이 큽니다.
- Cross-Shard Join 불가: 데이터가 서로 다른 물리적 서버 노드에 격리되어 있으므로 일반적인 SQL JOIN 연산을 수행할 수 없습니다. 데이터를 애플리케이션 레이어에서 각각 조회하여 병합해야 하므로 네트워크 오버헤드가 발생합니다.
- 분산 트랜잭션과 데이터 정합성(2PC): 여러 샤드 노드에 걸쳐 있는 데이터를 동시에 수정할 때, 트랜잭션의 ACID를 보장하기 위해 2단계 커밋(Two-Phase Commit, 2PC) 메커니즘을 도입해야 하므로 시스템 복잡도가 늘어나고 성능 병목이 생길 수 있습니다.
📚 공식 기술 레퍼런스 (References)
- Oracle Database Documentation: "VLDB and Partitioning Guide - Partitioning Concepts" 참조 (물리적 독립성 및 파티션 프루닝 정의 법칙)
- MySQL 8.0 Reference Manual: "Chapter 24 Partitioning - RANGE and HASH Partitioning Syntax" 준수
- Amazon Web Services (AWS) Architecture Blog: "Understanding Database Sharding" 핵심 아키텍처 아티클 분산 지침 인용
#DB파티셔닝 #DB샤딩원리 #RangePartitioning #모듈러샤딩 #ConsistentHashing #파티션프루닝 #대용량데이터베이스 #데이터분산아키텍처
'데이터베이스' 카테고리의 다른 글
| DB 인덱스(Index) 원리부터 B-Tree 구조, 복합 인덱스 설정 기준 완벽 정리 (0) | 2026.06.05 |
|---|---|
| JPA N+1 문제 원인 및 해결 방법: Fetch Join과 Batch Size 완벽 정리 (0) | 2026.06.04 |
| SQL JOIN 종류 및 예제 (0) | 2026.05.24 |
| 데이터베이스 정규화 BCNF (0) | 2026.05.17 |
| 데이터베이스 제3정규화 (0) | 2026.05.17 |
| 데이터베이스 제2정규화 (0) | 2026.05.17 |
| 데이터베이스 제1정규화 (0) | 2026.05.17 |
| 가장 많이 사용된 데이터베이스(DBMS) TOP10 - 2026 최신버전 (0) | 2026.05.07 |
- Total
- Today
- Yesterday
- Class
- 리스트
- 파일처리
- 아두이노
- 상속
- 안드로이드
- 자료구조
- MySQL
- 정보처리기사
- C++ 클래스
- 자바
- Android
- 파이썬
- 벡터
- c#
- OpenCV
- 문자열
- C
- 블루투스
- C언어
- 클래스
- 문제풀이
- C++
- 데이터베이스
- 알고리즘
- String
- 배열
- Java
- html
- DB연동
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | 31 |