

# DynamoDB local 사용 참고 사항
<a name="DynamoDBLocal.UsageNotes"></a>

 엔드포인트를 제외하고 Amazon DynamoDB의 다운로드 가능 버전으로 실행되는 애플리케이션은 DynamoDB 웹 서비스로도 작동됩니다. 그러나 DynamoDB를 로컬에서 사용하는 경우에는 다음 사항을 숙지해야 합니다.
+  `-sharedDb` 옵션을 사용하면 DynamoDB에서 이름이 *shared-local-instance.db*인 단일 데이터베이스 파일이 생성합니다. DynamoDB에 연결되는 모든 프로그램은 이 파일에 액세스합니다. 이 파일을 삭제하면 파일에 저장된 모든 데이터가 손실됩니다.
+  `-sharedDb`를 누락하면 데이터베이스 파일의 이름은 *myaccesskeyid\$1region.db*로 설정되고, AWS 액세스 키 ID 및 AWS 리전은 애플리케이션 구성에 표시된 대로 지정됩니다. 이 파일을 삭제하면 파일에 저장된 모든 데이터가 손실됩니다.
+  `-inMemory` 옵션을 사용하면 DynamoDB는 데이터베이스 파일을 기록하지 않습니다. 대신 모든 데이터가 메모리에 기록되지만 DynamoDB를 종료할 때 데이터가 저장되지 않습니다.
+  `-inMemory` 옵션을 사용하는 경우 `-sharedDb` 옵션도 필요합니다.
+  `-optimizeDbBeforeStartup` 옵션을 사용하는 경우 DynamoDB가 데이터베이스 파일을 찾을 수 있도록 `-dbPath` 파라미터도 지정해야 합니다.
+  DynamoDB용 AWS SDK의 경우 애플리케이션 구성에서 액세스 키 값과 AWS 리전 값을 지정해야 합니다. `-sharedDb` 또는 `-inMemory` 옵션을 사용하지 않는 한, DynamoDB는 이러한 값을 사용하여 로컬 데이터베이스 파일의 이름을 지정합니다. 이 값들은 로컬에서 실행하기 위해서 유효한 AWS 값일 필요는 없습니다. 그러나 유효한 값을 사용할 경우 나중에 사용 중인 엔드포인트를 변경하면 클라우드에서 코드를 실행할 수 있으므로 유용할 것입니다.
+  DynamoDB Local은 `billingModeSummary.`에 대해 항상 null을 반환합니다.
+  DynamoDB Local `AWS_ACCESS_KEY_ID`에는 문자(A\$1Z, a\$1z)와 숫자(0\$19)만 포함될 수 있습니다.
+ DynamoDB Local은 [시점 복구(PITR)](Point-in-time-recovery.md)를 지원하지 않습니다.

