Sharding 에 관하여

2025. 2. 23. 20:07·database

데이터베이스 샤딩(Sharding)은 대량의 데이터를 보다 효율적으로 관리하고, 성능을 향상시키기 위해 데이터를 여러 개의 작은 데이터베이스(Shard)로 나누어 저장하는 기법입니다. 대규모 시스템에서 확장성을 높이고, 데이터 처리 속도를 개선하기 위한 핵심적인 전략 중 하나입니다.


1. 데이터베이스 샤딩이란?

샤딩(Sharding)은 하나의 데이터베이스를 여러 개의 작은 데이터베이스(샤드)로 분할하는 기술입니다. 이는 단일 데이터베이스의 성능 한계를 극복하고, 트래픽이 증가하는 환경에서 **수평적 확장(Scale-Out)**을 가능하게 합니다.

1.1 샤딩의 필요성

  • 대량의 데이터 처리: 데이터 양이 급증하는 경우 단일 데이터베이스로 감당하기 어려움.
  • 성능 향상: 쿼리 처리 속도를 개선하고 병목현상을 방지.
  • 부하 분산: 여러 개의 노드에 데이터 부하를 나누어 서버 부하 감소.
  • 고가용성 및 장애 대응: 하나의 샤드가 다운되더라도 전체 시스템이 동작할 수 있음.

2. 샤딩의 작동 원리

  1. 샤딩 키(Sharding Key) 선정
    • 데이터를 나누는 기준이 되는 키를 정의.
    • 일반적으로 user_id, order_id, region과 같은 컬럼을 사용.
  2. 샤드(Shard) 생성
    • 데이터베이스를 여러 개로 나누어 배치.
    • 예: users_1, users_2, users_3 등의 테이블 분리.
  3. 샤딩 키를 기반으로 데이터 저장 및 검색
    • 새로운 데이터를 삽입할 때 샤딩 키를 기준으로 특정 샤드에 저장.
    • 데이터 조회 시 샤딩 키를 이용하여 올바른 샤드에서 검색.


 

3. 샤딩의 유형

3.1 범위 기반 샤딩 (Range-Based Sharding)

  • 특정 값의 범위에 따라 데이터를 분할하는 방식.
  • 예) user_id 1~10000은 Shard A, user_id 10001~20000은 Shard B.

✅ 장점:

  • 이해하기 쉽고, 구현이 간단함.

❌ 단점:

  • 특정 샤드에 데이터가 집중될 위험 (Hotspot 문제 발생 가능).
 

3.2 해시 기반 샤딩 (Hash-Based Sharding)

  • 해시 함수를 이용하여 데이터를 균등하게 분산.
  • 예) hash(user_id) % 3을 사용하여 Shard 0, Shard 1, Shard 2에 저장.

✅ 장점:

  • 데이터를 균등하게 분산할 수 있음.

❌ 단점:

  • 샤드 개수를 변경할 경우 재배치가 필요함 (데이터 마이그레이션 부담).
 

3.3 지리적 샤딩 (Geo-Based Sharding)

  • 사용자의 지리적 위치를 기준으로 데이터를 분산.
  • 예) 미국 유저는 Shard US, 유럽 유저는 Shard EU.

✅ 장점:

  • 지역별 트래픽 부하를 줄이고, 로컬에서 빠른 데이터 접근 가능.

❌ 단점:

  • 글로벌 서비스 운영 시 샤드 간 데이터 동기화가 어려울 수 있음.

4. 샤딩의 장단점

✅ 장점

  • 데이터베이스 확장성 증가: 물리적 서버 확장을 통해 성능 향상 가능.
  • 고가용성(High Availability): 일부 샤드가 장애가 나도 전체 시스템이 작동 가능.
  • 부하 분산: 여러 노드에 데이터가 분산되어 트래픽 부하 감소.

❌ 단점

  • 데이터 샤드 간 조인이 어렵다: 여러 샤드에서 데이터를 가져와야 하는 경우 성능 저하.
  • 샤딩 키 설계가 중요함: 잘못된 키 선택은 특정 샤드에 부하 집중 초래.
  • 운영 및 유지보수 복잡: 여러 개의 데이터베이스를 관리해야 함.

5. 마무리

  • 데이터베이스 샤딩은 대규모 트래픽과 데이터를 효율적으로 관리하는 핵심 기법이다.
  • 샤딩을 통해 성능 향상, 부하 분산, 고가용성을 제공하지만, 데이터 분산 및 유지보수의 어려움이 존재한다.
  • 적절한 샤딩 전략(범위 기반, 해시 기반, 지리적 샤딩)을 선택하는 것이 중요하다.

 

'database' 카테고리의 다른 글

index 에 관하여  (0) 2025.02.22
'database' 카테고리의 다른 글
  • index 에 관하여
heejunp
heejunp
희준개발
  • heejunp
    희준개발
    heejunp
  • 전체
    오늘
    어제
    • 분류 전체보기 (35)
      • java (16)
      • spring (1)
        • test (0)
      • web (1)
      • cloud (1)
      • database (2)
      • algorithm (7)
      • OS (2)
      • sonarqube (0)
      • ai (1)
      • 기타 (2)
      • 사고 (1)
      • go (0)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    heejunp
    Sharding 에 관하여
    상단으로

    티스토리툴바