AWS 기술 블로그

Amazon Q Developer를 활용한 Amazon DynamoDB 개발 가속화

본 게시물은 AWS Database Blog에 게시된 “Faster development with Amazon DynamoDB and Amazon Q Developer” by Chris Gillespie 을 한국어로 번역한 글입니다.

Amazon Q Developer는 AWS에서 애플리케이션 개발을 가속화할 수 있는 Generative Artificial Intelligence(Gen AI) 도우미입니다. 통합 개발 환경(IDE)에서 사용될 때, Amazon Q는 소프트웨어 개발 지원을 제공합니다. Amazon Q는 코드에 대해 대화하고, 인라인 코드 완성을 제공하며, 새로운 코드를 생성하고, 보안 취약점을 스캔하며, 언어 업데이트, 디버깅 및 최적화와 같은 코드 업그레이드 및 개선을 수행할 수 있습니다.

Amazon DynamoDB는 대규모 환경에서도 한 자릿수 밀리초 성능을 제공하는 서버리스 NoSQL 데이터베이스 서비스입니다. DynamoDB는 AWS 관리 콘솔 또는 프로그래밍적으로 상호작용할 수 있습니다. 프로그래밍적으로 작업할 때, 일반적인 접근 방식은 AWS CloudFormation이나 AWS Cloud Development Kit(AWS CDK)와 같은 인프라를 코드로 관리하는 도구(IaC)를 사용하여 테이블을 관리하고, 프로그래밍 언어 SDK를 사용하여 테이블에 데이터를 읽고 쓰는 것입니다. Amazon Q는 이러한 작업 모두를 지원하여 개발 속도를 향상시킬 수 있습니다.

이 게시물에서는 IaC를 사용하여 DynamoDB 테이블을 만든 다음 Python과 Boto3를 사용하여 테이블에서 CRUD(생성, 읽기, 업데이트, 삭제) 작업을 수행하는 방법을 설명합니다. 이를 통해 Amazon Q가 이러한 작업의 개발 속도를 어떻게 향상시킬 수 있는지를 보여 줍니다.

Amazon Q와의 상호작용

이 시연을 위해 IDE에 Amazon Q Developer 플러그인을 설치했습니다. 이 게시물에서는 두 가지 방법으로 Amazon Q와 상호작용합니다:

  • IDE의 채팅 패널: 자연어 요청을 텍스트 바에 입력하고 응답을 평가합니다.
  • IDE 내 인라인 제안: 편집 중인 소스 코드 파일에 자연어로 주석을 추가하고 Amazon Q가 제공하는 제안을 평가합니다.

Amazon Q와 함께 사용되는 모든 프롬프트를 포함하였으므로 여러분이 확장할 수 있습니다. 생성형 AI 어시스턴트는 결정적이지 않습니다. 이 연습을 스스로 반복하면, 이 예제와 같은 결과를 얻지 못할 수도 있지만, 여러분들은 Amazon Q가 유용하다는 것을 알게 될 것이라고 확신합니다.

작성한 코드에 대한 소유권은 여러분에게 있으며, Amazon Q의 코드 제안을 수락하더라도 항상 코드를 검토해야 합니다. 또한 코드를 의도한 대로 정확하게 작동하도록 수정해야 할 수도 있습니다.

DynamoDB 테이블 생성하기

이 게시물에서는 AWS CloudFormation을 사용하여 솔루션을 만들지만, 이 과정은 AWS Serverless Application Model (SAM) CLI 또는 AWS CDK에서도 작동합니다.

YAML CloudFormation 템플릿에서 IoT 장치의 온도 값을 저장하는 DynamoDB 테이블을 생성합니다. 이 테이블은 IoT 장치의 온도 값을 저장합니다. IDE의 채팅 패널에서 Amazon Q에게 이를 생성해 달라고 요청했습니다. 요청과 응답은 다음 스크린샷에 나와 있습니다.

