MongoDB에서 대용량 데이터를 효율적으로 다루기 위해 꼭 알아야 할 핵심 개념이 있습니다. 바로 샤드 키(Shard Key)입니다. 잘못 선택하면 성능 저하, 올바르게 선택하면 수평 확장의 핵심! 이 글에서 샤드 키의 개념부터 선택 전략까지 정리합니다.
🔹 샤드 키란 무엇인가?
MongoDB에서 샤드 키(Shard Key)는 데이터를 여러 샤드(서버)에 분산 저장할 기준 필드입니다. 이는 MongoDB의 샤딩 구조에서 가장 중요한 개념이며, 성능과 확장성에 직접적인 영향을 줍니다.
예:
sh.shardCollection("mydb.users", { user_id: 1 });
위 명령은 user_id 필드를 기준으로 데이터를 분산하겠다는 의미입니다.
🔹 샤드 키 분할 방식: 범위 vs 해시
방식 | 설명 | 사용 예 |
Range Sharding | 샤드 키 값을 범위로 나눔 | { created_at: 1 } |
Hashed Sharding | 샤드 키 값을 해시하여 무작위 분산 | { user_id: "hashed" } |
- Range: 시간 순 정렬에 유리하나 데이터 쏠림(hotspot) 위험 존재
- Hashed: 고르게 분산되나 범위 쿼리 불리
🔹 좋은 샤드 키의 조건
조건 | 이유 |
높은 카디널리티 | 고유한 값이 많아야 고르게 분산됨 |
자주 쓰는 쿼리에 포함 | 쿼리 효율성 확보 |
쓰기 부하 분산 | 한 샤드에 트래픽 집중 방지 |
불변 필드 | 샤드 키는 한 번 정하면 변경 불가 |
🔹 샤드 키 선택 예시 비교
샤드 키 | 장점 | 단점 |
{ user_id: "hashed" } | 고르게 분산됨 | 범위 쿼리 불리 |
{ created_at: 1 } | 범위 조회에 유리 | 최근 데이터가 몰림 |
{ region: 1, user_id: 1 } | 지역별 분산 + 유저 기반 샤딩 | 복잡한 쿼리 설계 필요 |
🔹 샤드 키 잘못 선택 시 발생하는 문제
- 특정 샤드에 데이터/트래픽 몰림 → Hotspot 문제
- 샤드 키 없는 쿼리 → 모든 샤드에 브로드캐스트
- 변경 불가 → 초기 설계가 매우 중요
🔹 샤드 키 선택 전략 요약
- 쿼리 패턴 분석: 어떤 조건으로 데이터를 자주 조회하는가?
- 데이터 분포 시뮬레이션: 고르게 나뉘는가?
- 성장성 고려: 트래픽과 데이터 증가에 잘 대응하는가?
✅ 마무리: 샤드 키가 MongoDB 성능을 결정한다
MongoDB에서 샤드 키는 단순한 필드가 아닙니다.
잘못 설정하면 전체 성능이 급락할 수 있고, 잘 설정하면 무중단 확장도 가능하게 만들어줍니다.
초기 설계부터 신중하게 접근하고, 실 운영 쿼리 패턴을 꼭 반영해보세요.
'IT > 몽고DB' 카테고리의 다른 글
🚨 MongoDB TTL 인덱스 오작동 사례 분석! 자동 삭제가 안 되는 이유는? (0) | 2025.06.29 |
---|---|
⏰ MongoDB TTL 인덱스 vs cron-job 비교! 자동 삭제에 뭐가 더 좋을까? (0) | 2025.06.29 |
📌 MongoDB TTL 인덱스 완벽 정리! 자동 데이터 삭제로 성능 최적화하는 방법 (0) | 2025.06.29 |
🚀 MongoDB 샤딩이란? 대용량 데이터 처리의 핵심 전략 총정리! (1) | 2025.06.29 |
MongoDB readConcern과 readPreference 완벽 정리 — 일관성과 가용성의 핵심 키워드 (0) | 2025.06.29 |