연습: Cosmos DB로 MongoDB 워크로드 마이그레이션
온도 데이터를 수집하는 IoT 센서가 있는 유틸리티 회사에 근무하고 있습니다. 온도는 타임스탬프와 함께 MongoDB 데이터베이스에 로그됩니다. 디바이스마다 고유 ID가 있습니다. 이러한 디바이스를 시뮬레이션하여 데이터베이스에 데이터를 저장하는 MongoDB 애플리케이션을 실행합니다. 사용자가 각 디바이스에 대한 통계 정보를 쿼리할 수 있도록 하는 두 번째 애플리케이션도 사용합니다. MongoDB에서 Cosmos DB로 데이터베이스를 마이그레이션한 후에는 애플리케이션 둘 다 Cosmos DB에 연결하도록 구성하고 계속 제대로 작동하는지 확인합니다.
이 연습에서는 기존 MongoDB 데이터베이스를 가져와서 Cosmos DB로 마이그레이션합니다. Azure Database Migration Service를 사용합니다. MongoDB 데이터베이스를 사용하는 기존 애플리케이션을 Cosmos DB 데이터베이스에 연결하도록 다시 구성하는 방법도 확인할 수 있습니다.
중요
Azure Data Migration Service는 체험용 Azure 샌드박스 환경에서 지원되지 않습니다. 자신의 개인 구독에서 이러한 단계를 수행할 수도 있고 단순히 다음 내용을 보고 데이터베이스 마이그레이션 방법을 알아볼 수도 있습니다.
Azure에서 MongoDB 데이터베이스 생성
먼저 온도 디바이스에서 캡처된 데이터를 보관할 MongoDB 데이터베이스를 생성합니다.
리소스 그룹 및 가상 네트워크 생성
웹 브라우저를 사용하여 새 탭을 열고 Azure Portal로 이동합니다.
Azure Portal에서 리소스 그룹을 선택하고 +추가를 선택합니다.
리소스 그룹 생성 페이지에서 다음 세부 정보를 입력합니다.
속성 값 Subscription <사용자의 구독> 리소스 그룹 mongodbrg 지역 가장 가까운 위치를 선택합니다. 검토 + 생성를 선택한 다음, 생성를 선택합니다. 리소스 그룹이 만들어질 때까지 기다립니다.
Azure Portal 메뉴에서 + 리소스 생성를 선택합니다.
새로 생성 페이지의 Marketplace 검색 상자에 가상 네트워크를 입력하고 Enter 키를 누릅니다.
Virtual Network 페이지에서 생성를 선택합니다.
가상 네트워크 생성 페이지에서 다음 세부 정보를 입력하고 다음: IP 주소를 선택합니다.
속성 값 리소스 그룹 mongodbrg 이름 databasevnet 지역 리소스 그룹에 대해 지정한 것과 동일한 위치를 선택합니다. IP 주소 페이지에서 IPv4 주소 공간을 10.0.0.0/24로 설정합니다.
기본 서브넷을 선택하고 서브넷 제거를 선택합니다.
+ 서브넷 추가를 선택합니다. 서브넷 추가 창에서 서브넷 이름을 기본값으로 설정하고 서브넷 주소 범위를 10.0.0.0/28로 설정한 다음, 추가를 선택합니다.
IP 주소 페이지에서 다음: 보안을 선택합니다.
보안 페이지에서 Azure DDoS 네트워크 보호가 사용 안 함으로 설정되었고 방화벽이 사용 안 함으로 설정되었는지 확인합니다. 검토 + 만들기를 선택합니다.
가상 네트워크 생성 페이지에서 생성를 선택합니다. 가상 네트워크가 만들어질 때까지 기다린 다음, 계속합니다.
MongoDB 데이터베이스 서버 생성
Azure Portal 메뉴에서 + 리소스 생성를 선택합니다.
마켓플레이스 검색 상자에 Ubuntu를 입력하고 Enter 키를 누릅니다.
마켓플레이스 페이지에서 Ubuntu Server 18.04 LTS를 선택합니다.
Ubuntu Server 18.04 LTS 페이지에서 생성를 선택합니다.
가상 머신 생성 페이지에서 다음 세부 정보를 입력합니다.
속성 값 리소스 그룹 mongodbrg 가상 머신 이름 mongodbserver 지역 리소스 그룹에 대해 지정한 것과 동일한 위치를 선택합니다. 가용성 옵션 인프라 중복 필요 없음 이미지 Ubuntu Server 18.04 LTS - Gen1 Azure Spot 인스턴스 선택 취소됨 크기 Standard A1_v2 인증 유형 암호 사용자 이름 azureuser 암호 Pa55w.rdPa55w.rd 암호 확인 Pa55w.rdPa55w.rd 공용 인바운드 포트 선택한 포트 허용 인바운드 포트 선택 SSH(22) 다음: 디스크 >를 선택합니다.
디스크 페이지에서 설정을 기본값으로 그대로 두고 다음: 네트워킹 >을 선택합니다.
네트워킹 페이지에서 다음 세부 정보를 입력합니다.
속성 값 가상 네트워크 databasevnet 서브넷 기본값(10.0.0.0/28) 공용 IP (신규) mongodbserver-ip NIC 네트워크 보안 그룹 추가 고급 네트워크 보안 그룹 구성 (신규) mongodbserver-nsg 가속된 네트워킹 선택 취소됨 부하 분산 선택 취소됨 검토 + 생성 >를 선택합니다.
확인 페이지에서 생성를 선택합니다.
가상 머신이 배포될 때까지 기다린 다음, 계속합니다.
Azure Portal 메뉴에서 모든 리소스를 선택합니다.
모든 리소스 페이지에서 mongodbserver-nsg를 선택합니다.
mongodbserver-nsg 페이지의 설정에서 인바운드 보안 규칙을 선택합니다.
mongodbserver-nsg - 인바운드 보안 규칙 페이지에서 + 추가를 선택합니다.
인바운드 보안 규칙 추가 창에서 다음 세부 정보를 입력합니다.
속성 값 원본 모두 원본 포트 범위 * 대상 모두 대상 포트 범위 8080 프로토콜 임의 작업 허용 우선 순위 1030 이름 Mongodb-port 설명 클라이언트에서 MongoDB에 연결하는 데 사용하는 포트 추가를 선택합니다.
참고
이 연습에서는 포트 8080을 사용하도록 MongoDB를 구성합니다. 이렇게 하는 이유는 이 환경의 보안 제약 조건 때문입니다. 일반적으로 기본 MongoDB 포트인 27017을 사용합니다.
MongoDB 설치
Azure Portal 메뉴에서 모든 리소스를 선택합니다.
모든 리소스 페이지에서 mongodbserver-ip를 선택합니다.
mongodbserver-ip 페이지에서 IP 주소를 기록해 둡니다.
Azure Portal 맨 위에 있는 도구 모음에서 Cloud Shell을 선택합니다.
탑재된 스토리지가 없음 메시지 상자가 나타나면 스토리지 생성를 선택합니다.
Cloud Shell이 시작되면 Cloud Shell 창 위의 드롭다운 목록에서 Bash를 선택합니다.
Cloud Shell에서 다음 명령을 입력하여 mongodbserver 가상 머신에 연결합니다. <ip 주소>를 mongodbserver-ip IP 주소 값으로 바꿉니다.
ssh azureuser@<ip address>
프롬프트에서 예를 입력하여 연결을 계속합니다.
암호 Pa55w.rdPa55w.rd를 입력합니다.
패키지 데이터베이스를 다시 로드하려면 다음 명령을 입력합니다.
sudo apt-get update
MongoDB를 설치하려면 다음 명령을 입력합니다.
sudo apt-get install -y mongodb
이 설치는 패키지 설치, 준비, 압축 풀기에 대한 메시지를 사용하여 진행해야 합니다. 설치가 완료되는 데는 시간이 몇 분 정도 걸릴 수 있습니다.
MongoDB 데이터베이스 구성
기본적으로 Mongo DB 인스턴스는 인증 없이 실행되도록 구성됩니다. 이 작업에서는 MongoDB가 다른 컴퓨터의 연결을 허용할 수 있게 로컬 네트워크 인터페이스에 바인딩하도록 구성합니다. 또한 인증을 사용하도록 설정하고 마이그레이션을 수행하는 데 필요한 사용자 계정을 생성합니다. 마지막으로, 테스트 애플리케이션에서 데이터베이스를 쿼리하는 데 사용할 수 있는 계정을 추가합니다.
MongoDB 구성 파일을 열려면 다음 명령을 실행합니다.
sudo nano /etc/mongodb.conf
파일에서 bind_ip 설정을 찾아 0.0.0.0으로 설정합니다.
port 설정을 찾아 8080으로 설정합니다.
구성 파일을 저장하려면 Esc 키를 누르고 Ctrl + X를 누릅니다. y 키를 누르고 Enter 키를 눌러 수정된 버퍼를 저장합니다.
MongoDB 서비스를 다시 시작하고 변경 내용을 적용하려면 다음 명령을 입력합니다.
sudo service mongodb restart
MongoDB 서비스에 연결하려면 다음 명령을 입력합니다.
mongo --host 127.0.0.1:8080
> 프롬프트에서 admin 데이터베이스로 전환하려면 다음 명령을 실행합니다.
use admin;
관리자라는 새 사용자를 만들려면 다음 명령을 실행합니다. 명령은 한 줄에 입력할 수도 있고 가독성을 높이기 위해 여러 줄에 입력할 수도 있습니다. 이 명령은
mongo
프로그램이 세미콜론에 도달하면 실행됩니다.db.createUser( { user: "administrator", pwd: "Pa55w.rd", roles: [ { role: "userAdminAnyDatabase", db: "admin" }, { role: "clusterMonitor", db:"admin" }, "readWriteAnyDatabase" ] } );
mongo
프로그램을 끝내려면 다음 명령을 입력합니다.exit;
새 관리자 계정으로 MongoDB에 연결하려면 다음 명령을 실행합니다.
mongo admin -u "administrator" -p "Pa55w.rd" --host 127.0.0.1:8080
DeviceData 데이터베이스로 전환하려면 다음 명령을 실행합니다.
use DeviceData;
앱에서 데이터베이스에 연결하는 데 사용할 deviceadmin이라는 사용자를 만들려면 다음 명령을 실행합니다.
db.createUser( { user: "deviceadmin", pwd: "Pa55w.rd", roles: [ { role: "readWrite", db: "DeviceData" } ] } );
mongo
프로그램을 끝내려면 다음 명령을 입력합니다.exit;
다음 명령을 실행하여 mongodb 서비스를 다시 시작합니다. 서비스가 오류 메시지 없이 다시 시작되는지 확인합니다.
sudo service mongodb restart
다음 명령을 실행하여 이제 deviceadmin 사용자로 mongodb에 로그인할 수 있는지 확인합니다.
mongo DeviceData -u "deviceadmin" -p "Pa55w.rd" --host 127.0.0.1:8080
> 프롬프트에서 다음 명령을 실행하여 mongo 셸을 끝냅니다.
exit;
Bash 프롬프트에서 다음 명령을 실행하여 MongoDB 서버에서 연결을 끊고 Cloud Shell로 돌아갑니다.
exit
MongoDB 데이터베이스 채우기 및 쿼리
이제 MongoDB 서버 및 데이터베이스가 만들어졌습니다. 다음 단계는 이 데이터베이스에서 데이터를 채우고 쿼리할 수 있는 애플리케이션 예제를 보여 주는 것입니다.
앱을 빌드하고 실행하여 MongoDB 데이터베이스 채우기
Azure Cloud Shell에서 다음 명령을 실행하여 샘플 코드를 다운로드합니다.
git clone https://github.com/MicrosoftLearning/DP-060T00A-Migrating-your-Database-to-Cosmos-DB migration-workshop-apps
migration-workshop-apps/MongoDeviceDataCapture/MongoDeviceCapture 폴더로 이동합니다.
cd ~/migration-workshop-apps/MongoDeviceDataCapture/MongoDeviceDataCapture
코드 편집기를 사용하여 TemperatureDevice.cs 파일을 검사합니다.
code TemperatureDevice.cs
이 파일의 코드에는 데이터를 캡처하여 MongoDB 데이터베이스에 저장하는 온도 디바이스를 시뮬레이션하는 TemperatureDevice라는 클래스가 있습니다. .NET Framework용 MongoDB 라이브러리를 사용합니다. TemperatureDevice 생성자는 애플리케이션 구성 파일에 저장된 설정을 사용하여 데이터베이스에 연결합니다. RecordTemperatures 메서드는 읽기를 생성하고 데이터베이스에 씁니다.
코드 편집기를 닫고 ThermometerReading.cs 파일을 엽니다.
code ThermometerReading.cs
이 파일에는 애플리케이션이 데이터베이스에 저장하는 문서의 구조가 표시됩니다. 각 문서에는 다음 필드가 포함되어 있습니다.
- 개체 ID. 각 문서를 고유하게 식별하기 위해 MongoDB에서 생성된 “_id” 필드입니다.
- 디바이스 ID. 각 디바이스에는 “Device” 접두사가 있는 번호가 있습니다.
- 디바이스에서 기록한 온도.
- 온도가 기록된 날짜 및 시간.
코드 편집기를 닫고 App.config 파일을 엽니다.
code App.config
이 파일에는 MongoDB 데이터베이스에 연결하기 위한 설정이 포함되어 있습니다.
주소 키 값을 앞에서 기록한 MongoDB 서버의 IP 주소로 설정합니다.
앱이 사용하는 포트를 8080으로 변경합니다.
파일을 저장하고 Ctrl + s 및 Ctrl + q를 차례로 사용하여 편집기를 닫습니다.
다음 명령을 실행하여 애플리케이션을 다시 빌드합니다.
dotnet build
이 작업은 5분 정도 걸릴 수 있습니다.
애플리케이션을 실행합니다.
dotnet run
이 애플리케이션은 100개의 디바이스가 동시에 실행되는 것을 시뮬레이션합니다. 애플리케이션이 2~3분 동안 실행되도록 한 후 Enter 키를 눌러 중지하세요.
다른 앱을 빌드하고 실행하여 MongoDB 데이터베이스 쿼리
DP160T00A-Migrating-your-Database-to-Cosmos-DB/MongoDeviceDataCapture/DeviceDataQuery 폴더로 이동합니다.
cd ~/migration-workshop-apps/MongoDeviceDataCapture/DeviceDataQuery
이 폴더에는 각 디바이스에서 캡처한 데이터를 분석하는 데 사용할 수 있는 다른 애플리케이션이 포함되어 있습니다.
코드 편집기를 사용하여 Program.cs 파일을 검사합니다.
code Program.cs
이 애플리케이션은 파일 맨 아래에 있는 ConnectToDatabase 메서드를 사용하여 데이터베이스에 연결하고 사용자에게 디바이스 번호를 묻는 메시지를 표시합니다. 애플리케이션은 .NET Framework용 MongoDB 라이브러리를 사용하여 지정된 디바이스에 대해 다음 통계를 계산하는 집계 파이프라인을 만들고 실행합니다.
- 기록된 읽기 수
- 기록된 평균 온도
- 가장 낮은 읽기
- 가장 높은 읽기
- 최신 읽기
코드 편집기를 닫고 App.config 파일을 엽니다.
code App.config
주소 키 값을 앞에서 기록한 MongoDB 서버의 IP 주소로 설정합니다.
앱이 사용하는 포트를 8080으로 변경합니다.
파일을 저장하고 Ctrl + s 및 Ctrl + q를 차례로 사용하여 편집기를 닫습니다.
다음과 같이 애플리케이션을 빌드하고 실행합니다.
dotnet build dotnet run
디바이스 번호 입력 프롬프트에서 0에서 99 사이의 값을 입력합니다. 애플리케이션은 데이터베이스를 쿼리하고, 통계를 계산하고, 결과를 표시합니다. Q 키를 눌러 애플리케이션을 끝냅니다.
MongoDB 데이터베이스를 Cosmos DB로 마이그레이션
다음 단계는 MongoDB 데이터베이스를 가져와서 Cosmos DB로 전송하는 것입니다.
Cosmos 계정 및 데이터베이스 생성
Azure Portal로 돌아갑니다.
메뉴에서 + 리소스 생성를 선택합니다.
새로 생성 페이지의 마켓플레이스 검색 상자에 *Azure Cosmos DB를 입력하고 Enter 키를 누릅니다.
Azure Cosmos DB 페이지에서 생성를 선택합니다.
Azure Cosmos DB 계정 생성 페이지에서 다음 설정을 입력합니다.
속성 값 Resource group mongodbrg 계정 이름 mongodb*nnn*, 여기서 nnn은 사용자가 선택한 임의의 숫자 API Azure Cosmos DB for MongoDB API Notebooks 해제 위치 MongoDB 서버 및 가상 네트워크에 사용한 것과 동일한 위치 지정 용량 모드 프로비전된 처리량 체험 계층 할인 적용 적용 계정 유형 Non-Production 버전 3.6 지역 중복 사용 안 함 다중 지역 쓰기 사용 안 함 가용성 영역 사용 안 함 검토 + 생성를 선택합니다.
확인 페이지에서 생성를 선택하고 Cosmos DB 계정이 배포될 때까지 기다립니다.
Azure Portal 메뉴에서 모든 리소스를 선택하고 새 Cosmos DB 계정(mongodbnnn)을 선택합니다.
mongodbnnn 페이지에서 데이터 탐색기를 선택합니다.
데이터 탐색기 창에서 새 컬렉션을 선택합니다.
컬렉션 추가 창에서 다음 설정을 지정합니다.
속성 값 데이터베이스 ID 새로 생성를 선택하고 DeviceData 입력 데이터베이스 처리량 프로비전 selected 처리량 10000 컬렉션 ID Temperatures 스토리지 용량 무제한 분할 키 deviceID 내 분할된 키가 100바이트보다 큼 선택 취소 상태로 두기 모든 필드에 와일드카드 인덱스 생성 선택 취소 상태로 두기 분석 저장소 해제 확인을 선택합니다.
Database Migration Service 생성
Azure Portal로 다시 전환합니다.
모든 서비스를 클릭하고 구독을 클릭한 다음, 사용자 구독을 클릭합니다.
구독 페이지의 설정에서 리소스 공급자를 클릭합니다.
이름으로 필터링 상자에 DataMigration을 입력한 다음, Microsoft.DataMigration을 클릭합니다.
Microsoft.DataMigration이 등록되어 있지 않은 경우 등록을 클릭하고 상태가 등록됨으로 변경될 때까지 기다립니다. 상태 변경을 보려면 새로 고침을 클릭해야 할 수도 있습니다.
Azure Portal 메뉴에서 + 리소스 생성를 선택합니다.
새로 생성 페이지에서 마켓플레이스 검색 상자에 Azure Database Migration Service를 입력하고 Enter 키를 누릅니다.
Azure Database Migration Service 페이지에서 생성를 선택합니다.
마이그레이션 서비스 생성 페이지에서 다음 설정을 입력합니다.
속성 값 Resource group mongodbrg 서비스 이름 MongoDBMigration 위치 전에 사용한 동일한 위치 선택 서비스 모드 Azure 가격 책정 계층 Standard: 1 vCores 다음: 네트워킹을 선택합니다.
네트워킹 페이지에서 databasevnet/default를 선택하고 검토 + 생성를 선택합니다.
생성를 선택하고 서비스가 배포될 때까지 기다린 다음, 계속합니다. 이 작업은 약 10분의 시간이 걸릴 수 있습니다.
새 마이그레이션 프로젝트 생성 및 실행
Azure Portal 메뉴에서 리소스 그룹을 선택합니다.
리소스 그룹 창에서 mongodbrg를 선택합니다.
mongodbrg 창에서 MongoDBMigration을 선택합니다.
MongoDBMigration 페이지에서 + 새 마이그레이션 프로젝트를 선택합니다.
새 마이그레이션 프로젝트 페이지에서 다음 설정을 입력합니다.
속성 값 프로젝트 이름 MigrateTemperatureData 원본 서버 유형 MongoDB 대상 서버 유형 Cosmos DB (MongoDB API) 활동 유형 선택 오프라인 데이터 마이그레이션 활동 생성 및 실행을 선택합니다.
마이그레이션 마법사가 시작되면 원본 세부 정보 페이지에서 다음 세부 정보를 입력합니다.
속성 값 모드 표준 모드 원본 서버 이름 이전에 기록한 mongodbserver-ip IP 주소 값 지정 서버 포트 8080 사용자 이름 administrator 암호 Pa55w.rd SSL 필요 선택 취소됨 다음: 대상 선택을 선택합니다.
대상 선택 페이지에서 다음 세부 정보를 입력합니다.
속성 값 모드 Cosmos DB 대상 선택 Comos DB 이름 선택 mongodb*nnn* 연결 문자열 Cosmos DB 계정에 대해 생성된 연결 문자열 허용 다음: 데이터베이스 설정을 선택합니다.
데이터베이스 설정 페이지에서 다음 세부 정보를 입력합니다.
속성 값 원본 데이터베이스 DeviceData 대상 데이터베이스 DeviceData 처리량(RU/초) 1000 컬렉션 정리 이 상자 선택 취소 다음: 컬렉션 설정을 선택합니다.
컬렉션 설정 페이지에서 DeviceData 데이터베이스 옆의 드롭다운 화살표를 선택하고 다음 세부 정보를 입력합니다.
속성 값 이름 Temperatures 대상 컬렉션 Temperatures 처리량(RU/초) 1000 분할 키 deviceID 고유한 비워 둠 다음: 마이그레이션 요약을 선택합니다.
마이그레이션 요약 페이지의 활동 이름 필드에 mongodb-migration을 입력하고 마이그레이션 시작을 선택합니다.
mongodb-migration 페이지에서 마이그레이션이 완료될 때까지 30초마다 새로 고침을 선택합니다. 처리된 문서 수를 기록해 둡니다.
마이그레이션이 성공했는지 확인
Azure Portal 메뉴에서 모든 리소스를 선택합니다.
모든 리소스 페이지에서 mongodbnnn을 선택합니다.
mongodb*nnn 페이지에서 데이터 탐색기를 선택합니다.
데이터 탐색기 창에서 DeviceData 데이터베이스를 확장하고 Temperatures 컬렉션을 확장하고 문서를 선택합니다.
문서 창에서 문서 목록을 스크롤합니다. 문서마다 문서 ID(_id) 및 분할된 키(/deviceID)가 표시되어야 합니다.
문서를 선택합니다. 선택한 문서의 세부 정보가 표시되어야 합니다. 일반적인 문서는 다음과 같습니다.
{ "_id" : ObjectId("5ce8104bf56e8a04a2d0929a"), "deviceID" : "Device 83", "temperature" : 19.65268837271849, "time" : 636943091952553500 }
문서 탐색기 창에 있는 도구 모음에서 새 셸을 선택합니다.
셸 1 창의 > 프롬프트에서 다음 명령을 입력하고 Enter 키를 누릅니다.
db.Temperatures.count()
이 명령은 Temperatures 컬렉션의 문서 수를 표시합니다. 마이그레이션 마법사에서 보고하는 수와 일치해야 합니다.
다음 명령을 입력하고 Enter 키를 누릅니다.
db.Temperatures.find({deviceID: "Device 99"})
이 명령은 디바이스 99에 대한 문서를 가져오고 표시합니다.
기존 애플리케이션을 다시 구성하고 실행하여 Cosmos DB 사용
마지막 단계는 기존 MongoDB 애플리케이션을 다시 구성하여 Cosmos DB에 연결하고 계속 작동하는지 확인하는 것입니다. 이렇게 하려면 애플리케이션이 데이터베이스에 연결하는 방법은 수정해야 하지만 애플리케이션의 논리는 변경되지 않은 상태로 유지되어야 합니다.
mongodbnnn 창의 설정에서 연결 문자열을 선택합니다.
mongodbnnn 연결 문자열 페이지에서 다음 설정을 기록해 둡니다.
- 호스트
- 사용자 이름
- 기본 암호
Cloud Shell 창으로 돌아가서(세션 시간이 초과된 경우 다시 연결) migration-workshop-apps/MongoDeviceDataCapture/DeviceDataQuery 폴더로 이동합니다.
cd ~/migration-workshop-apps/MongoDeviceDataCapture/DeviceDataQuery
코드 편집기에서 App.config 파일을 엽니다.
code App.config
파일의 MongoDB 설정 섹션에서 기존 설정을 주석으로 처리합니다.
Cosmos DB Mongo API 설정 섹션에서 설정 주석 처리를 제거하고 다음과 같이 해당 설정 값을 지정합니다.
설정 값 주소 mongodbnnn 연결 문자열 페이지의 호스트 포트 mongodbnnn 연결 문자열 페이지의 포트 사용자 이름 mongodbnnn 연결 문자열 페이지의 사용자 이름 암호 mongodbnnn 연결 문자열 페이지의 기본 암호 완성된 파일은 다음과 유사합니다.
<?xml version="1.0" encoding="utf-8"?> <configuration> <appSettings> <add key="Database" value="DeviceData" /> <add key="Collection" value="Temperatures" /> <!-- Settings for MongoDB <add key="Address" value="nn.nn.nn.nn" /> <add key="Port" value="27017" /> <add key="Username" value="deviceadmin" /> <add key="Password" value="Pa55w.rd" /> End of settings for MongoDB --> <!-- Settings for CosmosDB Mongo API --> <add key="Address" value="mongodbnnn.documents.azure.com"/> <add key="Port" value="10255"/> <add key="Username" value="mongodbnnn"/> <add key="Password" value="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=="/> <!-- End of settings for CosmosDB Mongo API --> </appSettings> </configuration>
파일을 저장하고 코드 편집기를 닫습니다.
코드 편집기를 사용하여 Program.cs 파일을 엽니다.
code Program.cs
ConnectToDatabase 메서드가 나올 때까지 아래로 스크롤합니다.
MongoDB 연결용 자격 증명 설정 줄은 주석으로 처리하고 Cosmos DB 연결용 자격 증명 지정 문은 주석 처리를 제거합니다. 코드는 다음과 유사합니다.
// Connect to the MongoDB database MongoClient client = new MongoClient(new MongoClientSettings { Server = new MongoServerAddress(address, port), ServerSelectionTimeout = TimeSpan.FromSeconds(10), // // Credential settings for MongoDB // // Credential = MongoCredential.CreateCredential(database, azureLogin.UserName, azureLogin.SecurePassword), // // Credential settings for CosmosDB Mongo API // UseTls = true, Credential = new MongoCredential("SCRAM-SHA-1", new MongoInternalIdentity(database, azureLogin.UserName), new PasswordEvidence(azureLogin.SecurePassword)) // End of Mongo API settings });
원래 MongoDB 데이터베이스에서는 SSL 연결을 사용하지 않기 때문에 이러한 변경이 필요합니다. Cosmos DB에서는 항상 SSL을 사용합니다.
파일을 저장하고 코드 편집기를 닫습니다.
애플리케이션을 다시 빌드하고 실행합니다.
dotnet build dotnet run
디바이스 번호 입력 프롬프트에서 0에서 99 사이의 디바이스 번호를 입력합니다. 이번에는 Cosmos DB 데이터베이스에 저장된 데이터가 사용되는 것을 제외하고는 애플리케이션이 이전과 동일하게 실행됩니다.
Cosmos DB에서 쿼리 성능 개선
Cosmos DB를 사용하면 더 많은 인덱스를 추가하여 쿼리 성능을 개선할 수 있습니다. DeviceID에서 집계할 때 해당 필드를 인덱스로 추가하면 쿼리 속도가 빨라집니다.
Azure Portal로 다시 전환합니다.
왼쪽에서 데이터 탐색기를 선택합니다.
데이터 탐색기 창에서 DeviceData 데이터베이스를 확장하고 Temperatures 컬렉션을 확장하고 설정을 선택합니다.
인덱싱 정책을 선택합니다.
_id에서 새 인덱스를 추가하고 정의에 deviceID를 입력하고 유형에 단일 필드를 선택합니다.
저장을 선택하여 새 인덱스를 추가합니다.
Cloud Shell로 돌아가서 쿼리를 다시 시도하고 애플리케이션의 향상된 응답을 확인합니다.
다른 디바이스 번호를 사용하여 애플리케이션을 테스트합니다. Q 키를 입력하여 마칩니다.
MongoDB 데이터베이스를 Cosmos DB로 마이그레이션하고 기존 MongoDB 애플리케이션을 다시 구성하여 새 Cosmos DB 데이터베이스에 연결하도록 했습니다.
생성된 리소스 정리
중요
자신의 개인 구독에서 이러한 단계를 수행한 경우 리소스를 개별적으로 삭제할 수도 있고 리소스 그룹을 삭제하여 전체 리소스 세트를 삭제할 수도 있습니다. 계속 실행되는 리소스에는 요금이 부과될 수 있습니다.
Cloud Shell에서 다음 명령을 실행하여 리소스 그룹을 삭제합니다.
az group delete --name mongodbrg