**Topics**
+ [명령줄 옵션](#DynamoDBLocal.CommandLineOptions)
+ [로컬 엔드포인트 설정](#DynamoDBLocal.Endpoint)
+ [다운로드 가능한 DynamoDB와 DynamoDB 웹 서비스의 차이점](#DynamoDBLocal.Differences)

## 명령줄 옵션
<a name="DynamoDBLocal.CommandLineOptions"></a>

 DynamoDB 다운로드 가능 버전과 함께 다음 명령줄 옵션을 사용할 수 있습니다.
+  `-cors` `value` - JavaScript용 CORS(cross-origin 리소스 공유) 지원을 활성화합니다. 특정 도메인에 대해 쉼표로 구분된 "허용" 목록을 제공해야 합니다. `-cors`의 기본 설정은 별표(\$1)이며, 퍼블릭 액세스를 허용합니다.
+  `-dbPath` `value` - DynamoDB가 데이터베이스 파일을 기록할 디렉터리입니다. 이 옵션을 지정하지 않으면 현재 디렉터리에 파일이 기록됩니다. `-dbPath` 및 `-inMemory`를 동시에 지정할 수 없다는 점을 유의하세요.
+  `-delayTransientStatuses` - DynamoDB가 특정 작업을 지연시키도록 합니다. DynamoDB(다운로드 가능 버전)는 테이블 및 인덱스의 생성/업데이트/삭제 작업과 같은 일부 태스크를 거의 즉각적으로 수행할 수 있습니다. 그러나 DynamoDB 서비스에서는 이러한 태스크를 수행하는 데 시간이 더 소요됩니다. 이 파라미터를 설정하면 컴퓨터에서 실행되는 DynamoDB에서 DynamoDB 웹 서비스의 동작을 더욱 면밀하게 시뮬레이션할 수 있습니다. (현재 이 파라미터는 *생성* 또는 *삭제* 상태의 글로벌 보조 인덱스만 지연시킬 수 있습니다.) 
+  `-help` - 사용 요약 및 옵션을 인쇄합니다.
+  `-inMemory` - DynamoDB는 데이터베이스 파일을 사용하는 대신 메모리에서 실행됩니다. DynamoDB를 중지하면 데이터가 저장되지 않습니다. `-dbPath` 및 `-inMemory`를 동시에 지정할 수 없다는 점을 유의하세요.
+  `-optimizeDbBeforeStartup` - 컴퓨터에서 DynamoDB를 시작하기 전에 기본 데이터베이스 테이블을 최적화합니다. 이 파라미터를 사용할 때에는 `-dbPath`도 함께 지정해야 합니다.
+  `-port` `value` - DynamoDB가 애플리케이션과 통신하기 위해 사용할 포트 번호입니다. 이 옵션을 지정하지 않으면 기본 포트는 `8000`입니다.
**참고**  
 DynamoDB는 기본적으로 8000번 포트를 사용합니다. 8000번 포트를 사용할 수 없는 경우에는 이 명령에서 예외가 발생합니다. `-port` 옵션을 사용하여 다른 포트 번호를 지정할 수 있습니다. `-port`를 포함한 DynamoDB 런타임 옵션의 전체 목록을 보려면 다음 명령어를 입력합니다.  
 `java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -help` 
+  `-sharedDb` - `-sharedDb`를 지정하는 경우, DynamoDB에서는 자격 증명과 리전마다 별도의 파일을 사용하는 대신 데이터베이스 파일 하나를 사용합니다.
+  `-disableTelemetry` - 지정된 경우 DynamoDB Local은 텔레메트리를 전송하지 않습니다.
+ `-version` - DynamoDB 로컬 버전을 인쇄합니다.

## 로컬 엔드포인트 설정
<a name="DynamoDBLocal.Endpoint"></a>

 기본적으로 AWS SDK 및 도구는 Amazon DynamoDB 웹 서비스에 대한 엔드포인트를 사용합니다. DynamoDB 다운로드 가능 버전에서 SDK 및 도구를 사용하려면 로컬 엔드포인트를 지정해야 합니다.

 `http://localhost:8000` 

### AWS Command Line Interface
<a name="DynamoDBLocal.Endpoint.CLI"></a>

 AWS Command Line Interface(AWS CLI)를 사용하여 DynamoDB 다운로드 가능 버전과 상호 작용할 수 있습니다.

 로컬에서 실행되는 DynamoDB에 액세스하려면 `--endpoint-url` 파라미터를 사용합니다. 다음은 AWS CLI를 사용하여 컴퓨터의 DynamoDB에 테이블을 나열하는 예입니다.

```
aws dynamodb list-tables --endpoint-url http://localhost:8000
```

**참고**  
 AWS CLI는 기본 엔드포인트로 DynamoDB 다운로드 가능 버전을 사용할 수 없습니다. 따라서 각 `--endpoint-url` 명령을 사용하여 AWS CLI을 지정해야 합니다.

### AWS SDK
<a name="DynamoDBLocal.Endpoint.SDK"></a>

 엔드포인트를 지정하는 방법은 사용하는 프로그래밍 언어 및 AWS SDK에 따라 다릅니다. 다음 섹션에서 그 방법에 대해 설명합니다.
+  [Java: AWS 리전 및 엔드포인트 설정](CodeSamples.Java.md#CodeSamples.Java.RegionAndEndpoint)(DynamoDB Local은 AWS SDK for Java V1 및 V2 지원) 
+ CodeSamples.Java.RegionAndEndpoint [.NET: AWS 리전 및 엔드포인트 설정](CodeSamples.DotNet.md#CodeSamples.DotNet.RegionAndEndpoint) 

## 다운로드 가능한 DynamoDB와 DynamoDB 웹 서비스의 차이점
<a name="DynamoDBLocal.Differences"></a>

 DynamoDB 다운로드 가능 버전은 개발 및 테스트용일 뿐입니다. 비교하자면 DynamoDB 웹 서비스는 확장성, 가용성 및 내구성을 갖춘 관리형 서비스로서 프로덕션 환경에 이상적입니다.

 DynamoDB 다운로드 가능 버전은 다음 방식에서 웹 서비스와 차이가 있습니다.
+ AWS 리전과 별개의 AWS 계정은 클라이언트 수준에서 지원되지 않습니다.
+  `CreateTable` 작업에서 필요하더라도 프로비저닝된 처리량 설정이 DynamoDB 다운로드 가능 버전에서 무시됩니다. `CreateTable`의 경우, 실제로 사용되지 않더라도 할당된 읽기 및 쓰기 처리량에 원하는 숫자를 지정할 수 있습니다. 하루에도 언제든지 필요한 만큼 `UpdateTable`을 호출할 수 있습니다. 그러나 프로비저닝된 처리량 값의 변경 내용은 무시됩니다.
+  `Scan` 작업이 순차적으로 수행되고 있습니다. 병렬 검색은 지원되지 않습니다. `Segment` 작업의 `TotalSegments` 및 `Scan` 파라미터는 무시됩니다.
+  테이블 데이터의 읽기 및 쓰기 작업 속도는 컴퓨터 속도에 의해서만 제한됩니다. `CreateTable`, `UpdateTable` 및 `DeleteTable` 작업이 즉시 발생하며 테이블은 항상 활성 상태입니다. 테이블 또는 글로벌 보조 인덱스에서 프로비저닝된 처리량 설정만 변경하는 `UpdateTable` 작업이 즉시 발생합니다. `UpdateTable` 작업이 글로벌 보조 인덱스를 생성하거나 삭제하는 경우, 해당 인덱스가 활성 상태가 되기 전에 정상 상태(생성 또는 삭제)로 전환됩니다. 이 때 테이블은 계속 활성 상태로 유지됩니다.
+  읽기 작업은 일정하게 유지됩니다. 그러나 컴퓨터에서 실행되는 DynamoDB 로컬의 속도 때문에 대부분의 읽기 작업은 매우 일정하게 유지됩니다.
+  항목 컬렉션 지표 및 항목 컬렉션 크기는 추적되지 않습니다. 작업 응답에서 항목 컬렉션 지표 대신 null 값이 반환됩니다.
+  DynamoDB의 경우, 결과 집합당 반환되는 데이터는 최대 1MB로 제한됩니다. DynamoDB 웹 서비스 및 다운로드 가능 버전 모두에서 이 제한이 적용됩니다. 그러나 인덱스를 쿼리하면 DynamoDB 서비스는 프로젝션된 키와 속성의 크기만 계산합니다. 이와 달리, 다운로드 버전 DynamoDB는 전체 항목의 크기를 계산합니다.
+  DynamoDB Streams를 사용할 경우 샤드의 생성 속도가 다를 수 있습니다. DynamoDB 웹 서비스에서 샤드 생성 동작은 부분적으로 테이블 분할 작업의 영향을 받습니다. 로컬에서 DynamoDB를 실행할 경우에는 테이블 분할 기능이 없습니다. 두 경우 모두 샤드는 일시적으로만 존재하므로 애플리케이션이 샤드 동작에 의존해서는 안 됩니다.
+  `TransactionConflictExceptions`는 트랜잭션 API에 대해 DynamoDB(다운로드 가능 버전)에서 생성하지 않습니다. Java 모의 프레임워크를 통해 DynamoDB 핸들러에서 `TransactionConflictExceptions`를 시뮬레이션하여 애플리케이션이 충돌하는 트랜잭션에 대응하는 방식을 테스트합니다.
+  DynamoDB 웹 서비스에서, 콘솔을 통해 액세스하든 AWS CLI를 통해 액세스하든 테이블 이름은 대소문자를 구분합니다. `Authors`라는 테이블과 `authors`이라는 테이블이 별도의 테이블로 공존할 수 있습니다. 다운로드가 가능한 버전에서 테이블 이름은 대/소문자를 구분하며, 이러한 두 테이블을 생성하려고 시도하면 오류가 발생할 수 있습니다.
+ DynamoDB의 다운로드 가능 버전에서는 태깅이 지원되지 않습니다.
+ DynamoDB 다운로드 가능 버전은 [ExecuteStatement](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_ExecuteStatement.html)의 [Limit](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_ExecuteStatement.html#DDB-ExecuteStatement-request-Limit) 파라미터를 무시합니다.