MongoDB를 사용한 데이터베이스 샤딩을 위한 개발자 가이드

개발자로서, 애플리케이션의 데이터베이스가 많은 양의 데이터를 처리해야 하는 상황에 직면할 수 있습니다. 이러한 데이터를 효과적으로 관리하는 한 가지 방법은 데이터베이스 샤딩을 통해 데이터를 여러 서버나 데이터베이스에 수평으로 분산하는 기술입니다. 샤딩은 큰 데이터베이스를 작고 관리하기 쉬운 조각인 샤드로 나누어 성능, 확장성, 신뢰성을 향상시킬 수 있습니다.

이 기사에서는 데이터베이스 샤딩의 개념을 탐구하고, 다양한 샤딩 전략을 논의하며, 인기 있는 NoSQL 데이터베이스인 MongoDB에서 샤딩을 구현하는 단계별 가이드를 제공합니다.

데이터베이스 샤딩 이해하기

데이터베이스 샤딩은 큰 데이터 세트를 작은 서브세트인 샤드로 분할하는 것을 포함합니다. 각 샤드는 전체 데이터의 일부를 포함하며 다른 샤드로부터 독립적으로 작동합니다. 전체 데이터 세트가 아닌 단일 샤드에서 쿼리와 트랜잭션을 실행함으로써 응답 시간이 빨라지고 리소스가 보다 효율적으로 사용됩니다.

샤딩 전략

애플리케이션의 요구 사항에 따라 선택할 수 있는 여러 샤딩 전략이 있습니다.

  • 범위 기반 샤딩: 데이터는 특정 범위의 값을 기반으로 분할됩니다(예: Shard 1에 ID 1-1000의 사용자, Shard 2에 ID 1001-2000의 사용자).
  • 해시 기반 샤딩: 특정 속성(예: 사용자 ID)에 해시 함수를 적용하고, 결과에 따라 데이터가 어느 샤드에 속하는지 결정합니다. 이 방법은 샤드 간에 데이터의 균형 있는 분배를 보장합니다.
  • 디렉터리 기반 샤딩: 데이터가 어느 샤드에 속하는지 결정하기 위해 별도의 조회 서비스나 테이블을 사용합니다. 이 접근 방식은 샤드를 추가하거나 제거하는 데 유연성을 제공하지만 복잡성의 추가 층을 야기할 수 있습니다.
  • 지리적 위치 기반 샤딩: 사용자나 리소스의 지리적 위치를 기반으로 데이터를 분할하여 지리적으로 분산된 사용자의 대기 시간을 줄입니다.

MongoDB에서 샤딩 구현

MongoDB는 즉시 사용 가능한 샤딩을 지원하므로 애플리케이션에서 샤딩을 구현하려는 개발자들에게 훌륭한 선택입니다. MongoDB에서 샤딩을 설정하는 단계별 가이드입니다. 이 가이드에서는 JavaScript 구문을 사용하여 명령을 작성하고 데이터베이스와 상호 작용하는 MongoDB 쉘을 사용합니다.

1. 구성 서버 설정

구성 서버는 클러스터와 샤드 위치에 대한 메타데이터를 저장합니다. 프로덕션 환경에서는 세 개의 구성 서버 복제 세트를 사용하세요.

Shell

 

mongod --configsvr --dbpath /data/configdb --port 27019 --replSet configReplSet

2. 구성 서버 복제 세트 초기화

이 명령은 포트 27019에서 실행 중인 MongoDB 인스턴스에 새 복제 세트를 시작합니다.

Shell

 

mongo --port 27019

> rs.initiate()

3. 샤드 서버 설정

--shardsvr 옵션과 고유한 --dbpath를 사용하여 각 샤드 서버를 시작합니다.

Shell

 

mongod --shardsvr --dbpath /data/shard1 --port 27018

mongod --shardsvr --dbpath /data/shard2 --port 27017

4. mongos 프로세스 시작

mongos 프로세스는 클라이언트와 샤드드 클러스터 사이의 라우터 역할을 합니다.

Shell

 

mongos --configdb configReplSet/localhost:27019

5. mongos 인스턴스에 연결하고 샤드 추가하기

Shell

 

mongo
> sh.addShard("localhost:27018")
> sh.addShard("localhost:27017")

6. 특정 데이터베이스 및 컬렉션에 대한 샤딩 활성화

Shell

 

> sh.enableSharding("myDatabase")
> sh.shardCollection("myDatabase.myCollection", {"userId": "hashed"})

이 예시에서는 두 개의 샤드로 MongoDB 샤드드 클러스터를 설정하고 userId 필드에 대해 해시 기반 샤딩을 사용했습니다. 이제 "myCollection" 컬렉션의 데이터는 두 개의 샤드에 걸쳐 분산되어 성능과 확장성이 향상됩니다.

결론

데이터베이스 샤딩은 애플리케이션에서 대용량 데이터셋을 관리하기 위한 효과적인 기술입니다. 다양한 샤딩 전략을 이해하고 MongoDB를 사용하여 구현하면 애플리케이션의 성능, 확장성, 안정성을 크게 향상시킬 수 있습니다. 이 가이드를 통해 이제 MongoDB에서 샤딩을 설정하고 자신의 프로젝트에 적용하는 방법에 대한 확실한 이해를 가질 수 있을 것입니다.

학습 즐거워!!

Source:
https://dzone.com/articles/a-developers-guide-to-database-sharding-with-mongo