데이터베이스

데이터베이스 샤딩(Database Sharding)에 대해 알아보겠습니다.

forward error correction Circle 2025. 10. 16. 08:30
반응형

Ⅰ. 데이터베이스 샤딩(Database Sharding) 이란?

 대용량 데이터를 효율적으로 저장하고 빠르게 처리하기 위해, 하나의 거대한 데이터베이스를 샤드(Shard)라고 불리는 여러 개의 작은 단위로 수평 분할(Horizontal Partitioning) 하는 기술입니다.
각 샤드는 독립된 데이터베이스로서, 전체 데이터의 일부만 담당하며 서로 다른 물리적 서버에 분산되어 저장됩니다.
즉, 모든 데이터를 한 서버에 집중시키지 않고 여러 서버에 나누어 저장함으로써 부하를 분산하고, 성능과 확장성, 내결함성(Fault Tolerance)을 동시에 확보할 수 있습니다.


Ⅱ. 데이터베이스 샤딩(Database Sharding) 동작 원리

 샤딩 시스템은 데이터를 어떻게 나눌지 결정하는 샤드 키(Shard Key)를 중심으로 동작합니다.
샤드 키는 데이터의 “분배 기준”으로, 애플리케이션에서 요청이 들어올 때 다음 순서를 거칩니다.
 ⅰ. 샤드 키 결정 → 어떤 데이터가 어느 샤드에 저장될지 결정
 ⅱ. 쿼리 라우팅(Query Routing) → 애플리케이션이 올바른 샤드로 요청을 전달
 ⅲ. 병렬 처리(Parallel Processing) → 여러 샤드가 동시에 쿼리를 수행
 ⅳ. 결과 집계(Result Aggregation) → 각 샤드의 결과를 통합해 최종 응답 생성
이 구조는 공유하지 않는 아키텍처(Shared-Nothing Architecture)에 기반하며, 각 샤드가 독립적으로 운영됩니다.
따라서 한 샤드에 장애가 발생하더라도 나머지 샤드는 정상적으로 작동합니다.

Ⅲ. 데이터베이스 샤딩(Database Sharding) 장점

구분 설명
성능 향상 각 샤드가 데이터의 일부만 처리하기 때문에 쿼리 응답 속도가 빨라집니다. 병렬 처리로 인해 대규모 요청도 효율적으로 분산됩니다.
확장성 강화 서버를 추가하여 샤드를 확장할 수 있어, 데이터 증가에 선형적으로 대응 가능합니다.
내결함성(Fault Tolerance) 특정 샤드가 장애를 겪어도 다른 샤드는 정상 동작하여 서비스 중단을 최소화합니다.
비용 절감 대형 서버 1대보다 다수의 중소형 서버로 운영하는 편이 비용 효율적일 수 있습니다.
효율적인 검색 데이터가 논리적으로 분할되어 있어, 원하는 정보에 더 빠르고 정확하게 접근할 수 있습니다

Ⅳ. 데이터베이스 샤딩(Database Sharding) 단점 및 한계

구분 설명
시스템 복잡성 증가 샤딩 구조를 반영하기 위해 데이터베이스 설계와 애플리케이션 로직이 복잡해집니다.
크로스 샤드 쿼리 문제 여러 샤드에 걸친 조인이나 트랜잭션은 성능 저하를 초래합니다.
핫스팟(Hotspot) 위험 잘못된 샤드 키 설계로 특정 샤드에 트래픽이 몰리면 성능 병목이 발생할 수 있습니다.
운영 관리 부담 백업, 스키마 변경, 모니터링 등의 관리가 더 복잡해집니다.
리샤딩(Resharding)의 어려움  데이터 재분배 과정에서 다운타임이 발생할 가능성이 있습니다.

Ⅴ. 데이터베이스 샤딩 전략( Database Sharding Strategies)

샤딩 방식은 데이터 특성과 사용 패턴에 따라 다르게 설계됩니다.

  범위 기반 샤딩
