

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

# MongoDB를의 소스로 사용 AWS DMS
<a name="CHAP_Source.MongoDB"></a>

 가 소스로 AWS DMS 지원하는 MongoDB 버전에 대한 자세한 내용은 섹션을 참조하세요[의 소스 AWS DMS](CHAP_Introduction.Sources.md).

MongoDB 버전 지원에 대한 다음 사항에 유의하세요.
+  AWS DMS 3.4.5 이상 버전은 MongoDB 버전 4.2 및 4.4를 지원합니다.
+  AWS DMS 3.4.5 이상 버전과 MongoDB 4.2 이상 버전은 분산 트랜잭션을 지원합니다. MongoDB 분산 트랜잭션에 대한 자세한 내용은 [MongoDB 설명서](https://www.mongodb.com/docs/)의 [Transactions](https://docs.mongodb.com/manual/core/transactions/)를 참조하세요.
+  AWS DMS 3.5.0 이상 버전은 3.6 이전 버전의 MongoDB를 지원하지 않습니다.
+  AWS DMS 3.5.1 이상 버전은 MongoDB 버전 5.0을 지원합니다.
+  AWS DMS 3.5.2 이상 버전은 MongoDB 버전 6.0을 지원합니다.
+  AWS DMS 3.5.4 이상 버전은 MongoDB 버전 7.0 및 8.0을 지원합니다.



MongoDB가 생소하다면 다음과 같은 MongoDB 데이터베이스의 중요 개념을 잘 이해하시기 바랍니다.
+ MongoDB의 레코드는 필드와 값으로 구성된 데이터 구조인 *문서*입니다. 필드의 값에는 다른 문서, 배열 및 문서의 배열이 포함될 수 있습니다. 문서는 대체로 관계형 데이터베이스 테이블의 행에 상응합니다.
+ MongoDB의 *모음*은 문서 그룹이며 대략 관계형 데이터베이스 테이블에 상응합니다.
+ MongoDB의 *데이터베이스*는 모음 세트이며, 대략 관계형 데이터베이스의 스키마에 해당합니다.
+ 내부적으로 MongoDB 문서는 이진 JSON(BSON) 파일에 문서의 각 필드별로 형식을 포함하는 압축 형식으로 저장됩니다. 각 문서에는 고유 ID가 있습니다.

AWS DMS 는 MongoDB를 소스로 사용할 때 *문서 모드* 또는 *테이블* 모드라는 두 가지 마이그레이션 모드를 지원합니다. MongoDB 엔드포인트를 생성할 때 또는 AWS DMS 콘솔에서 **메타데이터 모드** 파라미터를 설정하여 사용할 마이그레이션 모드를 지정합니다. 선택에 따라 엔드포인트 구성 패널에서 **\$1id를 별도의 열로** 확인 표시 버튼을 선택하여 프라이머리 키 역할을 하는 `_id`라는 두 번째 열을 생성할 수 있습니다.

마이그레이션 모드 선택은 아래 설명된 대로 결과로 얻는 대상 데이터의 형식에 영향을 미칩니다.

**문서 모드**  
문서 모드에서 MongoDB 문서는 있는 그대로 마이그레이션됩니다. 즉 해당 문서 데이터는 대상 테이블에서 `_doc`라는 단일 열로 통합됩니다. 문서 모드는 MongoDB를 소스 엔드포인트로 사용할 때의 기본 설정입니다.  
예를 들어, myCollection이라는 MongoDB 모음의 문서를 가정해 보세요.  

```
 db.myCollection.find()
{ "_id" : ObjectId("5a94815f40bd44d1b02bdfe0"), "a" : 1, "b" : 2, "c" : 3 }
{ "_id" : ObjectId("5a94815f40bd44d1b02bdfe1"), "a" : 4, "b" : 5, "c" : 6 }
```
데이터를 문서 모드를 사용하는 관계형 데이터베이스 테이블로 마이그레이션 하면, 데이터의 구조는 다음과 같습니다. MongoDB 문서의 데이터 필드는` _doc` 열로 통합됩니다.      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/dms/latest/userguide/CHAP_Source.MongoDB.html)
선택적으로 추가 연결 속성 `extractDocID`를 *true*로 설정하여 프라이머리 키 역할을 하는 `"_id"`라는 두 번째 열을 생성할 수 있습니다. CDC를 사용할 경우, 이 파라미터를 *true*로 설정합니다.  
[다중 문서 트랜잭션](https://www.mongodb.com/docs/manual/reference/method/Session.startTransaction/#mongodb-method-Session.startTransaction)을 생성하는 소스와 함께 CDC를 사용하는 경우 `ExtractDocId` 파라미터를 *true*로 설정해야 **합니다**. 이 파라미터를 활성화하지 않으면 다중 문서 트랜잭션이 발생하면 AWS DMS 작업이 실패합니다.  
문서 모드에서는 다음과 같이 컬렉션의 생성 및 이름 변경을 AWS DMS 관리합니다.  
+ 소스 데이터베이스에 새 컬렉션을 추가하는 경우는 컬렉션에 대한 새 대상 테이블을 AWS DMS 생성하고 모든 문서를 복제합니다.
+ 소스 데이터베이스에서 기존 모음의 이름을 바꾸면 AWS DMS 는 대상 테이블의 이름을 바꾸지 않습니다.
대상 엔드포인트가 Amazon DocumentDB인 경우, **문서 모드**에서 마이그레이션을 실행하세요.

**테이블 모드**  
테이블 모드에서는 MongoDB 문서의 각 최상위 필드를 대상 테이블의 열로 AWS DMS 변환합니다. 필드가 중첩된 경우 중첩된 값을 단일 열로 AWS DMS 확장합니다. AWS DMS 그런 다음 대상 테이블의 열 세트에 키 필드와 데이터 유형을 추가합니다.  
각 MongoDB 문서에 대해는 각 키와 유형을 대상 테이블의 열 세트에 AWS DMS 추가합니다. 예를 들어 테이블 모드를 사용하면가 이전 예제를 다음 테이블로 AWS DMS 마이그레이션합니다.      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/dms/latest/userguide/CHAP_Source.MongoDB.html)
중첩된 값은 점으로 분리된 키 이름을 포함하는 열에 평면화됩니다. 열은 마침표로 각각 분리된 연속된 평면화된 필드 이름으로 이름이 지정됩니다. 예를 들어,와 같은 중첩 값 필드가 있는 JSON 문서를 라는 열`{"a" : {"b" : {"c": 1}}}`로 AWS DMS 마이그레이션합니다. `a.b.c.`   
대상 열을 생성하기 위해는 지정된 수의 MongoDB 문서를 AWS DMS 스캔하고 모든 필드 및 유형 세트를 생성합니다. AWS DMS 그런 다음이 세트를 사용하여 대상 테이블의 열을 생성합니다. 콘솔을 사용해 MongoDB 소스 엔드포인트를 생성하거나 수정한다면, 스캔(검사)할 문서의 수를 지정할 수 있습니다. 기본값은 1000 개 문서입니다. 를 사용하는 경우 추가 연결 속성를 사용할 AWS CLI수 있습니다`docsToInvestigate`.  
테이블 모드에서는 다음과 같이 문서 및 컬렉션을 AWS DMS 관리합니다.  
+ 기존 모음에 문서를 추가할 때 문서가 복제됩니다. 대상에 없는 필드가 있으면 이 필드는 복제되지 않습니다.
+ 문서를 업데이트하면 업데이트된 문서가 복제됩니다. 대상에 없는 필드가 있으면 이 필드는 복제되지 않습니다.
+ 문서 삭제는 완벽하게 지원됩니다.
+ 새 모음을 CDC 작업 중에 추가해도 대상에 테이블이 새로 생성되지 않습니다.
+ 변경 데이터 캡처(CDC) 단계에서 AWS DMS 는 컬렉션 이름 변경을 지원하지 않습니다.

