DB/Mysql

[Mysql] 샤딩과 파티셔닝에 대해 알아보자!

hoonylab 2025. 4. 22. 13:40
728x90
반응형

MySQL에서의 샤딩(Sharding)과 파티셔닝(Partitioning) 개념 및 예제

대용량 데이터를 효율적으로 저장하고 처리하기 위한 방법으로 샤딩(Sharding)파티셔닝(Partitioning)이 자주 활용됩니다. 이 글에서는 이 두 개념을 MySQL을 중심으로 설명하고, 각각의 사용 사례 및 차이점을 정리합니다.

1. 샤딩(Sharding) 이란?

샤딩은 데이터를 수평으로 분산 저장하기 위해 데이터베이스 자체를 여러 서버로 나누는 방법입니다. 사용자의 ID, 지역, 생성일자 등 특정 기준(샤딩 키)을 사용하여 데이터를 물리적으로 다른 DB에 저장합니다.

샤딩 예시 (MySQL 기반)


DB A: 사용자 ID 1 ~ 99999
DB B: 사용자 ID 100000 ~ 199999
DB C: 사용자 ID 200000 이상

샤딩은 일반적으로 애플리케이션 코드 레벨에서 라우팅 로직을 통해 구현합니다.


// 예시: 사용자 ID에 따라 연결할 DB 분기
if (user_id < 100000) {
    connectTo('db_A');
} else if (user_id < 200000) {
    connectTo('db_B');
} else {
    connectTo('db_C');
}

2. 파티셔닝(Partitioning) 이란?

파티셔닝은 하나의 테이블 데이터를 내부적으로 분할하여 관리하는 방법입니다. 물리적으로는 하나의 데이터베이스에 있지만, 테이블은 논리적으로 여러 파티션으로 나뉘어 효율적으로 쿼리를 수행할 수 있습니다.

MySQL에서 RANGE 파티셔닝 예시

CREATE TABLE users (
  id INT,
  name VARCHAR(50),
  created_at DATE
)
PARTITION BY RANGE (YEAR(created_at)) (
  PARTITION p2020 VALUES LESS THAN (2021),
  PARTITION p2021 VALUES LESS THAN (2022),
  PARTITION p2022 VALUES LESS THAN (2023)
);

이 예시에서는 사용자의 가입 연도를 기준으로 데이터를 세 개의 파티션으로 나눕니다. SELECT 쿼리 시 파티션 프루닝이 적용되어 성능 향상 효과를 기대할 수 있습니다.

3. 샤딩 vs 파티셔닝 비교

항목 샤딩 (Sharding) 파티셔닝 (Partitioning)
데이터 분할 위치 여러 DB 서버 하나의 DB 내부
처리 주체 애플리케이션에서 라우팅 DB 엔진이 자동 처리
운영 복잡도 상대적으로 높음 낮음
수평 확장성 매우 우수 제한적
JOIN, 트랜잭션 샤드 간 처리 어려움 일관성 유지 용이

4. 각각의 선택 기준은?

  • 샤딩: 사용자 수가 많고, 수평 확장이 필요한 대규모 서비스
  • 파티셔닝: 한 서버 내에서 성능 최적화가 필요한 경우 (기간별 로그, 주문 이력 등)

5. 결론

샤딩과 파티셔닝은 모두 대용량 데이터 처리에서 매우 유용한 전략입니다. 하지만 그 적용 방식과 목적이 다르기 때문에, 서비스 규모, 데이터 구조, 트래픽 특성에 따라 적절한 방법을 선택하는 것이 중요합니다. MySQL에서도 파티셔닝은 기본적으로 지원하며, 샤딩은 애플리케이션 레벨의 설계가 필수입니다.

728x90
반응형