Amazon Web Services 한국 블로그
Amazon DynamoDB용 NoSQL Workbench – 미리보기 출시
Amazon DynamoDB는 아주 작은 데이터 요청 부터 초당 수백만 건의 요청으로 손쉽게 확장할 수 있는 문서 데이터베이스와 완전 관리형 키-값 NoSQL 데이터베이스입니다.
DynamoDB 팀은 최근 네이티브 ACID 트랜잭션을 지원하고자 온디맨드 용량, 글로벌 테이블, 특정 시점 복구 및 즉시 적응 용량과 같은 최근 기타 DynamoDB 발표를 요약하였습니다. 특히, DynamoDB는 기본적으로 모든 고객 유휴 데이터를 암호화합니다.
그러나, 여전히 관계형 데이터베이스에서 NoSQL로 전환하기란 그리 쉽지 않습니다.. 작년에 re:Invent에서 DynamoDB의 작동 방식과 이를 사용 사례에 활용하는 방법을 이해하는 데 큰 도움이 되었던 두 개의 멋진 세션이 진행되었습니다.
- Amazon DynamoDB Under the Hood: How We Built a Hyper-Scale Database
- Amazon DynamoDB Deep Dive: Advanced Design Patterns for DynamoDB
AWS는 DynamoDB를 좀더 효율적으로 사용하고 관리할 수 있도록 Windows 및 macOS에서 무료로 사용 가능한 클라이언트 측 애플리케이션, 즉 Amazon DynamoDB용 NoSQL Workbench 미리보기를 공개했습니다. 이를 통해 데이터 모델을 설계 및 시각화하고, 데이터에서 쿼리를 실행하며, 애플리케이션에 대한 코드를 생성할 수 있습니다!
NoSQL Workbench에서 제공하는 세 가지 주요 기능은 다음과 같습니다.
- 데이터 모델러 – 새로운 데이터 모듈을 구축하거나 테이블 및 인덱스를 추가하거나 기존 데이터 모델을 수정 및 내보냅니다.
- 시각화 도우미 – 수동으로 추가하거나 SQL 쿼리를 통해 가져올 수 있는 샘플 데이터를 사용하여 애플리케이션 액세스 패턴에 따라 데이터 모델을 시각화합니다.
- 운영 빌더 – 데이터 평면 운영을 정의 및 실행하거나 이들에 대해 준비된 샘플 코드를 생성합니다.
이 새로운 도구가 DynamoDB에서 작업을 간소화하는 방법을 확인하기 위해 고객과 고객의 주문에 대한 정보를 검색하는 애플리케이션을 만들어보겠습니다.
NoSQL Workbench 사용해 보기
데이터 모델러에서 먼저 CustomerOrders
데이터 모델을 만들고, 고객 데이터와 고객 주문 정보를 보관할 CustomerAndOrders
테이블을 추가합니다. 여러분도 이 도구를 사용하여 각각 기본 키를 사용하는 두 개의 개별 테이블에 고객과 고객 주문을 포함하는 간단한 데이터 모델을 만들 수 있습니다. 여기서 문제될 일은 없습니다. 다음으로, 이 도구를 통해 고급 설계 패턴을 사용하는 방법을 보여 드리겠습니다. 단일 테이블에 고객과 주문 데이터를 포함하여 DynamoDB에서 한 번의 상호 작용으로 필요한 모든 데이터를 반환하는 쿼리를 구성할 수 있습니다. 그러면 애플리케이션 성능이 향상될 수 있습니다.
파티션 키로 customerId
를 사용합니다. 그러면 여러 파티션에서 데이터를 균등하게 배분할 수 있습니다. 데이터 모델의 정렬 키는 다음과 같은 항목에 따라 서로 다른 데이터를 보관할 수 있다는 관점에서 오버로드된 속성입니다.
- 고객 데이터를 포함하는 항목에 대한 고정 문자열(예:
customer
). - 주문을 포함하는 항목에 대한 주문 날짜(ISO 8601 문자열로 작성됨, 예:
20190823
).
이러한 두 개의 가능한 값으로 정렬 키를 오버로드하면 고객 데이터와 최근 주문을 반환하는 단일 쿼리를 실행할 수 있습니다. 이러한 이유로 정렬 키에 대해 일반 이름을 사용합니다. 이 경우 sk
를 사용합니다.
파티션 키 및 선택적 정렬 키와는 별도로, DynamoDB에는 유연한 스키마가 있으며, 테이블의 각 항목에 대해 기타 속성은 서로 다를 수 있습니다. 그러나 이 도구를 사용하면 테이블에 사용하려는 모든 가능한 속성에 대해 데이터 모델에서 설명하는 옵션이 제공됩니다. 이 방법을 통해 나중에 애플리케이션에 필요한 모든 액세스 패턴이 이 데이터 모델에서 원활하게 작동하는지 확인할 수 있습니다.
이 테이블에서는 다음 속성을 추가합니다.
customerName
및customerAddress
: 고객 데이터를 포함하는 테이블의 항목.orderId
및deliveryAddress
: 주문 데이터를 포함하는 테이블의 항목.
orderDate
속성은 추가하지 않습니다. 이 데이터 모델에서 값은 sk
정렬 키에 저장되기 때문입니다. 실제 프로덕션 사용 사례의 경우 고객과 주문을 설명하는 속성은 훨씬 더 많겠지만, 이번 예제에서는 상세한 부분을 놓치지 않고 사용자가 수행할 수 있는 기능들을 보여드리고자 간단하게 구성하였습니다.
애플리케이션의 또 다른 액세스 패턴에서는 특정 ID로 정렬할 수 있습니다. 이 경우 정렬 키 없이 파티션 키로 orderId
를 사용하여 테이블에 글로벌 보조 인덱스를 추가합니다.
데이터 모델에 테이블 정의를 추가하고 시각화 도우미로 이동합니다. 그런 다음, 몇 가지 샘플 데이터를 추가하여 테이블을 업데이트합니다. 데이터를 수동으로 추가할 수 있지만, 예를 들어, 관계형 데이터베이스에서 NoSQL 마이그레이션을 간소화하기 위해 MySQL 데이터베이스의 테이블에서 몇 개 행을 가져올 수 있습니다.
이제 이 테이블에서 기대할 수 있는 내용을 더 잘 이해하기 위해 샘플 데이터로 데이터 모델을 시각화합니다. 예를 들어, customerId
를 선택하고 특정 날짜보다 더 큰 모든 주문을 쿼리하는 경우 마지막에 고객 데이터를 얻을 수 있습니다. sk
정렬 키에 저장된 문자열 customer
는 ISO 8601 구문으로 작성된 날짜보다 항상 더 크기 때문입니다.
시각화 도우미에서는 orderId
에서 글로벌 보조 인덱스가 작동하는 방식도 확인할 수 있습니다. orderId
가 없는 항목은 이 인덱스의 일부가 아니므로, 샘플 데이터의 일부인 6개 항목 중 4개만 얻을 수 있습니다. DynamoDB는 인덱스 정렬 키 값이 항목에 존재하는 경우에만 대응하는 인덱스 항목을 작성하기 때문입니다. 정렬 키가 모든 테이블 항목에 나타나지 않으면 인덱스는 스파스(Sparse)하다고 합니다. 스파스 인덱스는 테이블의 하위 섹션에 대한 쿼리에 유용합니다.
이제 DynamoDB로 데이터 모델을 커밋합니다. 이 단계에서는 선택한 데이터 모델에 대한 테이블 및 글로벌 보조 인덱스와 같은 서버 측 리소스를 생성하고 샘플 데이터를 로드합니다. 이를 수행하려면 AWS 계정의 AWS 자격 증명이 필요합니다. 저는 이 도구를 사용하는 환경에 AWS 명령줄 인터페이스(CLI)를 설치 및 구성했으므로, 제 이름이 지정된 프로파일 중 하나를 선택하기만 하면 됩니다.
선택한 AWS 지역의 모든 테이블을 볼 수 있는 운영 빌더로 이동합니다. 새로 만든 CustomerAndOrders
테이블을 선택하여 데이터를 찾아보고 애플리케이션에 필요한 코드를 구축합니다.
이 경우 특정 고객에 대해 제가 제공한 날짜 이후의 최근 모든 주문을 선택하는 쿼리를 실행하려고 합니다. 앞서 말한 대로, 오버로드된 정렬 키는 마지막 항목으로 고객 데이터도 반환합니다. 운영 빌더를 통해 조건 및 하위 표현식 추가와 같이 DynamoDB 작업의 전체 구문을 사용할 수 있습니다. 이 경우 deliveryAddress
가 Seattle
을 포함하는 주문만 반환하는 조건을 추가합니다.
DynamoDB 테이블에서 작업을 실행할 수도 있지만, 지금은 애플리케이션에서 쿼리를 사용하려고 합니다. 코드를 생성하기 위해 Python, JavaScript(Node.js) 또는 Java 중에서 선택합니다.
운영 빌더를 사용하여 애플리케이션에서 사용하려는 모든 액세스 패턴에 대한 코드를 생성하며, ACID 트랜잭션을 포함하여 DynamoDB가 제공하는 모든 고급 기능을 활용할 수 있습니다. Amazon DynamoDB용 NoSQL Workbench(미리보기)를 설정하는 방법을 확인할 수 있습니다.
DynamoDB 토론 포럼에서 여러분의 의견을 기다리고 있겠습니다. 이 새로운 도구로 여러분이 빌드하는 결과물과 AWS가 지원할 수 있는 점들에 대해 알려주십시오!
– Danilo Poccia, AWS Serverless 테크에반젤리스트