본문으로 이동
메뉴 여닫기
환경 설정 메뉴 여닫기
개인 메뉴 여닫기
로그인하지 않음
지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.

샤딩(Sharding)은 큰 데이터 집합을 샤드 키 값에 따라 여러 조각(샤드)으로 수평 분할하고, 각 샤드를 서로 다른 서버(노드)에 두어 저장량과 처리 부하를 나누는 데이터베이스 확장 기법이다.

데이터가 서버 한 대의 용량이나 처리 능력을 넘으면 더 좋은 서버로 바꾸는 수직 확장과, 서버를 여러 대로 늘리는 수평 확장 가운데 하나를 고른다. 샤딩은 수평 확장의 방법이다. MongoDB 는 샤딩을 데이터를 여러 기계에 나누어 두는 방법으로 정의하고, 수직 확장은 하드웨어가 허용하는 한계가 있으며 수평 확장은 각 서버가 전체 부하의 일부만 맡아 비싼 서버 한 대보다 쌀 수 있지만 인프라와 운영이 복잡해진다고 설명한다.[1] 엘마스리(Elmasri)와 나바테(Navathe)도 MongoDB 샤딩을 문서들을 서로 겹치지 않는 조각으로 나누는 수평 분할로 설명하며, 필요할 때 노드를 더하고 샤드를 여러 노드에 두어 부하를 분산한다고 적는다.[2]

  • 샤드 키 - 문서(행)를 어느 샤드에 둘지 정하는 필드. 하나 또는 여러 필드로 만든다
  • 분할 방식 - 키 값의 범위로 나누는 범위 샤딩과, 키의 해시 값으로 나누는 해시 샤딩이 있다. 범위 방식은 범위 질의에 유리하고, 해시 방식은 데이터를 고르게 흩는다
  • 라우터 - 질의를 받아 해당 샤드로 보낸다. MongoDB 에서는 mongos 가 이 일을 하고, 샤드 키가 든 질의는 해당 샤드로만 보내며 샤드 키가 없는 질의는 모든 샤드에 뿌렸다가 결과를 모은다[1]
  • 메타데이터 저장소 - 어떤 키 범위가 어느 샤드에 있는지 적어 둔다(MongoDB 의 config server)
  • 균형 조정 - 샤드 사이 데이터 양이 치우치면 조각(chunk)을 옮겨 고르게 맞춘다[1]

복제와 구별하기

편집 원본 편집
구분 샤딩 복제
하는 일 데이터를 나누어 서로 다른 노드에 둔다 같은 데이터를 여러 벌 둔다
늘어나는 것 저장 용량, 쓰기·읽기 처리량 가용성, 고장 허용, 읽기 용량
노드 하나가 고장 나면 그 샤드의 데이터를 잃는다. 그래서 샤드마다 복제를 함께 쓴다 다른 사본으로 계속 서비스한다
  • 실제 시스템은 둘을 함께 쓴다. MongoDB 는 샤드와 config server 를 각각 복제 집합(replica set)으로 배치해 가용성을 높인다[1]
  • 관계형 분산 데이터베이스의 수평 단편화와 같은 생각이며, 샤드마다 위치를 몰라도 질의할 수 있게 하는 것이 위치 투명성이다
  • 블록체인에서도 네트워크를 여러 샤드로 나눠 거래를 병렬로 처리해 확장성을 높이는 데 샤딩을 쓴다
  1. ↑ 1.0 1.1 1.2 1.3 「Sharding」, MongoDB Manual, https://www.mongodb.com/docs/manual/sharding/, 확인일: 2026-11-04.
  2. ↑ Ramez Elmasri, Shamkant B. Navathe, 「Chapter 24: NOSQL Databases and Big Data Storage Systems」 강의 슬라이드, Pearson, 2016(Purdue University CS448 게시본), https://www.cs.purdue.edu/homes/bb/cs448_Fall2017/lpdf/Chapter24.pdf, 확인일: 2026-11-04.