🌳 고급 데이터베이스
데이터베이스 샤딩 전략은?
쉽게 이해하기
도서관 책이 너무 많아지면 한 건물에 다 못 담죠? 그래서 도서관을 여러 동으로 나눕니다. 1동은 문학, 2동은 과학, 3동은 역사처럼요. 샤딩도 비슷해요. 데이터가 너무 많아지면 한 데이터베이스에 못 담으니, 여러 데이터베이스로 나눠서 저장하는 겁니다.
핵심 정리
데이터를 여러 데이터베이스에 나눠 저장하는 방법과 전략입니다.
자세히 알아보기
샤딩은 데이터를 여러 데이터베이스 서버에 분산 저장하는 기술입니다. 데이터가 수십억 건 이상 쌓이면 한 서버로는 감당이 안 되거든요. 쿼리 속도도 느려지고, 디스크 용량도 부족해집니다. 샤딩을 하면 데이터를 나눠서 저장하고, 병렬로 처리할 수 있어 성능이 좋아집니다.
샤딩 전략은 크게 세 가지입니다. 첫째, Range-based 샤딩은 데이터 범위로 나눕니다. 예를 들어 사용자 ID 1~100만은 샤드1, 100만~200만은 샤드2에 저장하는 식이죠. 간단하지만, 특정 샤드에 데이터가 몰릴 수 있습니다. 둘째, Hash-based 샤딩은 키 값을 해시해서 샤드를 결정합니다. 데이터가 고르게 분산되지만, 범위 쿼리가 어렵습니다. 셋째, Directory-based 샤딩은 별도의 룩업 테이블을 두고, 어느 샤드에 데이터가 있는지 관리합니다. 유연하지만 룩업 테이블이 병목이 될 수 있어요.
실무에서는 Hash-based 샤딩을 가장 많이 씁니다. 사용자 ID를 해시해서 샤드를 정하는 식이죠. 하지만 샤딩은 복잡합니다. JOIN이 어려워지고, 트랜잭션 처리가 까다로워집니다. 샤드를 추가하거나 제거할 때 데이터 재분배도 필요합니다. Consistent Hashing을 쓰면 이 문제를 줄일 수 있지만, 여전히 복잡합니다.
샤딩을 고려하기 전에 먼저 수직 확장(더 좋은 서버)과 읽기 레플리카를 써보는 게 좋습니다. 샤딩은 정말 데이터가 방대하고, 다른 방법으로 안 될 때 마지막 카드로 꺼내는 게 현명합니다.