스터디
[DB] 샤딩(Sharding) 본문
샤딩(Sharding)은 데이터베이스나 데이터 저장소의 데이터를 여러 개의 작은 단위(Shard)로 나누어 저장하는 수평 분할 기술이다. 이를 통해 데이터의 부하를 분산시키고 확장성을 높이는 방법이다.
샤딩의 개념
데이터베이스에 저장되는 데이터가 점점 많아지면 단일 서버에 모든 데이터를 저장하고 처리하는 것이 불가능해질 수 있다. 이때 데이터를 여러 개의 서버나 노드에 분산 저장하면 각 노드가 처리해야 할 데이터의 양이 줄어들어 성능과 처리 속도를 개선할 수 있다.
이런 식으로 데이터를 나누어 저장하는 것을 샤딩(Sharding)이라고 하며, 나누어진 각 데이터의 단위를 샤드(Shard)라고 부른다.
샤딩의 주요 목적
- 수평 확장(Scalability): 데이터를 여러 노드에 나누어 저장하면, 데이터가 증가하더라도 새로운 노드를 추가하는 방식으로 시스템을 확장할 수 있다.
- 부하 분산(Load Balancing): 특정 노드에 부하가 몰리지 않도록 데이터를 여러 노드에 나누어 처리한다.
- 성능 향상(Performance): 각 노드가 일부 데이터만 처리하면 되므로 읽기 및 쓰기 작업의 속도가 빨라진다.
샤딩의 동작 방식
샤딩은 데이터를 나눌 때 특정 기준에 따라 데이터를 분할한다. 샤딩 키를 기준으로 데이터를 나누는데, 이 키가 데이터의 분배를 결정한다.
- 샤딩 키: 데이터를 어떤 기준으로 나눌지 결정하는 키이다. 예를 들어, 사용자 ID, 날짜, 지역 등 특정 컬럼을 기준으로 데이터를 나눌 수 있다.
- 샤드: 나누어진 데이터를 저장하는 개별 단위이다. 각 샤드는 독립적인 데이터 저장소로 동작한다.
샤딩의 예시
- 예를 들어, 사용자 데이터를 저장하는 시스템이 있다고 가정한다. 사용자 ID를 기준으로 데이터를 3개의 서버로 나눈다면
- 서버1: ID 1~1000번 사용자 데이터
- 서버2: ID 1001~2000번 사용자 데이터
- 서버3: ID 2001~3000번 사용자 데이터
샤딩의 장점
- 수평적 확장: 데이터를 여러 서버로 나눠 저장하므로 서버를 추가하여 쉽게 확장할 수 있다.
- 성능 개선: 각 노드가 일부 데이터만 처리하므로 읽기 및 쓰기 작업의 속도가 빨라진다.
- 부하 분산: 데이터를 여러 서버에 분산하므로 특정 서버에 트래픽이 몰리는 것을 방지한다.
샤딩의 단점
- 데이터 불균형: 샤딩 키를 잘못 설정하면 일부 샤드에 데이터가 몰리는 핫스팟 문제가 발생할 수 있다.
- 복잡성: 데이터를 여러 샤드에 나누어 저장하므로 데이터 일관성을 유지하거나 쿼리를 실행하는 과정이 복잡해진다.
- 관리 어려움: 데이터가 분산되어 있으므로 백업, 복구, 모니터링 등 데이터 관리가 어려울 수 있다.
- Cross-Shard 쿼리: 데이터가 여러 샤드에 나뉘어 저장되면 한 번의 쿼리로 모든 데이터를 조회하는 것이 어려울 수 있다.
샤딩이 사용되는 사례
- 대규모 데이터베이스: 사용자 수나 트래픽이 많은 서비스(예: 소셜 네트워크, 전자상거래 플랫폼)의 데이터를 분산 저장.
- Redis와 같은 인메모리 데이터 저장소: Redis는 샤딩을 통해 데이터를 여러 노드에 나누어 저장하고, 클러스터 모드로 수평 확장이 가능하다.
- NoSQL 데이터베이스: MongoDB, Cassandra 등은 기본적으로 샤딩을 지원하여 데이터를 분산 저장한다.
결론
샤딩은 데이터 저장소를 수평적으로 확장하여 성능과 처리 속도를 개선하는 기술이다. Redis, MySQL, MongoDB 등 다양한 데이터베이스 시스템에서 샤딩을 활용할 수 있으며, 대규모 데이터 및 트래픽을 처리해야 할 때 유용하다.
단, 샤딩을 사용할 때는 데이터 분할 기준(샤딩 키)과 데이터 불균형 문제를 주의 깊게 설계해야 한다.
'백엔드' 카테고리의 다른 글
[DB] Redis vs MySQL (2) | 2024.12.17 |
---|---|
[DB] Join (0) | 2023.05.20 |
CORS (0) | 2023.04.13 |
[JavaScript] 프로토타입과 클래스 (3) | 2023.04.10 |
[JavaScript] 싱글톤 패턴과 정적 클래스 (0) | 2023.04.07 |