

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# SQL Server 데이터베이스를 AWS의 MongoDB Atlas로 마이그레이션하기 위한 쿼리 성능 평가
<a name="assess-query-performance-for-migrating-sql-server-databases-to-mongodb-atlas-on-aws"></a>

*Battulga Purevragchaa, Amazon Web Services*

*Krishnakumar Sathyanarayana, PeerIslands US Inc*

*Babu Srinivasan, MongoDB*

## 요약
<a name="assess-query-performance-for-migrating-sql-server-databases-to-mongodb-atlas-on-aws-summary"></a>

이 패턴은 실제와 가까운 데이터를 사용하여 MongoDB를 로드하고 프로덕션 시나리오에 최대한 가까운 MongoDB 쿼리 성능을 평가하기 위한 지침을 제공합니다. 이 평가는 관계형 데이터베이스에서 MongoDB로의 마이그레이션을 계획하는 데 도움이 되는 정보를 제공합니다. 이 패턴은 [PeerIslands Test Data Generator and Performance Analyzer](https://tools.peerislands.io/)를 사용하여 쿼리 성능을 테스트합니다.

이 패턴은 Microsoft SQL Server를 MongoDB로 마이그레이션할 때 특히 유용합니다. 스키마 변환을 수행하고 현재 SQL Server 인스턴스에서 MongoDB로 데이터를 로드하는 작업은 매우 복잡할 수 있기 때문입니다. 대신 실제 마이그레이션을 시작하기 전에 실제와 가까운 데이터를 MongoDB로 로드하고, MongoDB 성능을 이해하고, 스키마 디자인을 미세 조정할 수 있습니다.

## 사전 조건 및 제한 사항
<a name="assess-query-performance-for-migrating-sql-server-databases-to-mongodb-atlas-on-aws-prereqs"></a>

**사전 조건 **
+ 활성 상태의 AWS 계정
+ [MongoDB Atlas](https://www.mongodb.com/docs/atlas/getting-started/)에 대한 지식
+ 대상 MongoDB 스키마
+ 일반적인 쿼리 패턴

**제한 사항 **
+ 데이터 로드 시간과 성능은 MongoDB 클러스터 인스턴스 크기에 따라 제한됩니다. 실제 성능을 이해하려면 프로덕션 용도로 권장되는 인스턴스를 선택하는 것이 좋습니다.
+ PeerIslands Test Data Generator and Performance Analyzer는 현재 온라인 데이터 로드 및 쿼리만 지원합니다. 오프라인 일괄 처리(예: Spark 커넥터를 사용하여 MongoDB로 데이터 로드)는 아직 지원되지 않습니다.
+ PeerIslands Test Data Generator and Performance Analyzer는 컬렉션 내 필드 관계를 지원합니다. 컬렉션 간의 관계는 지원하지 않습니다.

**제품 에디션**
+ 이 패턴은 [MongoDB Atlas](https://www.mongodb.com/atlas) 및 [MongoDB Enterprise Advanced](https://www.mongodb.com/products/mongodb-enterprise-advanced)를 모두 지원합니다.

## 아키텍처
<a name="assess-query-performance-for-migrating-sql-server-databases-to-mongodb-atlas-on-aws-architecture"></a>

**대상 기술 스택**
+ MongoDB Atlas 또는 MongoDB Enterprise Advanced

**아키텍처**

![\[SQL Server 데이터베이스를 AWS의 MongoDB Atlas로 마이그레이션하기 위한 쿼리 성능 평가를 위한 아키텍처.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/25f0ab73-d587-4bd0-9fc0-ac675d5aa349/images/717caae4-d52e-4c78-bb7d-2ecb5acccd42.png)


PeerIslands Test Data Generator and Performance Analyzer는 Java 및 Angular를 사용하여 구축되었으며 생성된 데이터를 Amazon Elastic Block Store(Amazon EBS)에 저장합니다. 이 도구는 테스트 데이터 생성 및 성능 테스트라는 두 가지 워크플로우로 구성되어 있습니다.
+ 테스트 데이터를 생성할 때는 생성해야 하는 데이터 모델의 JSON 표현인 템플릿을 생성합니다. 템플릿을 생성한 후에는 로드 생성 구성에 정의된 대로 대상 컬렉션에서 데이터를 생성할 수 있습니다.
+ 성능 테스트에서 프로필을 생성합니다. 프로필은 생성, 읽기, 업데이트, 삭제(CRUD) 작업, 집계 파이프라인, 각 작업의 가중치, 각 단계의 기간을 구성할 수 있는 다단계 테스트 시나리오입니다. 프로필을 생성한 후 구성을 기반으로 대상 데이터베이스에서 성능 테스트를 실행할 수 있습니다.

PeerIslands Test Data Generator and Performance Analyzer는 Amazon EBS에 데이터를 저장하므로 피어링, 허용 목록, 프라이빗 엔드포인트를 포함한 MongoDB가 지원하는 모든 연결 메커니즘을 사용하여 Amazon EBS를 MongoDB에 연결할 수 있습니다. 기본적으로 이 도구에는 운영 구성 요소가 포함되어 있지 않지만 필요한 경우 Amazon Managed Service for Prometheus, Amazon Managed Grafana, Amazon CloudWatch, AWS Secrets Manager를 사용하여 구성할 수 있습니다.

## 도구
<a name="assess-query-performance-for-migrating-sql-server-databases-to-mongodb-atlas-on-aws-tools"></a>
+ [PeerIslands Test Data Generator and Performance Analyzer](https://tools.peerislands.io/)에는 두 가지 구성 요소가 포함되어 있습니다. Test Data Generator 구성 요소를 사용하면 MongoDB 스키마를 기반으로 고도로 고객별로 특화된 실제 데이터를 생성할 수 있습니다. 이 도구는 풍부한 데이터 라이브러리를 갖춘 완전한 UI 기반이며 MongoDB에서 수십억 개의 레코드를 빠르게 생성하는 데 사용할 수 있습니다. 이 도구는 MongoDB 스키마의 필드 간 관계를 구현하는 기능도 제공합니다. Performance Analyzer 구성 요소를 사용하면 고도로 고객별 쿼리와 집계를 생성하고 MongoDB에서 현실적인 성능 테스트를 수행할 수 있습니다. Performance Analyzer를 사용하여 다양한 로드 프로필과 특정 사용 사례에 대한 파라미터화된 쿼리로 MongoDB 성능을 테스트할 수 있습니다.

## 모범 사례
<a name="assess-query-performance-for-migrating-sql-server-databases-to-mongodb-atlas-on-aws-best-practices"></a>

다음 리소스를 참조하세요.
+ [MongoDB 스키마 설계 모범 사례](https://www.mongodb.com/developer/products/mongodb/mongodb-schema-design-best-practices/) (MongoDB 개발자 웹사이트)
+ [AWS에 MongoDB Atlas를 배포하는 모범 사례](https://www.mongodb.com/presentation/best-practices-of-deploying-mongodb-atlas-on-aws) (MongoDB 웹사이트)
+ [AWS PrivateLink를 사용하여 MongoDB Atlas 데이터 영역에 애플리케이션을 안전하게 연결](https://aws.amazon.com/blogs/apn/connecting-applications-securely-to-a-mongodb-atlas-data-plane-with-aws-privatelink/) (AWS Blog 게시물)
+ [MongoDB 성능 모범 사례 가이드](https://www.mongodb.com/basics/best-practices) (MongoDB 웹사이트)

## 에픽
<a name="assess-query-performance-for-migrating-sql-server-databases-to-mongodb-atlas-on-aws-epics"></a>

### 소스 데이터 이해
<a name="understand-your-source-data"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 현재 SQL Server 소스의 데이터베이스 발자국을 이해합니다. | 현재 SQL Server 발자국을 이해합니다. 데이터베이스의 `INFORMATION` 스키마에 대해 쿼리를 실행하여 이 작업을 수행할 수 있습니다. 테이블 수와 각 테이블의 크기를 결정합니다. 각 테이블과 관련된 인덱스를 분석합니다. SQL 분석에 대한 자세한 내용은 PeerIslands 웹사이트의 블로그 게시물 [SQL2Mongo: 데이터 마이그레이션 여정](https://engineering.peerislands.io/sql2mongo-data-migration-journey-fec91a421d60)을 참조하세요. | DBA | 
| 소스 스키마를 이해합니다. | 테이블 스키마와 데이터의 비즈니스 표현(예: 우편번호, 이름, 통화)을 결정합니다. 기존 엔터티 관계(ER) 다이어그램을 사용하거나 기존 데이터베이스에서 ER 다이어그램을 생성합니다. 자세한 내용은 PeerIslands 웹사이트의 블로그 게시물 [SQL2Mongo: 데이터 마이그레이션 여정](https://engineering.peerislands.io/sql2mongo-data-migration-journey-fec91a421d60)을 참조하세요. | DBA | 
| 쿼리 패턴을 이해합니다. | 사용하는 상위 10개 SQL 쿼리를 문서화합니다. 데이터베이스에서 사용할 수 있는 **performance\$1schema.events\$1statements\$1summary\$1by\$1digest** 테이블을 사용하여 상위 쿼리를 이해할 수 있습니다. 자세한 내용은 PeerIslands 웹사이트의 블로그 게시물 [SQL2Mongo: 데이터 마이그레이션 여정](https://engineering.peerislands.io/sql2mongo-data-migration-journey-fec91a421d60)을 참조하세요. | DBA | 
| SLA 약정을 이해합니다. | 데이터베이스 운영에 대한 대상 서비스 수준에 관한 계약(SLA)을 문서화합니다. 일반적인 측정값에는 쿼리 지연 시간 및 초당 쿼리가 포함됩니다. 측정값과 그 목표는 일반적으로 비기능적 요구 사항(NFR) 문서에서 확인할 수 있습니다. | DBA | 

### MongoDB 스키마 정의
<a name="define-the-mongodb-schema"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 대상 스키마를 정의합니다. | 대상 MongoDB 스키마에 대한 다양한 옵션을 정의합니다. 자세한 내용은 MongoDB Atlas 설명서의 [스키마](https://www.mongodb.com/docs/atlas/app-services/schemas/)를 참조하세요. 테이블 관계를 기반으로 모범 사례와 디자인 패턴을 고려하세요. | MongoDB 엔지니어 | 
| 대상 쿼리 패턴을 정의합니다. | MongoDB 쿼리 및 집계 파이프라인을 정의합니다. 이러한 쿼리는 SQL Server 워크로드에 대해 캡처한 상위 쿼리와 동일합니다. MongoDB 집계 파이프라인을 구성하는 방법을 이해하려면 [MongoDB 설명서](https://www.mongodb.com/docs/manual/core/aggregation-pipeline/)를 참조하세요. | MongoDB 엔지니어 | 
| MongoDB 인스턴스 유형을 정의합니다. | 테스트에 사용할 인스턴스의 크기를 결정합니다. 지침은 [MongoDB 설명서](https://www.mongodb.com/docs/atlas/sizing-tier-selection/)를 참조하세요. | MongoDB 엔지니어 | 

### 대상 데이터베이스를 준비합니다.
<a name="prepare-the-target-database"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| MongoDB Atlas 클러스터를 설정합니다. | AWS에서 MongoDB 클러스터를 설정하려면 [MongoDB 설명서](https://www.mongodb.com/docs/atlas/tutorial/create-new-cluster/)의 지침을 따르세요. | MongoDB 엔지니어 | 
| 대상 데이터베이스에서 사용자를 생성합니다. | [MongoDB 설명서](https://www.mongodb.com/docs/atlas/connect-to-database-deployment/)의 지침에 따라 액세스 및 네트워크 보안을 위해 MongoDB Atlas 클러스터를 구성합니다. | MongoDB 엔지니어 | 
| AWS에서 적절한 역할을 생성하고 Atlas에 대한 역할 기반 액세스 제어를 구성합니다. | 필요한 경우 [MongoDB 설명서](https://www.mongodb.com/docs/atlas/security/set-up-unified-aws-access/)의 지침에 따라 추가 사용자를 설정합니다. AWS 역할을 통해 [인증 및 권한](https://www.mongodb.com/docs/atlas/security/config-db-auth/)을 구성합니다. | MongoDB 엔지니어 | 
| MongoDB Atlas 액세스를 위한 Compass를 설정합니다. | 쉽게 탐색하고 액세스할 수 있도록 [MongoDB Compass GUI 유틸리티](https://www.mongodb.com/products/compass)를 설정합니다. | MongoDB 엔지니어 | 

### Test Data Generator를 사용하여 베이스 로드를 설정합니다.
<a name="set-up-the-base-load-by-using-test-data-generator"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Test Data Generator를 설치합니다. | 사용자 환경에 [PeerIsland Test Data Generator](https://github.com/PeerIslands/loadgen_binary)를 설치합니다. | MongoDB 엔지니어 | 
| 적절한 데이터를 생성하도록 Test Data Generator기를 구성합니다. | 데이터 라이브러리를 사용하여 MongoDB 스키마의 각 필드에 대한 특정 데이터를 생성하여 템플릿을 생성합니다. 자세한 내용은 [MongoDB Data Generaotor & Performance Analyzer](https://vimeo.com/570068857) 동영상을 참조하세요. | MongoDB 엔지니어 | 
| Test Data Generator를 수평적으로 확장하여 필요한 로드를 생성합니다. | 생성한 템플릿을 사용하여 필요한 병렬 처리를 구성하여 대상 컬렉션에 대한 로드 생성을 시작합니다. 필요한 데이터를 생성하기 위한 기간과 규모를 결정합니다. | MongoDB 엔지니어 | 
| MongoDB Atlas에서 로드를 검증합니다. | MongoDB Atlas에 로드된 데이터를 확인합니다. | MongoDB 엔지니어 | 
| MongoDB에서 필요한 인덱스를 생성합니다. | 쿼리 패턴을 기반으로 필요에 따라 인덱스를 정의합니다. 모범 사례는 [MongoDB 설명서](https://www.mongodb.com/docs/manual/applications/indexes/)를 참조하세요. | MongoDB 엔지니어 | 

### 성능 테스트 수행
<a name="conduct-performance-testing"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Performance Analyzer에서 로드 프로필을 설정합니다. | Performance Analyzer에서 특정 쿼리와 해당 가중치, 테스트 실행 기간 및 단계를 구성하여 성능 테스트 프로필을 생성합니다. 자세한 내용은 [MongoDB Data Generaotor & Performance Analyzer](https://vimeo.com/570068857) 동영상을 참조하세요. | MongoDB 엔지니어 | 
| 성능 테스트를 실행합니다. | 생성한 성능 테스트 프로필을 사용하여 필요한 병렬 처리를 구성하여 대상 컬렉션에 대한 테스트를 시작합니다. 성능 테스트 도구를 수평적으로 확장하여 MongoDB Atlas에 대해 쿼리를 실행할 수 있습니다. | MongoDB 엔지니어 | 
| 테스트 결과를 기록합니다. | 쿼리에 대한 P95, P99 지연 시간을 기록합니다. | MongoDB 엔지니어 | 
| 스키마와 쿼리 패턴을 조정합니다. | 인덱스 및 쿼리 패턴을 수정하여 성능 문제를 해결합니다. | MongoDB 엔지니어 | 

### 프로젝트 닫기
<a name="close-the-project"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 임시 AWS 리소스를 종료합니다. | Test Data Generator and Performance Analyzer에 사용한 모든 임시 리소스를 삭제합니다. | AWS 관리자 | 
| 성능 테스트 결과를 업데이트합니다. | MongoDB 쿼리 성능을 이해하고 SLA와 비교합니다. 필요한 경우 MongoDB 스키마를 미세 조정하고 프로세스를 다시 실행합니다. | MongoDB 엔지니어 | 
| 프로젝트를 마칩니다. | 프로젝트를 마무리하고 피드백을 제공하세요. | MongoDB 엔지니어 | 

## 관련 리소스
<a name="assess-query-performance-for-migrating-sql-server-databases-to-mongodb-atlas-on-aws-resources"></a>
+ GitHub 리포지토리: [S3toAtlas](https://github.com/mongodb-partners/S3toAtlas)
+ 스키마: [MongoDB 스키마 설계](https://www.mongodb.com/developer/products/mongodb/mongodb-schema-design-best-practices/)
+ 집계 파이프라인: [MongoDB 집계 파이프라인](https://www.mongodb.com/docs/manual/core/aggregation-pipeline/)
+ MongoDB Atlas 크기 조정: [크기 조정 티어 선택](https://www.mongodb.com/docs/atlas/sizing-tier-selection/)
+ 동영상: [MongoDB Data Generator](https://vimeo.com/570068857) 및 Performance Analyzer
+ 참조: [MongoDB 설명서](https://www.mongodb.com/docs/)
+ 자습서:** **[MongoDB 개발자 가이드, ](https://www.mongodb.com/docs/develop-applications/)[MongoDB Jumpstart](https://www.youtube.com/playlist?list=PL4RCxklHWZ9v2lcat4oEVGQhZg6r4IQGV)
+ AWS Marketplace:** **[AWS Marketplace의 MongoDB Atlas](https://aws.amazon.com/marketplace/seller-profile?id=c9032c7b-70dd-459f-834f-c1e23cf3d092)
+ AWS 파트너 솔루션: ** **[ MongoDB Atlas on AWS Reference Deployment](https://aws.amazon.com/quickstart/architecture/mongodb-atlas/)

추가 리소스:
+ [SQL 분석](https://engineering.peerislands.io/sql2mongo-data-migration-journey-fec91a421d60)
+ [MongoDB 개발자 커뮤니티 포럼](https://www.mongodb.com/community/forums/)
+ [MongoDB 성능 튜닝 질문](https://www.mongodb.com/developer/products/mongodb/performance-tuning-tips/)
+ [Atlas 및 Redshift를 사용한 운영 분석](https://github.com/mongodb-partners/Atlas_to_Redshift)
+ [MongoDB Atlas 및 AWS Elastic Beanstalk를 사용한 애플리케이션 현대화](https://github.com/mongodb-partners/MEANStack_with_Atlas_on_AWS_EB)