티스토리 뷰

반응형

DB 파티셔닝(Partitioning)과 샤딩(Sharding) 원리 및 알고리즘 예제 정리

1. 데이터베이스 파티셔닝(Partitioning) 정의 및 유형

데이터베이스 파티셔닝은 단일 DBMS 서버 내에서 거대한 하나의 테이블을 여러 개의 작은 물리적 단위로 분할하여 관리하는 기술입니다. 데이터의 논리적 구조는 유지되지만, 물리적인 저장 공간이 분리되어 쿼리 성능 향상과 관리 편의성을 제공합니다.

파티셔닝 방식 분할 기준 및 메커니즘 주요 활용 예시
Range Partitioning 지정한 컬럼의 연속적인 범위(수치, 날짜 등)를 기준으로 데이터를 분할합니다. 일별, 월별, 년별 로그 데이터 관리
List Partitioning 컬럼의 값이 특정 명시적 열거형 값 목록에 포함되는지 여부로 분할합니다. 지역 코드(서울, 부산 등), 부서별 데이터
Hash Partitioning 균등한 데이터 배분을 위해 해시 함수 엔진이 반환한 결과값을 기준으로 분할합니다. 범위가 없고 고르게 분산해야 하는 회원 데이터

MySQL 기준 수평 파티셔닝(Horizontal) 구현 DDL 예제

아래 코드는 created_at 컬럼의 연도 범위를 기준으로 테이블을 3개의 물리적 파티션으로 분할하는 수평 파티셔닝 예제입니다.

CREATE TABLE sales (
    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_개수 공식을 사용하여 샤드 위치를 결정합니다. 데이터가 수학적으로 균등하게 분산된다는 장점이 있습니다.

-- 데이터가 들어오는 시점의 라우팅 모의 계산 (Node 개수: 3대)
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(Node_A) = 12000000, Hash(Node_B) = 34000000
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 #파티션프루닝 #대용량데이터베이스 #데이터분산아키텍처

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/07   »
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
글 보관함
반응형