제안된 코드는 이상적이지만, 요구 사항을 지정하지 않았습니다. 여기에서는 테이블 이름이 IotDynamoDbTable이 되기를 원합니다. 채팅 패널은 대화형이며 여러분들의 이전 상호작용을 기억하므로 이 추가 요구 사항을 요청할 수 있습니다.

제공된 해결책이 우리가 원하는 것이므로 IDE의 텍스트 파일에 복사하여 수락합니다. 이는 CloudFormation YAML 생성을 위한 시간을 절약해 줍니다. 텍스트 파일은 원하는 대로 편집할 수 있습니다.

예를 들어 Global Secondary Index(GSI) 또는 Stream을 추가하여 테이블을 더 개선하고 싶다면, 두 가지 접근 방식 중 하나를 따를 수 있습니다.

  • Amazon Q 채팅 패널에서 대화를 계속 진행하기
  • 텍스트 파일에 주석을 추가하여 Amazon Q의 인라인 응답 받기

이번 예제에서는 이미 텍스트 파일에 있는 내용을 확장하기 위해 주석을 추가하여 Amazon Q가 인라인 제안을 제공하도록 했습니다. 제안이 좋으므로 이를 수락하고 계속 진행할 수 있습니다. 다음 애니메이션에서 이 상호작용을 볼 수 있습니다.

CRUD 작업 수행하기

이 섹션에서는 Amazon Q의 도움으로 DynamoDB 테이블에서 CRUD 작업을 수행하는 예제를 제공합니다.

생성(Create)

우리는 AWS Lambda 함수에서 실행되는 코드 샘플을 만들고, 이벤트의 모든 레코드를 읽고 DynamoDB 테이블에 씁니다. 이벤트의 기록은 Amazon Simple Queue Service (Amazon SQS) 대기열에서 시작되었습니다. 우리는 시작하기 위해 채팅 패널로 돌아갑니다.

AWS Lambda 함수에서 실행되는 코드 샘플을 작성하여 이벤트에서 모든 레코드를 읽고 이를 DynamoDB 테이블에 기록합니다. 이벤트의 레코드는 Amazon Simple Queue Service(Amazon SQS) 큐에서 발생했습니다. DynamoDB 테이블에 기록을 시작하기 위해 채팅 패널로 돌아갑니다.

우리의 요청은 이벤트 내 레코드에 대한 어떠한 세부 정보도 제공하지 않았습니다. 이 세부 정보가 없으므로 Amazon Q는 제안을 생성했지만 우리가 원하는 것과는 다소 다릅니다. 우리에게는 다시 두 가지 옵션이 있습니다:

  • 채팅 패널에서 대화를 계속하고 요청을 명확히 하기
  • 코드를 텍스트 편집기로 복사하고 수동으로 수정하기

수정이 간단했기 때문에 두 번째 옵션을 선택했습니다. 결과는 다음 스크린샷에 나와 있습니다.

이 수정을 포함하더라도, Amazon Q로 이 기능을 만드는 시간은 우리가 수동으로 했을 때보다 더 빠릅니다.

읽기(Read)

이제 테이블에서 항목을 읽기 위해 코드를 확장하려고 합니다. deviceIDreadingTime 값을 알고 있으므로 기본 키(Primary Key)를 사용하여 직접 조회할 수 있습니다. Lambda 함수 코드에 우리가 원하는 것을 설명하는 주석을 추가하고 Amazon Q가 코드를 제공하도록 합니다. 다음 애니메이션에서 이 내용을 확인 할 수 있습니다.


Amazon Q의 제안을 수락합니다. 제안에는 업데이트해야 할 Placeholder(Amazon Q Developer는 사용자의 요구사항을 바탕으로 코드 샘플을 생성하지만, 사용자가 직접 입력해야 하는 구체적인 값은 부분을 Placeholder로 표시합니다.)가 포함되어 있으며, 이는 deviceID 값입니다. 이것은 간단한 변경이며, 테이블에서 항목을 읽는 방법을 찾기 위해 IDE를 벗어날 필요가 없습니다.