(Range-based Sharding)
해시 기반 샤딩
(Hash-based Sharding)
목록 기반 샤딩
(Directory-based Sharding)
지리 기반 샤딩
(Geo-partitioning)
설명 특정 값의 범위를 기준으로 데이터를 분할합니다. 해시 함수(Hash Function)를 사용하여 데이터를 균등하게 분산합니다. 룩업 테이블(Lookup Table)을 사용해 데이터와 샤드를 직접 매핑합니다. 데이터를 지역 단위로 분할하여 각 지역 서버에 저장합니다.
예시 고객 ID 1–10000 → 샤드 A 
   / 10001–20000 → 샤드 B
SHA256(User_ID) % 4
 → 4개의 샤드 중 하나로 데이터 분배
“국가코드=KR” → 샤드 A, 
“US” → 샤드 B
서울 → 샤드 A,
도쿄 → 샤드 B,
뉴욕 → 샤드 C
장점 설계가 단순하고 특정 범위의 데이터 접근이 효율적 데이터 분포가 고르게 유지되어 핫스팟 방지 유연하고 다양한 기준으로 분할 가능 지역 트래픽 처리 속도 향상, 지연(latency) 감소
단점 데이터가 한쪽으로 몰릴 경우(예: 최신 고객) 불균형 발생 샤드 수를 변경할 경우(리샤딩) 재분배가 복잡 룩업 테이블 관리 부담 및 성능 오버헤드 발생 지역 간 트랜잭션 처리 복잡

Ⅵ. 데이터베이스 샤딩(Database Sharding) 구현 절차 및 모범 사례

데이터베이스 샤딩은 단순한 기술 적용이 아닌 설계와 실행의 정교한 조합이 필요합니다.

단계명 주요 내용 세부설명 및 고려사항
1. 샤딩 전략 정의 데이터 특성(범위, 해시, 목록)에 따라 적합한 전략 선택 현재뿐 아니라 미래의 확장성까지 고려하여 선택
2. 샤드 키(Shard Key) 선택 데이터 균형 분배의 핵심 높은 카디널리티(Cardinality)를 가진 필드를 선택해 핫스팟 방지
3. 데이터 파티셔닝 및 마이그레이션 기존 데이터를 각 샤드에 분산 이관 배치 처리(batch process)와 롤백 메커니즘을 통해 안정성 확보
4. 애플리케이션 코드 수정 쿼리 내에 샤드 키 포함 샤드 장애 대응 로직 및 쿼리 라우팅 처리 구현
5. 트랜잭션 관리 여러 샤드에 걸친 트랜잭션 처리 분산 트랜잭션 관리(2PC 등) 적용, 성능 vs 일관성(consistency) 균형 필요
6. 모니터링 및 최적화 시스템 상태 및 부하 관리 쿼리 성능, 샤드 부하 분포, 네트워크 지연 주기적 관찰 및 리샤딩 계획적 수행
7. 문서화 아키텍처 및 설계 기록 샤딩 구조, 키 설계, 예외 처리 로직 등을 문서화하여 향후 확장 및 문제 해결 기준 자료로 활용

Ⅶ. 샤딩 vs 파티셔닝(Partitioning)

구분 샤딩(Sharding) 파티셔닝(Partitioning)
운영 범위 여러 서버(노드)에 분산 단일 서버 내부에서 분할
목적 수평적 확장성과 고성능 데이터 관리 및 쿼리 최적화
데이터 위치 독립적인 DB 인스턴스 동일한 DB 내의 파티션
복잡성  상대적으로 높음 (분산 처리 필요) 낮음 (단일 노드 내 관리)

* 모든 샤딩은 파티셔닝이지만, 모든 파티셔닝이 샤딩은 아닙니다.
샤딩은 파티셔닝의 확장된 형태로, 여러 서버로 데이터를 나누어 확장성(Scalability)을 극대화합니다.

Ⅷ. 핫스팟(Hotspot) 문제와 예방법

 ⅰ. 핫스팟(Hotspot) 문제 
 샤딩 환경에서 데이터가 균등하게 분포되지 않으면 특정 샤드에 부하가 집중되어 핫스팟이 발생합니다.
이는 잘못된 샤드 키 설계나 특정 데이터 패턴(예: 특정 날짜, 인기 사용자 등) 때문에 생기며, 전체 성능 저하로 이어질 수 있습니다.
 ⅱ.  핫스팟(Hotspot) 문제 예방 방법
  1) 카디널리티 높은 키 선택
  2) 해시 기반 분산 적용
  3) 트래픽 패턴을 고려한 샤드 리밸런싱

반응형