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
반응형