업데이트(Update)

우리는 항목에 대한 deviceIDreadingTime 값을 알고 있으며 이를 업데이트하려고 합니다. 온도가 150보다 클 경우 badReading이라는 속성을 true로 추가하고 싶습니다. 텍스트 파일에 주석을 추가하고 Amazon Q에게 샘플 코드를 제공하도록 요청합니다. 다음 애니메이션에서 이 내용을 확인 할 수 있습니다.

이번에도 제안에는 업데이트해야 할 Placeholder가 포함되어 있습니다. 이는 특히 이 작업에 대한 문서나 예제를 찾아야 할 경우 시간을 절약해 줍니다. 제안을 수락하고 deviceID 값을 업데이트하여 완료합니다.

삭제(Delete)

우리는 삭제하려는 deviceIDreadingTime의 값을 알고 있습니다. 이 요청에 더 자세한 내용을 추가하기 위해, 우리는 이 작업이 얼마나 많은 용량을 소비했는지와 삭제하기 전에 항목이 어떻게 생겼었는지의 모습을 반환하도록 하고 싶습니다. 우리는 텍스트 파일에 주석을 추가하고 Amazon Q가 샘플을 제공하도록 요청 합니다. 이 결과는 다음 스크린샷에서 볼 수 있습니다.

다시 한 번, 우리는 샘플을 수락하고 코드를 완성하기 위해 Placeholder를 업데이트합니다.

쿼리 작업 수행하기

DynamoDB의 쿼리(Query) 기능은 매우 강력합니다. 한 번의 쿼리 작업으로, 파티션 키(Partition Key) 값이 같은 여러 항목을 가져올 수 있습니다. 이때 정렬 키(Sort Key) 값은 서로 다를 수 있습니다.

예를 들어, 사용자 ID가 파티션 키(Partition Key)이고 게시 날짜가 정렬 키(Sort Key)인 DynamoDB 테이블이 있다고 할때, 한 번의 쿼리로 특정 사용자의 모든 게시물을 가져올 수 있습니다. 이때 게시 날짜에 따라 정렬(Sort)해서 결과를 얻을 수도 있습니다.

또한 쿼리에서는 파티션 키(Partition Key)와 정렬 키(Sort Key) 외에 일반 속성들도 필터링할 수 있습니다. 그리고 정렬(Sort)과 제한(Limit) 기능도 사용할 수 있습니다. 이는 지금까지 봤던 CRUD 작업보다 구현하기 더 복잡합니다.

이번 예제에서는, 어제 발생했던 특정 deviceID에 대해 온도 측정값이 10~20도 사이인 모든 항목을 반환하는 쿼리를 수행하려고 합니다. 우리는 이 조건을 충족하는 가장 최근의 다섯 개 항목만 관심이 있습니다.

Amazon Q는 여러 샘플을 제공하며 이를 빠르게 반복할 수 있습니다. 우리는 계속 작업하기 위한 기초로 가장 적합하다고 느끼는 것을 선택합니다. 이것은 다음 스크린샷에서 볼 수 있습니다.


KeyConditionExpression 구조가 올바르지만 readingTime에는 상수 값이 포함되어 있습니다. 이를 수동으로 수정하거나 주석을 개선하여 다시 시도하거나 문제를 분해하여 Amazon Q가 단계별로 나누어서 해결하도록 할 수 있습니다.

파일 상단에 timedatetime 모듈에 대한 import 문구를 추가하면 힌트를 제공합니다(Amazon Q는 import 문구를 컨텍스트로 평가하며 이를 사용하는 제안을 선호합니다). 그런 다음 문제를 분해하고 Amazon Q에게 단계별로 나누어서 해결하도록 합니다. 다음 스크린샷의 각 주석은 우리가 Amazon Q에게 해결하도록 요청한 문제의 일부이며, 선택된 코드는 제공된 제안입니다.


JavaScript 및 Java와 함께 작업하기

