DynamoDB Local 사용 시 주의사항 - Amazon DynamoDB

DynamoDB Local 사용 시 주의사항

엔드포인트를 제외하고 Amazon DynamoDB의 다운로드 가능 버전으로 실행되는 애플리케이션은 DynamoDB 웹 서비스로도 작동됩니다. 그러나 DynamoDB를 로컬에서 사용하는 경우에는 다음 사항을 숙지해야 합니다.

  • -sharedDb 옵션을 사용하면 DynamoDB에서 이름이 shared-local-instance.db인 단일 데이터베이스 파일이 생성합니다. DynamoDB에 연결되는 모든 프로그램은 이 파일에 액세스합니다. 이 파일을 삭제하면 파일에 저장된 모든 데이터가 손실됩니다.

  • -sharedDb를 누락하면 데이터베이스 파일의 이름은 myaccesskeyid_region.db로 설정되고, AWS 액세스 키 ID 및 AWS 리전은 애플리케이션 구성에 표시된 대로 지정됩니다. 이 파일을 삭제하면 파일에 저장된 모든 데이터가 손실됩니다.

  • -inMemory 옵션을 사용하면 DynamoDB는 데이터베이스 파일을 기록하지 않습니다. 대신 모든 데이터가 메모리에 기록되지만 DynamoDB를 종료할 때 데이터가 저장되지 않습니다.

  • -optimizeDbBeforeStartup 옵션을 사용하는 경우 DynamoDB가 데이터베이스 파일을 찾을 수 있도록 -dbPath 파라미터도 지정해야 합니다.

  • DynamoDB용 AWS SDK의 경우 애플리케이션 구성에서 액세스 키 값과 AWS 리전 값을 지정해야 합니다. -sharedDb 또는 -inMemory 옵션을 사용하지 않는 한, DynamoDB는 이러한 값을 사용하여 로컬 데이터베이스 파일의 이름을 지정합니다. 이 값들은 로컬에서 실행하기 위해서 유효한 AWS 값일 필요는 없습니다. 그러나 유효한 값을 사용할 경우 나중에 사용 중인 엔드포인트를 변경하면 클라우드에서 코드를 실행할 수 있으므로 유용할 것입니다.

명령줄 옵션

DynamoDB 다운로드 가능 버전과 함께 다음 명령줄 옵션을 사용할 수 있습니다.

  • -cors value - JavaScript용 CORS(cross-origin 리소스 공유) 지원을 활성화합니다. 특정 도메인에 대해 쉼표로 구분된 "허용" 목록을 제공해야 합니다. -cors의 기본 설정은 별표(*)이며, 퍼블릭 액세스를 허용합니다.

  • -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에서는 자격 증명과 리전마다 별도의 파일을 사용하는 대신 데이터베이스 파일 하나를 사용합니다.

로컬 엔드포인트 설정

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

http://localhost:8000

AWS Command Line Interface

AWS Command Line Interface(AWS CLI)를 사용하여 DynamoDB 다운로드 가능 버전과 상호 작용할 수 있습니다. 예를 들어 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

엔드포인트를 지정하는 방법은 사용하는 프로그래밍 언어 및 AWS SDK에 따라 다릅니다. 다음 단원에서 그 방법에 대해 설명합니다.

참고

다른 프로그래밍 언어의 예는 DynamoDB 및 AWS SDK 시작하기 단원을 참조하세요.

DynamoDB 다운로드 가능 버전과 DynamoDB 웹 서비스 간 차이

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

DynamoDB 다운로드 가능 버전은 다음 방식에서 웹 서비스와 차이가 있습니다.

  • AWS 리전과 별개의 AWS 계정은 클라이언트 수준에서 지원되지 않습니다.

  • CreateTable 작업에서 필요하더라도 프로비저닝된 처리량 설정이 DynamoDB 다운로드 가능 버전에서 무시됩니다. CreateTable의 경우, 실제로 사용되지 않더라도 할당된 읽기 및 쓰기 처리량에 원하는 숫자를 지정할 수 있습니다. 하루에도 언제든지 필요한 만큼 UpdateTable을 호출할 수 있습니다. 그러나 프로비저닝된 처리량 값의 변경 내용은 무시됩니다.

  • Scan 작업이 순차적으로 수행되고 있습니다. 병렬 검색은 지원되지 않습니다. Segment 작업의 TotalSegmentsScan 파라미터는 무시됩니다.

  • 테이블 데이터의 읽기 및 쓰기 작업 속도는 컴퓨터 속도에 의해서만 제한됩니다. CreateTable, UpdateTableDeleteTable 작업이 즉시 발생하며 테이블은 항상 활성 상태입니다. 테이블 또는 글로벌 보조 인덱스에서 프로비저닝된 처리량 설정만 변경하는 UpdateTable 작업이 즉시 발생합니다. UpdateTable 작업이 글로벌 보조 인덱스를 생성하거나 삭제하는 경우, 해당 인덱스가 활성 상태가 되기 전에 정상 상태(생성 또는 삭제)로 전환됩니다. 이 때 테이블은 계속 활성 상태로 유지됩니다.

  • 읽기 작업은 일정하게 유지됩니다. 그러나 컴퓨터에서 실행되는 DynamoDB의 속도 때문에 대부분의 읽기 작업은 매우 일정하게 유지됩니다.

  • 항목 컬렉션 지표 및 항목 컬렉션 크기는 추적되지 않습니다. 작업 응답에서 항목 컬렉션 지표 대신 null 값이 반환됩니다.

  • DynamoDB의 경우, 결과 집합당 반환되는 데이터는 최대 1MB로 제한됩니다. DynamoDB 웹 서비스 및 다운로드 가능 버전 모두에서 이 제한이 적용됩니다. 그러나 인덱스를 쿼리하면 DynamoDB 서비스는 프로젝션된 키와 속성의 크기만 계산합니다. 이와 달리, 다운로드 버전 DynamoDB는 전체 항목의 크기를 계산합니다.

  • DynamoDB Streams를 사용할 경우 샤드의 생성 속도가 다를 수 있습니다. DynamoDB 웹 서비스에서 샤드 생성 동작은 부분적으로 테이블 분할 작업의 영향을 받습니다. 로컬에서 DynamoDB를 실행할 경우에는 테이블 분할 기능이 없습니다. 두 경우 모두 샤드는 일시적으로만 존재하므로 애플리케이션이 샤드 동작에 의존해서는 안 됩니다.

  • TransactionConflictExceptions은 트랜잭션 API에 대해 DynamoDB(다운로드 버전)에서 생성하지 않습니다. Java 모의 프레임워크를 통해 DynamoDB 핸들러에서 TransactionConflictExceptions를 시뮬레이션하여 애플리케이션이 충돌하는 트랜잭션에 대응하는 방식을 테스트합니다.

  • DynamoDB 웹 서비스에서 테이블 이름은 대/소문자를 구분합니다. Authors라는 테이블과 authors이라는 테이블이 별도의 테이블로 공존할 수 있습니다. 다운로드가 가능한 버전에서 테이블 이름은 대/소문자를 구분하며, 이러한 두 테이블을 생성하려고 시도하면 오류가 발생할 수 있습니다.