안녕하세요! MongoDB 올인 9일차입니다.
지난 8일차에는 MongoDB의 고가용성을 위한 복제 세트 구성과 장애 복구에 대해 자세히 알아보았습니다. 데이터의 안전성과 서비스 연속성을 확보하는 방법을 익혔죠.
오늘은 MongoDB가 자랑하는 또 다른 강력한 기능, 바로
샤딩(Sharding)
에 대해 깊이 파고들어 보겠습니다.
샤딩은 데이터베이스의
수평 확장(Horizontal Scaling)
을 가능하게 하여, 상상 이상의 대규모 데이터와 높은 트래픽을 처리할 수 있게 해주는 기술입니다.
데이터가 폭발적으로 증가하는 현대 애플리케이션 환경에서 샤딩은 선택이 아닌 필수가 될 수 있습니다. 오늘은 이 샤딩 클러스터를 어떻게 구성하고 운영하는지 그 원리와 단계를 살펴보겠습니다.
샤딩의 개념은 2일차 아키텍처 시간에도 간략히 언급되었습니다. 다시 한번 정리하면, 샤딩은 매우 큰 데이터셋을
샤드(Shard)
라고 불리는 작은 단위로 분할하여, 여러 MongoDB 서버(보통 복제 세트로 구성됨)에 분산 저장하고 처리하는 방식입니다.
샤딩이 필요한 주요 상황은 다음과 같습니다.
엄청난 양의 데이터
단일 서버(또는 단일 복제 세트)의 디스크 용량으로 감당하기 어려운 수준의 데이터가 쌓일 때.
높은 읽기/쓰기 처리량 요구
단일 서버의 CPU, 메모리, 네트워크 대역폭으로는 처리하기 힘든 수준의 동시 요청이 발생할 때.
지리적 데이터 분산
특정 지역 사용자의 데이터를 해당 지역과 가까운 서버에 저장하여 응답 속도를 개선하고 싶을 때 (Zone Sharding 활용).
단, 샤딩은 시스템 복잡도를 높이고 관리 포인트를 늘리기 때문에, 모든 상황에 샤딩이 필요한 것은 아닙니다.
충분한 성능 최적화(인덱싱, 쿼리 튜닝)와 하드웨어 업그레이드(수직 확장)로 해결할 수 있다면 그 방법을 먼저 고려하는 것이 좋습니다.
샤딩은 이러한 노력으로도 한계에 도달했을 때 선택하는 강력한 해결책입니다.
실제 운영 환경에서 샤드 클러스터를 구성하는 것은 복잡하고 신중한 계획이 필요합니다.
전체 클러스터를 로컬에서 완벽하게 구성하는 것은 리소스 문제로 어려울 수 있지만, 핵심 요소인 컨피그 서버 복제 세트 부분은 이전 복제 세트 실습과 유사하게 직접 구성해 볼 수 있습니다.
👨💻
Windows 사용자는 터미널로 명령 프롬프트(cmd) 또는 PowerShell을 사용하시면 됩니다. 경로에 공백이 포함된 경우 큰따옴표(" ")로 경로 전체를 감싸주세요.
각 컨피그 서버 인스턴스에 대한 설정 파일(mongod.conf 또는 mongod.cfg - Windows에서는 보통 .cfg 사용)을 준비합니다.
MongoDB 4.2 이상에서는 sharding.clusterRole: configsvr 설정을 사용하는 것이 권장됩니다.
각 폴더, 여기서는 csrs1에 mongod.conf 파일을 생성하고 다음 내용을 입력합니다.
# 스토리지 설정storage: dbPath: <각 OS에 맞는 csrs1 데이터 디렉토리 절대 경로> # macOS/Linux 예: /Users/your_username/mongodb/sharding/configsvr/csrs1/data # Windows 예: C:\mongodb\sharding\configsvr\csrs1\data # 시스템 로그 설정systemLog: destination: file path: <각 OS에 맞는 csrs1 로그 파일 절대 경로> # macOS/Linux 예: /Users/your_username/mongodb/sharding/configsvr/csrs1/log/mongod.log # Windows 예: C:\mongodb\sharding\configsvr\csrs1\log\mongod.log logAppend: true # 네트워크 설정net: port: 27019 # 컨피그 서버 포트 1 bindIp: 127.0.0.1 # 복제 설정replication: replSetName: "myConfigRS" # 컨피그 서버 복제 세트 이름 # 샤딩 설정 (MongoDB 4.2+ 권장)sharding: clusterRole: configsvr
🖐️
dbPath / path 부분에는 실제 환경에 맞게 절대 경로를 정확히 입력해주세요. your_username 부분도 실제 사용자 이름으로 변경해야 합니다.
컨피그 서버 2, 3 설정 파일은 위 csrs1 설정 파일을 복사하여, storage.dbPath, systemLog.path, net.port (각각 27020, 27021로 변경) 부분만 각 노드(csrs2, csrs3)에 맞게 수정합니다.
터미널 창(Windows는 명령 프롬프트 또는 PowerShell 창) 3개를 열고 각각 다음 명령어를 실행합니다.
macOS/Linux
# 터미널 1: 컨피그 서버 1 실행mongod --config ~/mongodb/sharding/configsvr/csrs1/mongod.conf # 터미널 2: 컨피그 서버 2 실행mongod --config ~/mongodb/sharding/configsvr/csrs2/mongod.conf # 터미널 3: 컨피그 서버 3 실행mongod --config ~/mongodb/sharding/configsvr/csrs3/mongod.conf
Windows
# 창 1: 컨피그 서버 1 실행mongod --config C:/mongodb/sharding/configsvr/csrs1/mongod.cfg # 창 2: 컨피그 서버 2 실행mongod --config C:/mongodb/sharding/configsvr/csrs2/mongod.cfg # 창 3: 컨피그 서버 3 실행mongod --config C:/mongodb/sharding/configsvr/csrs3/mongod.cfg
성공하면 ok: 1 이 반환되고, 프롬프트가 컨피그 서버 복제 세트의 프라이머리로 변경됩니다.
rs.status() 명령어로 상태를 확인할 수 있습니다.
여기까지 Windows와 macOS/Linux 환경에서 컨피그 서버 복제 세트 구성 실습이었습니다. 이제 샤드 클러스터의 핵심 두뇌가 준비되었습니다.
# 터미널 1: 샤드 1 멤버 1 실행mongod --config ~/mongodb/sharding/shard1/s1rs1/mongod.conf # 터미널 2: 샤드 1 멤버 2 실행mongod --config ~/mongodb/sharding/shard1/s1rs2/mongod.conf # 터미널 3: 샤드 1 멤버 3 실행mongod --config ~/mongodb/sharding/shard1/s1rs3/mongod.conf
Windows
# 창 1: 샤드 1 멤버 1 실행mongod --config C:/mongodb/sharding/shard1/s1rs1/mongod.cfg # 창 2: 샤드 1 멤버 2 실행mongod --config C:/mongodb/sharding/shard1/s1rs2/mongod.cfg # 창 3: 샤드 1 멤버 3 실행mongod --config C:/mongodb/sharding/shard1/s1rs3/mongod.cfg
오늘은 MongoDB의 수평 확장을 위한 핵심 기술인 샤딩(Sharding) 클러스터를 구성하고 운영하는 방법에 대해 알아보았습니다.
특히 샤드 클러스터의 두뇌 역할을 하는 컨피그 서버 복제 세트를 Windows와 macOS/Linux 환경에서 직접 구성해보는 실습을 통해 샤딩 구성의 첫 단추를 끼워보았습니다.
이어서 샤딩의 필요성과 주요 구성 요소, 그리고 샤딩 성공의 열쇠인 샤드 키 선택의 중요성과 샤딩 전략에 대해 배웠습니다.
샤딩은 복잡하지만, 제대로 이해하고 활용한다면 MongoDB를 통해 엄청난 규모의 데이터를 다루는 강력한 시스템을 구축할 수 있습니다.
다음 시간에는 MongoDB 고급 기능의 마지막 주제로, 우리 시스템의 데이터를 안전하게 지키는