샤딩(Sharding)과 파티셔닝(Partitioning)은 데이터베이스 관리와 분산 시스템에서 대규모 데이터를 효율적으로 저장하고 처리하기 위해 사용되는 기술. 혼용되기도 하지만 실제로는 목적과 구현 방식에서 차이가 있음.
파티셔닝은 단일 데이터베이스 내에서 데이터를 논리적으로 분할하여 관리하는 방법. 이는 대규모 테이블을 여러 개의 작은 파티션으로 나누어 저장함으로써 데이터 접근성과 관리 효율성을 높이는 기술.
수평 파티셔닝(Horizontal Partitioning) : 테이블의 행(Row)을 기준으로 데이터를 분할. 예를 들어 고객 데이터를 지역별로 나눔.
수직 파티셔닝(vertical Partitioning) : 테이블의 열(Column)을 기준으로 데이터를 분할. 자주 사용하는 열과 그렇지 않은 열을 분리하여 저장함으로써 쿼리 성능을 향상시킬 수 있음
하이브리드 파티셔닝(Hybrid Partitioning) : 수평과 수직 파티셔닝을 결합하여 사용.
특정 파티션만 조회하면 전체 데이터 스캔을 줄일 수 있어 쿼리 속도 빨라짐
데이터의 일부분만 백업하거나 복구할 수 있어 관리가 편함
데이터를 논리적으로 분할하여 저장함으로써 데이터 구조를 체계적으로 유지.
but
샤딩은 데이터를 여러 개의 독립된 데이터베이스 서버(Shard)에 분산 저장하는 기법입니다. 이는 대규모 데이터베이스의 확장성을 높이고, 처리 능력을 분산시켜 성능을 향상시키기 위해 사용.
수평적 확장 : 데이터베이스 서버를 추가하여 시스템 처리 능력 확장
독립된 샤드 : 각 샤드는 독립적으로 운영되며 다른 샤드와는 별개의 데이터베이스로 간주
데이터 분배 양식 : 해시 기반, 범위 기반, 디렉터리 기반 등 다양한 방식으로 데이터를 분배
필요에 따라 샤드를 추가하여 시스템을 쉽게 확장할 수 있음
하나의 샤드에 문제가 발생해도 전체 시스템에 영향을 미치지 않음
여러 샤드에 걸쳐 데이터를 분산 저장함으로써 병렬 처리가 가능
but
파티셔닝
샤딩
신입 또는 취업 준비 중인 Java Spring 백엔드 개발자로서 샤딩(Sharding)과 파티셔닝(Partitioning)에 대해 실습할 수 있는 몇 가지 실질적인 방법과 프로젝트 아이디어를 소개합니다. 이를 통해 데이터베이스 분산 처리와 최적화를 경험할 수 있습니다.
MySQL에서 제공하는 파티셔닝 기능을 사용하여 데이터 분할 및 조회 성능 최적화를 실습해볼 수 있습니다.
목표
실습 방법
코드 샘플
CREATE TABLE logs (
id INT NOT NULL,
event_date DATE NOT NULL,
event_type VARCHAR(50),
PRIMARY KEY (id, event_date)
)
PARTITION BY RANGE (YEAR(event_date)) (
PARTITION p_2023 VALUES LESS THAN (2024),
PARTITION p_2024 VALUES LESS THAN (2025),
PARTITION p_future VALUES LESS THAN MAXVALUE
);
샤딩은 일반적으로 데이터베이스 클러스터링과 연동되며, Sharding Proxy나 샤딩 프레임워크를 사용해 구현할 수 있습니다.
목표
실습 방법
코드 샘플
sharding:
tables:
user:
actual-data-nodes: ds${0..1}.user_${0..1}
table-strategy:
inline:
sharding-column: user_id
algorithm-expression: user_${user_id % 2}
database-strategy:
inline:
sharding-column: user_id
algorithm-expression: ds${user_id % 2}
필수 기술 스택
실습 도구
연습 목표
실습 후에는 각 구현의 장단점을 블로그에 기록하거나 포트폴리오 프로젝트로 정리하면 취업 준비에 큰 도움이 됩니다. 필요한 경우 추가적인 예제 코드나 가이드를 요청하셔도 좋습니다! 😊