**Topics**
+ [MongoDB를의 소스로 사용할 때 필요한 권한 AWS DMS](#CHAP_Source.MongoDB.PrerequisitesCDC)
+ [CDC를 위한 MongoDB 복제본 세트 구성](#CHAP_Source.MongoDB.PrerequisitesCDC.ReplicaSet)
+ [MongoDB를 소스로 사용할 때의 보안 요구 사항 AWS DMS](#CHAP_Source.MongoDB.Security)
+ [MongoDB 모음을 분할하고 병렬로 마이그레이션](#CHAP_Source.MongoDB.ParallelLoad)
+ [MongoDB를 소스로 사용할 때 여러 데이터베이스 마이그레이션 AWS DMS](#CHAP_Source.MongoDB.Multidatabase)
+ [MongoDB를의 소스로 사용할 때의 제한 사항 AWS DMS](#CHAP_Source.MongoDB.Limitations)
+ [MongoDB를의 소스로 사용할 때 엔드포인트 구성 설정 AWS DMS](#CHAP_Source.MongoDB.Configuration)
+ [MongoDB용 소스 데이터 형식](#CHAP_Source.MongoDB.DataTypes)

## MongoDB를의 소스로 사용할 때 필요한 권한 AWS DMS
<a name="CHAP_Source.MongoDB.PrerequisitesCDC"></a>

MongoDB 소스를 사용한 AWS DMS 마이그레이션의 경우 루트 권한이 있는 사용자 계정 또는 마이그레이션할 데이터베이스에 대한 권한만 있는 사용자를 생성할 수 있습니다.

다음 코드는 루트 계정이 되도록 사용자를 생성합니다.

```
use admin
db.createUser(
  {
    user: "root",
    pwd: "password",
    roles: [ { role: "root", db: "admin" } ]
  }
)
```

MongoDB 3.x 소스의 경우, 다음 코드는 마이그레이션할 데이터베이스에 대한 최소 권한이 있는 사용자를 생성합니다.

```
use database_to_migrate
db.createUser( 
{ 
    user: "dms-user",
    pwd: "password",
    roles: [ { role: "read", db: "local" }, "read"] 
})
```

MongoDB 4.x 소스의 경우, 다음 코드는 최소 권한을 가진 사용자를 생성합니다.

```
{ resource: { db: "", collection: "" }, actions: [ "find", "changeStream" ] }
```

예를 들어 “admin” 데이터베이스에 다음 역할을 생성합니다.

```
use admin
db.createRole(
{
role: "changestreamrole",
privileges: [
{ resource: { db: "", collection: "" }, actions: [ "find","changeStream" ] }
],
roles: []
}
)
```

그리고 역할이 생성되면 마이그레이션할 데이터베이스에 사용자를 생성합니다.

```
 use test
> db.createUser( 
{ 
user: "dms-user12345",
pwd: "password",
roles: [ { role: "changestreamrole", db: "admin" }, "read"] 
})
```

## CDC를 위한 MongoDB 복제본 세트 구성
<a name="CHAP_Source.MongoDB.PrerequisitesCDC.ReplicaSet"></a>

MongoDB에서 지속적 복제 또는 CDC를 사용하려면 MongoDB 작업 로그(oplog)에 대한 액세스 권한이 AWS DMS 필요합니다. oplog를 생성하려면 복제 세트를 배포하여 합니다(복제 세트가 없는 경우). 자세한 내용은 [MongoDB 설명서](https://docs.mongodb.com/manual/tutorial/deploy-replica-set/)를 참조하세요.

CDC는 소스 엔드포인트로 설정된 MongoDB 복제본 세트의 기본 또는 보조 노드와 함께 사용할 수 있습니다.

**독립형 인스턴스를 복제본 집합으로 변환하려면**

1. 명령줄을 사용하여 `mongo`에 연결합니다.

   ```
   mongo localhost
   ```

1. `mongod` 서비스를 중단합니다.

   ```
   service mongod stop
   ```

1. 다음 명령을 사용하여 `mongod`를 다시 시작합니다.

   ```
   mongod --replSet "rs0" --auth -port port_number
   ```

1. 다음 명령을 사용하여 복제본 집합에 대한 연결을 테스트합니다.

   ```
   mongo -u root -p password --host rs0/localhost:port_number 
     --authenticationDatabase "admin"
   ```

문서 모드 마이그레이션을 계획하고 있다면 MongoDB 엔드포인트 생성 시 `_id as a separate column` 옵션을 선택하세요. 이 옵션을 선택하면 프라이머리 키로 작동하는 두 번째 열인 `_id` 가 생성됩니다. 이 두 번째 열은 데이터 조작 언어(DML) 작업을 지원하기 AWS DMS 위해에 필요합니다.

**참고**  
AWS DMS 는 작업 로그(oplog)를 사용하여 지속적 복제 중에 변경 사항을 캡처합니다. 가 레코드를 AWS DMS 읽기 전에 MongoDB가 oplog에서 레코드를 플러시하면 작업이 실패합니다. 24시간 이상 변경 사항이 유지되도록 oplog의 크기를 조정하는 것이 좋습니다.

## MongoDB를 소스로 사용할 때의 보안 요구 사항 AWS DMS
<a name="CHAP_Source.MongoDB.Security"></a>

AWS DMS는 MongoDB에 대해 두 가지 인증 방법을 지원합니다. 이 두 가지 인증 메서드는 암호를 암호화하는 데 사용되므로 `authType` 파라미터를 *PASSWORD*로 설정할 때만 사용됩니다.

MongoDB 인증 메서드는 다음과 같습니다.
+ **MONGODB-CR** - 이전 버전과의 호환성을 위해
+ **SCRAM-SHA-1** - MongoDB 버전 3.x 및 4.0 사용 시 기본값

인증 방법을 지정하지 않으면 AWS DMS는 MongoDB 소스 버전에 기본 방법을 사용합니다.

## MongoDB 모음을 분할하고 병렬로 마이그레이션
<a name="CHAP_Source.MongoDB.ParallelLoad"></a>

마이그레이션 작업의 성능을 개선하기 위해 MongoDB 소스 엔드포인트는 테이블 매핑에서 병렬 전체 로드 옵션 두 가지를 지원합니다.

다시 말해 JSON 설정에서 병렬 전체 로드를 위해 테이블 매핑에 자동 분할 또는 범위 분할을 사용하여 모음을 병렬로 마이그레이션할 수 있습니다. 자동 분할을 사용하면가 각 스레드에서 마이그레이션을 위해 소스를 자동으로 분할 AWS DMS 하는 기준을 지정할 수 있습니다. 범위 분할을 사용하면 DMS AWS DMS 가 각 스레드에서 마이그레이션하도록 각 세그먼트의 특정 범위를 지정할 수 있습니다. 이러한 설정에 대한 자세한 내용은 [테이블 및 컬렉션 설정 규칙과 작업](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Tablesettings.md) 섹션을 참조하세요.

### 자동 분할 범위를 사용하여 MongoDB 데이터베이스를 병렬로 마이그레이션
<a name="CHAP_Source.MongoDB.ParallelLoad.AutoPartitioned"></a>

 AWS DMS 가 각 스레드의 데이터를 자동으로 파티셔닝(분할)하는 기준을 지정하여 문서를 병렬로 마이그레이션할 수 있습니다. 특히 스레드당 마이그레이션할 문서 수를 지정합니다. 이 접근 방식을 사용하면는 스레드당 최대 성능을 위해 세그먼트 경계를 최적화하려고 AWS DMS 시도합니다.

테이블 매핑에서 다음 테이블 설정 옵션을 사용하여 분할 기준을 지정할 수 있습니다.


|  테이블 설정 옵션  |  설명  | 
| --- | --- | 
|  `"type"`  |  (필수) MongoDB를 소스로 사용하는 경우 `"partitions-auto"`로 설정합니다.  | 
|  `"number-of-partitions"`  |  (선택 사항) 마이그레이션에 사용되는 총 파티션(세그먼트) 수. 기본값은 16입니다.  | 
|  `"collection-count-from-metadata"`  |  (선택 사항) 이 옵션을 `true`로 설정하면 AWS DMS 는 추정 모음 개수를 사용하여 파티션 수를 결정합니다. 이 옵션이 로 설정된 경우 실제 컬렉션 수를 `false` AWS DMS 사용합니다. 기본값은 `true`입니다.  | 
|  `"max-records-skip-per-page"`  |  (선택 사항) 각 파티션의 경계를 결정할 때 한 번에 건너뛸 레코드 수입니다.는 페이지가 매겨진 건너뛰기 접근 방식을 AWS DMS 사용하여 파티션의 최소 경계를 결정합니다. 기본값은 10,000입니다. 상대적으로 큰 값을 설정하면 커서 시간이 초과되고 작업이 실패할 수 있습니다. 상대적으로 작은 값을 설정하면 페이지당 작업 수가 늘어나고 전체 로드 속도가 느려집니다.  | 
|  `"batch-size"`  |  (선택 사항) 배치 하나에서 반환되는 문서 수를 제한합니다. 배치마다 서버를 왕복해야 합니다. 배치 크기가 0인 경우, 커서는 서버에서 정의한 최대 배치 크기를 사용합니다. 기본값은 0입니다.  | 

다음 예제는 자동 분할을 위한 테이블 매핑을 보여 줍니다.

```
{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "object-locator": {
                "schema-name": "admin",
                "table-name": "departments"
            },
            "rule-action": "include",
            "filters": []
        },
        {
            "rule-type": "table-settings",
            "rule-id": "2",
            "rule-name": "2",
            "object-locator": {
                "schema-name": "admin",
                "table-name": "departments"
            },
            "parallel-load": {
                "type": "partitions-auto",
                "number-of-partitions": 5,
                "collection-count-from-metadata": "true",
                "max-records-skip-per-page": 1000000,
                "batch-size": 50000
            }
        }
    ]
}
```

자동 분할에는 다음과 같은 제한이 있습니다. 각 세그먼트의 마이그레이션은 모음 개수와 모음의 최소 `_id`를 개별적으로 가져옵니다. 그런 다음 페이지 매김 건너뛰기를 사용하여 해당 세그먼트의 최소 경계를 계산합니다.

따라서 모음의 모든 세그먼트 경계를 계산할 때까지 각 모음의 최소 `_id` 값이 일정하게 유지되어야 합니다. 세그먼트 경계를 계산하는 동안 모음의 최소 `_id` 값을 변경하면 데이터가 손실되거나 행 중복 오류가 발생할 수 있습니다.

### 범위 분할을 사용하여 MongoDB 데이터베이스를 병렬로 마이그레이션
<a name="CHAP_Source.MongoDB.ParallelLoad.Ranges"></a>

스레드의 각 세그먼트마다 범위를 지정하여 문서를 병렬로 마이그레이션할 수 있습니다. 이 접근 방식을 사용하면 스레드당 선택한 문서 범위에 따라 AWS DMS 특정 문서가 각 스레드에서 마이그레이션하도록 지시할 수 있습니다.

다음 예제에 나온 MongoDB 모음에는 항목 7개와 프라이머리 키 `_id`가 있습니다.

![\[7개의 항목이 있는 MongoDB 모음.\]](http://docs.aws.amazon.com/ko_kr/dms/latest/userguide/images/datarep-docdb-collection.png)


가 병렬로 마이그레이션 AWS DMS 하기 위해 컬렉션을 3개의 특정 세그먼트로 분할하려면 마이그레이션 작업에 테이블 매핑 규칙을 추가할 수 있습니다. 이 방법은 다음 JSON 예제에 나와 있습니다.

```
{ // Task table mappings:
  "rules": [
    {
      "rule-type": "selection",
      "rule-id": "1",
      "rule-name": "1",
      "object-locator": {
        "schema-name": "testdatabase",
        "table-name": "testtable"
      },
      "rule-action": "include"
    }, // "selection" :"rule-type"
    {
      "rule-type": "table-settings",
      "rule-id": "2",
      "rule-name": "2",
      "object-locator": {
        "schema-name": "testdatabase",
        "table-name": "testtable"
      },
      "parallel-load": {
        "type": "ranges",
        "columns": [
           "_id",
           "num"
        ],
        "boundaries": [
          // First segment selects documents with _id less-than-or-equal-to 5f805c97873173399a278d79
          // and num less-than-or-equal-to 2.
          [
             "5f805c97873173399a278d79",
             "2"
          ],
          // Second segment selects documents with _id > 5f805c97873173399a278d79 and
          // _id less-than-or-equal-to 5f805cc5873173399a278d7c and
          // num > 2 and num less-than-or-equal-to 5.
          [
             "5f805cc5873173399a278d7c",
             "5"
          ]                                   
          // Third segment is implied and selects documents with _id > 5f805cc5873173399a278d7c.
        ] // :"boundaries"
      } // :"parallel-load"
    } // "table-settings" :"rule-type"
  ] // :"rules"
} // :Task table mappings
```

이 테이블 매핑 정의는 소스 모음을 세 개의 세그먼트로 분할하고 병렬로 마이그레이션합니다. 분할 경계는 다음과 같습니다.

```
Data with _id less-than-or-equal-to "5f805c97873173399a278d79" and num less-than-or-equal-to 2 (2 records)
Data with _id > "5f805c97873173399a278d79" and num > 2 and _id  less-than-or-equal-to "5f805cc5873173399a278d7c" and num less-than-or-equal-to 5 (3 records)
Data with _id > "5f805cc5873173399a278d7c" and num > 5 (2 records)
```

마이그레이션 작업이 완료되면 다음 예제와 같이 작업 로그에서 테이블이 병렬로 로드된 것을 확인할 수 있습니다. 소스 테이블에서 각 세그먼트를 언로드하는 데 사용된 MongoDB `find` 절도 확인할 수 있습니다.

```
[TASK_MANAGER    ] I:  Start loading segment #1 of 3 of table 'testdatabase'.'testtable' (Id = 1) by subtask 1. Start load timestamp 0005B191D638FE86  (replicationtask_util.c:752)

[SOURCE_UNLOAD   ] I:  Range Segmentation filter for Segment #0 is initialized.   (mongodb_unload.c:157)

[SOURCE_UNLOAD   ] I:  Range Segmentation filter for Segment #0 is: { "_id" : { "$lte" : { "$oid" : "5f805c97873173399a278d79" } }, "num" : { "$lte" : { "$numberInt" : "2" } } }  (mongodb_unload.c:328)

[SOURCE_UNLOAD   ] I: Unload finished for segment #1 of segmented table 'testdatabase'.'testtable' (Id = 1). 2 rows sent.

[TASK_MANAGER    ] I: Start loading segment #1 of 3 of table 'testdatabase'.'testtable' (Id = 1) by subtask 1. Start load timestamp 0005B191D638FE86 (replicationtask_util.c:752)
 
[SOURCE_UNLOAD   ] I: Range Segmentation filter for Segment #0 is initialized. (mongodb_unload.c:157) 

[SOURCE_UNLOAD   ] I: Range Segmentation filter for Segment #0 is: { "_id" : { "$lte" : { "$oid" : "5f805c97873173399a278d79" } }, "num" : { "$lte" : { "$numberInt" : "2" } } } (mongodb_unload.c:328)
 
[SOURCE_UNLOAD   ] I: Unload finished for segment #1 of segmented table 'testdatabase'.'testtable' (Id = 1). 2 rows sent.

[TARGET_LOAD     ] I: Load finished for segment #1 of segmented table 'testdatabase'.'testtable' (Id = 1). 1 rows received. 0 rows skipped. Volume transfered 480.

[TASK_MANAGER    ] I: Load finished for segment #1 of table 'testdatabase'.'testtable' (Id = 1) by subtask 1. 2 records transferred.
```

현재는 다음 MongoDB 데이터 형식을 세그먼트 키 열로 AWS DMS 지원합니다.
+ 배정밀도 실수
+ 문자열
+ ObjectId
+ 32비트 정수
+ 64비트 정수

## MongoDB를 소스로 사용할 때 여러 데이터베이스 마이그레이션 AWS DMS
<a name="CHAP_Source.MongoDB.Multidatabase"></a>

AWS DMS 버전 3.4.5 이상에서는 지원되는 모든 MongoDB 버전에 대해 단일 작업으로 여러 데이터베이스를 마이그레이션할 수 있습니다. 여러 데이터베이스를 마이그레이션하려면 다음 단계에 따릅니다.

1. MongoDB 소스 엔드포인트를 생성할 때 다음 중 하나를 수행합니다.
   + DMS 콘솔의 **엔드포인트 생성** 페이지에서 **엔드포인트 구성** 아래 **데이터베이스 이름**을 비워 둡니다.
   + 명령을 사용하여 AWS CLI `CreateEndpoint`의 `DatabaseName` 파라미터에 빈 문자열 값을 할당합니다`MongoDBSettings`.

1. MongoDB 소스에서 마이그레이션하려는 각 데이터베이스의 데이터베이스 이름을 작업 테이블 매핑의 스키마 이름으로 지정합니다. 콘솔의 안내 입력을 사용하거나 JSON에서 직접 이 작업을 수행할 수 있습니다. 안내 입력에 대한 자세한 내용은 [콘솔에서 테이블 선택 및 변환 규칙 지정](CHAP_Tasks.CustomizingTasks.TableMapping.Console.md) 섹션을 참조하세요. JSON에 대한 자세한 내용은 [선택 규칙 및 작업](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Selections.md) 섹션을 참조하세요.

예를 들면 다음과 같이 JSON을 지정하여 MongoDB 데이터베이스 3개를 마이그레이션할 수 있습니다.

**Example 스키마에서 모든 테이블 마이그레이션**  
다음 JSON은 소스 엔드포인트에 있는 `Customers`, `Orders`, `Suppliers` 데이터베이스의 모든 테이블을 대상 엔드포인트로 마이그레이션합니다.  

```
{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "object-locator": {
                "schema-name": "Customers",
                "table-name": "%"
            },
            "rule-action": "include",
            "filters": []
        },
        {
            "rule-type": "selection",
            "rule-id": "2",
            "rule-name": "2",
            "object-locator": {
                "schema-name": "Orders",
                "table-name": "%"
            },
            "rule-action": "include",
            "filters": []
        },
        {
            "rule-type": "selection",
            "rule-id": "3",
            "rule-name": "3",
            "object-locator": {
                "schema-name": "Inventory",
                "table-name": "%"
            },
            "rule-action": "include",
            "filters": []
        }
    ]
}
```

## MongoDB를의 소스로 사용할 때의 제한 사항 AWS DMS
<a name="CHAP_Source.MongoDB.Limitations"></a>

MongoDB를 소스로 사용할 때의 제한 사항은 AWS DMS다음과 같습니다.
+ 테이블 모드에서 모음에 있는 문서의 데이터 형식은 동일한 필드의 값에 사용하는 데이터 형식과 일치해야 합니다. 예를 들어 모음의 문서에 `'{ a:{ b:value ... }'`가 포함된 경우, 해당 `a.b` 필드의 `value`를 참조하는 모음의 모든 문서는 모음의 어디에 표시되든 `value`에 동일한 데이터 형식을 사용해야 합니다.
+ `_id` 옵션이 별도의 열로 설정된 경우 ID 문자열이 200자를 초과할 수 없습니다.
+ 객체 ID와 배열 형식 키는 테이블 모드에서 `oid` 및 `array` 접두사가 붙은 열로 변환됩니다.

  내부적으로 이러한 열은 접두사 이름으로 참조됩니다. 이러한 열을 참조 AWS DMS 하는에서 변환 규칙을 사용하는 경우 접두사가 붙은 열을 지정해야 합니다. 예를 들면 `${oid__id}`를 지정하고 `${_id}`를 지정하지 않거나 `${array__addresses}`를 지정하고 `${_addresses}`는 지정하지 않습니다.
+  모음 이름과 키 이름에는 달러 기호(\$1)를 포함할 수 없습니다.
+ AWS DMS 는 RDBMS 대상이 있는 테이블 모드에서 대소문자가 다른(상위, 아래) 동일한 필드가 포함된 컬렉션을 지원하지 않습니다. 예를 들어 AWS DMS 는 `Field1` 및 라는 두 개의 컬렉션이 있는 것을 지원하지 않습니다`field1`.
+ 테이블 모드와 문서 모드에는 앞서 설명한 제한이 있습니다.
+ 자동 분할을 사용한 병렬 마이그레이션에는 앞에서 설명한 제한 사항이 있습니다.
+ MongoDB에는 소스 필터가 지원되지 않습니다.
+ AWS DMS 는 중첩 수준이 97보다 큰 문서를 지원하지 않습니다.
+ AWS DMS 에서는 DocumentDB가 아닌 대상으로 마이그레이션할 때 UTF-8 인코딩 소스 데이터가 필요합니다. non-UTF-8 소스의 경우 마이그레이션하기 전에 UTF-8로 변환하거나 대신 Amazon DocumentDB로 마이그레이션합니다.
+ AWS DMS 는 MongoDB 버전 5.0의 다음 기능을 지원하지 않습니다.
  + 라이브 리샤딩
  + 클라이언트 측 필드 수준 암호화(CSFLE)
  + 시계열 모음 마이그레이션
**참고**  
Amazon DocumentDB는 시계열 모음을 지원하지 않기 때문에 전체 로드 단계에서 마이그레이션된 시계열 모음은 Amazon DocumentDB에서 일반 모음으로 변환됩니다.

## MongoDB를의 소스로 사용할 때 엔드포인트 구성 설정 AWS DMS
<a name="CHAP_Source.MongoDB.Configuration"></a>

MongoDB 소스 엔드포인트를 설정할 때 AWS DMS 콘솔을 사용하여 여러 엔드포인트 구성 설정을 지정할 수 있습니다.

다음 표에서는 MongoDB 데이터베이스를 AWS DMS 소스로 사용할 때 사용할 수 있는 구성 설정을 설명합니다.


| 설정(속성) | 유효값 | 기본값과 설명 | 
| --- | --- | --- | 
|  **인증 모드**  |  `"none"` `"password"`  |  값 `"password"`는 사용자 이름과 암호를 입력하라는 메시지를 표시합니다. `"none"`을 지정하면 사용자 이름 및 암호 파라미터가 사용되지 않습니다.  | 
|  **인증 소스**  |  유효한 MongoDB 데이터베이스 이름입니다.  |  인증을 위한 자격 증명 정보를 검증하는 데 사용할 MongoDB 데이터베이스의 이름입니다. 기본값은 `"admin"`입니다.  | 
|  **인증 메커니즘**  |  `"default"` `"mongodb_cr"` `"scram_sha_1"`  |  인증 메커니즘입니다. ` "default"` 값은 `"scram_sha_1"`입니다. `authType`이 `"no"`로 설정된 경우에는 이 설정이 사용되지 않습니다.  | 
|  **메타데이터 모드**  |  문서 및 테이블  |  문서 모드 또는 테이블 모드를 선택합니다.  | 
|  **스캔할 문서 수**(`docsToInvestigate`)  |  `0`보다 큰 양의 정수입니다.  |  이 옵션은 테이블 모드에서 대상 테이블 정의를 정의할 때만 사용하세요.  | 
|  **\$1id를 별도의 열로**  |  상자의 확인 표시  |  프라이머리 키 역할을 하는 `_id`라는 두 번째 열을 생성하는 선택적 확인 표시 상자입니다.  | 
|   `ExtractDocID`   |  `true` `false`  |  `false` - 이 속성은 `NestingLevel`이 `"none"`으로 설정된 경우에 사용합니다. [다중 문서 트랜잭션](https://www.mongodb.com/docs/manual/reference/method/Session.startTransaction/#mongodb-method-Session.startTransaction)을 생성하는 소스와 함께 CDC를 사용하는 경우 `ExtractDocId` 파라미터를 로 설정해야 **합니다**`true`. 이 파라미터를 활성화하지 않으면 다중 문서 트랜잭션이 발생하면 AWS DMS 작업이 실패합니다.  | 
|  `socketTimeoutMS`  |  0보다 크거나 같은 정수입니다. 추가 연결 속성(ECA) 전용입니다.  |  이 설정은 밀리초 단위이며 MongoDB 클라이언트의 연결 제한 시간을 구성합니다. 값이 0보다 작거나 같으면 MongoDB 클라이언트 기본값이 사용됩니다.  | 
|   `UseUpdateLookUp`   |  `true` `false`  |  true인 경우 CDC 업데이트 이벤트 중에는 업데이트된 문서 전체를 대상으로 AWS DMS 복사합니다. false로 설정하면 MongoDB 업데이트 명령을 AWS DMS 사용하여 대상의 문서에서 수정된 필드만 업데이트합니다.  | 
|   `ReplicateShardCollections`   |  `true` `false`  |  true인 경우는 데이터를 샤드 컬렉션에 AWS DMS 복제합니다. 대상 엔드포인트가 DocumentDB 탄력적 클러스터인 경우에만는이 설정을 AWS DMS 사용합니다. 이 설정이 true인 경우 다음 사항에 유의하세요. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/dms/latest/userguide/CHAP_Source.MongoDB.html)  | 
|  `useTransactionVerification`  |  `true` `false`  |  `false`인 경우는 변경 스트림과 oplog 간의 확인을 비활성화합니다.  기본 DMS 동작은 이러한 시나리오에서 작업에 실패하는 것이므로 변경 스트림과 oplog 항목 간에 불일치가 발생하는 경우 작업을 놓칠 수 있습니다. 기본값: `true`.   | 
|  `useOplog`  |  `true` `false`  |  `true`인 경우를 사용하면 DMS 태스크가 변경 스트림을 사용하는 대신 'oplog'에서 직접 읽을 수 있습니다. 기본값: `false`.  | 

**문서**를 **메타데이터 모드**로 선택하면 다른 옵션을 사용할 수 있습니다.

대상 엔드포인트가 DocumentDB인 경우, **문서 모드**에서 마이그레이션을 실행해야 합니다. 또한 소스 엔드포인트를 수정하고 **\$1id를 별도의 열로** 옵션을 선택합니다. 이는 소스 MongoDB 워크로드에 트랜잭션이 포함된 경우에 필수 사전 요구 사항입니다.

## MongoDB용 소스 데이터 형식
<a name="CHAP_Source.MongoDB.DataTypes"></a>

MongoDB를 소스로 사용하는 데이터 마이그레이션은 대부분의 MongoDB 데이터 유형을 AWS DMS 지원합니다. 다음 표에서는를 사용할 때 지원되는 MongoDB 소스 데이터 형식 AWS DMS 과 AWS DMS 데이터 형식의 기본 매핑을 확인할 수 있습니다. MongoDB 데이터 형식에 대한 자세한 내용은 MongoDB 설명서의 [BSON Types(BSON 형식)](https://docs.mongodb.com/manual/reference/bson-types)를 참조하세요.

대상에서 매핑된 데이터 형식을 확인하는 방법에 대한 정보는 사용 중인 대상 엔드포인트에 대한 섹션을 참조하세요.

 AWS DMS 데이터 형식에 대한 자세한 내용은 섹션을 참조하세요[AWS Database Migration Service에서 사용되는 데이터 형식](CHAP_Reference.DataTypes.md).


|  MongoDB 데이터 형식  |  AWS DMS 데이터 유형  | 
| --- | --- | 
| 부울 | 부울 | 
| 바이너리 | BLOB | 
| Date | Date | 
| 타임스탬프 | Date | 
| 정수 | INT4 | 
| Long | INT8 | 
| 배정밀도 실수 | REAL8 | 
| 문자열(UTF-8) | CLOB | 
| 배열 | CLOB | 
| OID | 문자열 | 
| REGEX | CLOB | 
| 코드  | CLOB | 