내 잡다한 노트

Shard 란? 본문

DB

Shard 란?

peanutwalnut 2025. 1. 21. 21:19

Shard는 데이터베이스나 분산 시스템에서 데이터를 수평적으로 분할하여 저장하는 방법입니다. 데이터를 여러 **샤드(Shard)**라는 단위로 나누어 저장하고 처리함으로써, **확장성(Scalability)**과 **성능(Performance)**을 개선하고 데이터 용량을 효율적으로 관리할 수 있습니다.


1. Shard의 핵심 개념

  • 데이터 분할:
    • 데이터셋을 작은 조각(Shard)으로 나누어 여러 서버에 분산 저장.
    • 각 샤드는 전체 데이터의 부분 집합(subset)을 포함.
  • 독립적 관리:
    • 각 샤드는 독립적인 데이터베이스나 스토리지 단위로 작동하며, 샤드 간에는 데이터가 중복되지 않음.
  • 확장성:
    • 데이터가 증가하면 새로운 샤드를 추가하여 시스템 용량을 확장 가능.

2. Shard의 장점

  1. 수평적 확장성 (Horizontal Scalability):
    • 데이터를 여러 샤드로 나눔으로써, 더 많은 서버를 추가하여 처리량을 높이고 스토리지 용량을 확장할 수 있음.
  2. 성능 향상:
    • 각 샤드가 별도의 서버에서 동작하므로, 데이터 접근 및 처리 속도가 빨라짐.
    • 특정 샤드에 대한 쿼리는 해당 샤드에서만 수행되므로 처리 효율이 높아짐.
  3. 데이터 분리:
    • 데이터를 분리하여 저장하므로, 특정 데이터에 대한 트래픽이 다른 샤드에 영향을 미치지 않음.
    • 예: 사용자 ID별로 데이터를 분리하여, 특정 사용자 활동이 다른 사용자에게 영향을 주지 않음.
  4. 관리 용이성:
    • 샤드 간 독립성으로 인해, 장애 발생 시 특정 샤드만 복구하거나 유지보수 가능.

 

 

3. Shard의 단점

  1. 복잡한 관리:
    • 데이터 분할 및 샤드 배치 전략을 설계하고 유지보수해야 하므로, 운영 복잡도가 증가.
  2. 불균형 문제:
    • 샤드에 데이터가 균등하게 분배되지 않으면 특정 샤드에 부하가 집중될 수 있음(Hotspot 문제).
  3. 글로벌 쿼리 복잡성:
    • 샤드 전체를 대상으로 쿼리를 실행해야 하는 경우 성능이 저하될 수 있음.
  4. 데이터 이동 비용:
    • 샤드 크기를 재조정하거나 새 샤드를 추가할 때 데이터 이동 비용이 발생.

4. Shard 구성 전략

데이터를 어떻게 나눌지(Shard Key 선택)에 따라 샤드의 효율성이 결정됩니다. 대표적인 구성 방식은 다음과 같습니다.

4.1 Range Sharding

  • 기준: 특정 범위(range)에 따라 데이터를 나눔.
  • 예시:
    • 사용자 ID가 11000은 Shard A, 10012000은 Shard B.
  • 장점:
    • 간단하고 설계가 쉬움.
  • 단점:
    • 특정 범위의 데이터가 집중될 경우 불균형 발생 가능(Hotspot 문제).

4.2 Hash Sharding

  • 기준: 데이터의 특정 키 값(예: 사용자 ID)을 해시(Hash) 함수로 변환하여 샤드에 분배.
  • 예시:
    • Hash(user_id) % 4로 샤드 4개에 분배.
  • 장점:
    • 데이터를 균등하게 분배하여 불균형 문제를 줄임.
  • 단점:
    • 샤드 수를 변경할 경우(예: 샤드 추가) 전체 데이터를 재분배해야 함.

4.3 Geographic Sharding

  • 기준: 데이터의 지역(Region)에 따라 분리.
  • 예시:
    • 미국 사용자는 Shard A, 유럽 사용자는 Shard B.
  • 장점:
    • 지역 기반 요청에 빠르게 응답 가능.
  • 단점:
    • 지역별 데이터 분포가 고르지 않을 경우 불균형 문제 발생.

5. Shard의 사용 사례

  1. 분산 데이터베이스
    • MongoDB, MySQL 등에서 데이터를 분산 저장하여 확장성과 성능을 높임.
  2. 대규모 사용자 시스템
    • 소셜 네트워크, e-commerce 등에서 사용자 데이터를 샤드로 분리.
    • 예: 사용자 ID를 기준으로 데이터 분리.
  3. 로그 저장
    • 로그 데이터를 시간별로 샤드에 분리하여 관리.
    • 예: 하루 단위로 샤드를 생성.
  4. 클라우드 기반 스토리지
    • AWS S3, Google Cloud Storage 등은 내부적으로 샤딩 구조를 사용하여 대규모 데이터를 관리.

6. Shard와 관련된 개념

6.1 Shard Key

  • 데이터를 샤드에 분배할 때 사용하는 키.
  • 효율적인 샤드 키를 설계하면 데이터 분포 균형과 성능 최적화가 가능.

6.2 Shard Replication

  • 각 샤드를 복제하여 고가용성과 장애 복구를 지원.
  • 샤드가 장애를 겪더라도 복제본(replica)을 통해 서비스 지속 가능.

6.3 Shard Rebalancing

  • 데이터가 불균등하게 분포될 경우 샤드를 재조정하여 균형을 맞춤.
  • 자동 리밸런싱은 운영 효율성을 높이는 데 중요.

7. Shard와 Partition의 차이

  • Shard:
    • 데이터를 여러 서버(물리적/논리적)로 분산.
    • 주로 분산 시스템에서 사용.
  • Partition:
    • 단일 서버 내에서 데이터를 논리적으로 분할.
    • 스토리지 효율과 쿼리 최적화를 위해 사용.

'DB' 카테고리의 다른 글

DB에서 Lock 이란?  (0) 2025.01.21
트랜잭션 (Transaction)  (0) 2025.01.21
Grouping 이란?  (0) 2025.01.21
SQL 쿼리 기본적인 것들 정리 (SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER )  (0) 2025.01.21
순차 쓰기와 랜덤쓰기  (0) 2025.01.20