자바스크립트로 실험한 결과 개발자 환경은 이 글에서 이미 소개한 파이썬 환경과 대체로 유사합니다.

JAVA 환경은 SDK를 통해 v1(deprecated) 및 v2 (Enhanced client) 등 여러 가지 접근 방식으로 DynamoDB를 사용하기 때문에 조금 더 변동성이 있습니다. Amazon Q는 프로젝트의 기존 코드를 컨텍스트로 사용하여 어떤 접근 방식을 사용할지 결정합니다. 기존 프로젝트를 수정하는 경우 프로젝트의 나머지 부분과 동일한 접근 방식을 사용하는 샘플을 받게 될 가능성이 높습니다. 새 프로젝트인 경우에는 현재 편집 중인 파일 상단에 관련 import 문을 추가하여 초기 제안에 어떤 접근 방식을 사용할지 크게 영향을 줄 수 있습니다. 채팅 패널과 인라인 모두 이러한 import 문을 컨텍스트로 사용합니다. 다음은 두 가지 SDK 옵션에 대한 import 예시입니다:

  • V2 – import software.amazon.awssdk.services.dynamodb. *
  • Enhanced client – import software.amazon.awssdk.enhanced.dynamodb.mapper.annotations. *

추가 지원 코드 생성하기

완벽하게 작동하는 솔루션을 구축하려면, 추가적인 지원 코드가 필요합니다. 예를 들어, CloudFormation 템플릿은 Lambda 함수와 관련 AWS Identity and Access Management(IAM) 역할이 필요합니다. 우리는 Amazon Q를 사용하여 이 코드를 생성할 수도 있습니다. 우리는 Amazon Q가 DynamoDB 작업에 어떻게 도움이 될 수 있는지에 초점을 맞추었지만, 우리의 경험으로 볼 때 Amazon Q는 이러한 리소스(및 그 이상)를 생성할 때 시간을 절약하는 데 매우 효과적입니다.

결론

이 게시물에서, IaC를 사용하여 DynamoDB 테이블을 생성하고, Amazon Q의 도움으로 CRUD 작업을 수행하는 방법을 시연했습니다. Amazon Q는 자연어로 표현된 필요사항에 대한 샘플 코드를 제공함으로써 DynamoDB로 작업할 때 시간을 절약할 수 있었습니다.

제안 사항을 약간만 수정하거나, 더 크고 복잡한 요청을 더 작은 조각으로 나누면, Amazon Q의 도움 없이 코드를 작성하는 것보다 더 빠르게 작동하는 코드를 생성할 수 있습니다.

Amazon Q는 계획부터 유지 관리까지 전체 소프트웨어 개발 라이프사이클을 지원할 수 있습니다. Amazon Q가 각 단계에서 어떻게 지원할 수 있는지 알아보려면 Accelerate your Software Development Lifecycle with Amazon Q를 참조하세요.

Amazon Q에 대해 자세히 알아보려면 Amazon Q 개발자 가이드를 확인 할 수 있습니다. 또한 프롬프트 엔지니어링 모범 사례를 읽고 프롬프트(Amazon Q가 제안을 생성하는 데 사용하는 자연어 댓글)를 모범 사례에 맞게 만드는 방법을 알아볼 수도 있습니다.

DynamoDB에 대해 자세히 알아보려면 Amazon DynamoDB Developer Guide를 참조하십시오.

Jin Seop Lim

Jin Seop Lim

임진섭 Technical Account Manager(TAM)은, Enterprise 고객이 AWS에서 효율적으로 솔루션을 구축하고 클라우드 운영을 최적화 할 수 있도록 전략의 수립 및 이행을 지원합니다. AWS 환경을 양호하게 유지할 수 있도록 적극적으로 지원하고 전략적 기술 방향을 제공합니다. 또한 고객과 긴밀한 관계를 구축하여 고객의 비즈니스 및 운영 요구 사항과 기술적 과제를 이해하고 고객이 AWS에서 최고의 가치를 달성하는데 도움을 드리고 있습니다.