주문용 DynamoDB 테이블 생성

AWSBeginner
지금 연습하기

소개

주문 서비스에는 주문 상세 정보를 저장하고 주문 ID로 조회할 공간이 필요합니다. DynamoDB 테이블을 생성하고 타입이 지정된 항목 두 개를 저장한 다음, 포장된 주문을 수정하고 임시 주문을 제거합니다. 마지막으로 관련 없는 참조 테이블을 보존하면서 소유한 테이블만 삭제합니다.

이 실습은 새 환경에서 독립적으로 시작합니다. 터미널 명령, 호출자 신원, 리소스 이름을 다루는 AWS Foundations 실습부터 학습하세요. /home/labex/project와 준비된 일회성 연결을 사용하세요. AWS View는 실제 테이블 및 항목 상태를 표시하며 AWS Console과는 다릅니다.

인증 시험 관련 주제

인증 시험 태스크 실습 내용
Cloud Practitioner (CLF-C02) 태스크 3.4 DynamoDB 키, 타입이 지정된 항목과 데이터 작업.
Solutions Architect – Associate (SAA-C03) 태스크 3.3 DynamoDB 키, 타입이 지정된 항목과 데이터 작업.
Developer – Associate (DVA-C02) 태스크 1.3 DynamoDB 키, 타입이 지정된 항목과 데이터 작업.
Data Engineer – Associate (DEA-C01) 태스크 2.4 기초 실습: DynamoDB 키, 타입이 지정된 항목과 데이터 작업.

실습 개요

AWS4 아이콘을 사용하고 draw.io로 내보낸 개념도: AWS CLI로 order_id를 키로 사용하는 주문 테이블을 관리하고, 선택한 항목 필드를 수정하며 소유한 리소스만 제거합니다.

주문 테이블 생성

이 단계에서는 작은 주문 서비스를 위한 테이블을 생성합니다. DynamoDB는 전체 열 스키마의 제약을 받는 행 대신 항목을 저장합니다. 테이블은 기본 키를 선언하며, 각 항목은 추가 속성을 가질 수 있습니다. 이 단순한 테이블에서는 파티션 키가 항목을 식별합니다.

공식 AWS CLI와 일회성 연결이 준비되어 있습니다. 이 작업 공간을 사용한 다음 호출자를 검사하세요. 개인 자격 증명을 입력하지 마세요.

cd /home/labex/project
aws sts get-caller-identity

호출자 ARN은 user/dynamodb-operator로 끝납니다. 계정 식별자와 ARN은 연결을 식별하며 주문 키가 아닙니다.

order_id를 String (S) 파티션 키 (HASH)로 사용하는 labex-d01-orders를 생성하세요. --attribute-definitions는 모든 항목 필드가 아니라 키 속성만 선언합니다. PAY_PER_REQUEST는 프로비저닝된 읽기 및 쓰기 단위 대신 온디맨드 용량을 선택합니다. AWS에서는 요청과 스토리지에 요금이 발생합니다. 이 선택이 무료 스토리지를 뜻하지는 않습니다.

aws dynamodb create-table \
  --table-name labex-d01-orders \
  --attribute-definitions AttributeName=order_id,AttributeType=S \
  --key-schema AttributeName=order_id,KeyType=HASH \
  --billing-mode PAY_PER_REQUEST

테이블 생성은 메타데이터를 반환합니다. waiter는 테이블을 사용할 수 있을 때까지 서비스를 반복 조회합니다. 첫 응답만 보고 리소스가 준비되었다고 가정하는 것보다 안전합니다.

aws dynamodb wait table-exists --table-name labex-d01-orders
aws dynamodb describe-table \
  --table-name labex-d01-orders \
  --query 'Table.{State:TableStatus,Keys:KeySchema,Billing:BillingModeSummary.BillingMode}'

ACTIVE, order_id 파티션 키, PAY_PER_REQUEST를 확인하세요. LabEx 위쪽 AWS View를 확인하세요. 주문 카드에는 아직 항목이 없습니다. 별도의 참조 테이블은 준비된 환경에 속하며 변경 없이 유지해야 합니다.

타입이 지정된 항목 쓰기 및 읽기

이 단계에서는 주문 두 개를 저장하고 정확한 키로 하나를 조회합니다. 저수준 DynamoDB API는 타입이 지정된 속성을 사용합니다. S는 문자열, N은 숫자입니다. N 값은 JSON 문자열로 인코딩되지만 DynamoDB는 이를 숫자로 처리합니다. 여기의 금액은 작은 가상 예제를 위한 정수 단위입니다.

두 예제 항목은 order_id를 키로 사용하며 각 속성에는 DynamoDB 타입이 지정됩니다.

작은따옴표를 사용하면 셸이 내부 큰따옴표를 포함한 JSON을 그대로 전달합니다. 각 put-item은 자체 키를 가진 완전한 항목을 생성합니다. 성공한 쓰기에는 보통 출력이 없습니다.

aws dynamodb put-item \
  --table-name labex-d01-orders \
  --item '{"order_id":{"S":"O100"},"customer":{"S":"Ada"},"amount":{"N":"145"},"status":{"S":"NEW"}}'
aws dynamodb put-item \
  --table-name labex-d01-orders \
  --item '{"order_id":{"S":"O101"},"customer":{"S":"Ada"},"amount":{"N":"50"},"status":{"S":"NEW"}}'

기본 키로 O100을 조회하세요. --consistent-read는 기본 테이블에서 강력한 일관성 읽기를 요청하며, 쓰기 직후 결과를 검사할 때 유용합니다. 기본 읽기는 최종 일관성을 사용합니다.

aws dynamodb get-item \
  --table-name labex-d01-orders \
  --key '{"order_id":{"S":"O100"}}' \
  --consistent-read

Item에는 O100, Ada, amount 145, status NEW가 있습니다. 키가 아닌 속성은 없어도 되지만 필수 키는 누락할 수 없습니다. AWS View의 주문 카드에서 O100을 펼쳐 같은 서비스가 반환한 실제 타입 지정 항목을 확인하세요.

주문 수정 및 임시 항목 제거

이 단계에서는 다른 필드를 교체하지 않고 O100을 수정한 다음 임시 주문 O101을 제거합니다. update-item은 키로 지정한 항목 하나에 표현식을 적용합니다. SET은 속성 값을 설정합니다. 표현식 이름 별칭은 예약어와의 충돌을 방지합니다. #state는 status를 나타냅니다. 표현식 값에는 DynamoDB 타입이 지정됩니다.

주문 서비스는 고객 정보를 유지하면서 포장 정보를 변경해야 합니다. 같은 키에 대한 PutItem은 항목 전체를 교체하지만 UpdateItem은 지정한 속성만 변경합니다. 반환된 customer 필드로 다른 주문 데이터가 유지되었는지 확인할 수 있습니다.

--return-values ALL_NEW는 수정된 전체 항목을 반환하므로 결과를 즉시 검사할 수 있습니다.

aws dynamodb update-item \
  --table-name labex-d01-orders \
  --key '{"order_id":{"S":"O100"}}' \
  --update-expression 'SET amount = :amount, #state = :state' \
  --expression-attribute-names '{"#state":"status"}' \
  --expression-attribute-values '{":amount":{"N":"160"},":state":{"S":"PACKED"}}' \
  --return-values ALL_NEW

반환된 속성은 customer Ada를 보존하면서 amount가 160, status가 PACKED로 변경됩니다.

정확한 키로 O101만 삭제한 다음 다시 읽으세요.

aws dynamodb delete-item \
  --table-name labex-d01-orders \
  --key '{"order_id":{"S":"O101"}}' \
  --return-values ALL_OLD
aws dynamodb get-item \
  --table-name labex-d01-orders \
  --key '{"order_id":{"S":"O101"}}' \
  --consistent-read

ALL_OLD는 삭제된 항목을 보여 줍니다. 그 키에 항목이 남아 있지 않으므로 이후 읽기는 {}를 반환합니다. 이는 결과가 없는 성공한 읽기입니다. AWS View에서 O101은 사라지고 O100은 수정된 필드를 유지합니다. O100을 펼쳐 amount와 status를 비교하세요.

남아 있는 주문에는 수정된 타입 지정 amount와 status가 표시됩니다.

소유한 테이블만 정리

이 단계에서는 최종 데이터를 확인한 뒤 주문 테이블을 제거합니다. 테이블 삭제는 모든 항목과 인덱스를 제거합니다. 삭제 전에 정확한 이름을 확인하세요. 서비스가 반환한 모든 테이블을 반복하며 삭제하지 마세요.

aws dynamodb scan --table-name labex-d01-orders --consistent-read

최종 스캔은 amount 160, status PACKED인 O100만 반환합니다. 스캔은 키로 지정한 항목 하나가 아니라 테이블을 검사합니다. 다음 실습에서는 더 큰 접근 패턴에 Query를 사용합니다.

aws dynamodb delete-table --table-name labex-d01-orders
aws dynamodb wait table-not-exists --table-name labex-d01-orders
aws dynamodb list-tables
aws dynamodb get-item \
  --table-name labex-d01-reference \
  --key '{"id":{"S":"platform"}}' \
  --consistent-read

목록에는 labex-d01-reference가 있고 주문 테이블은 없습니다. 참조 note는 keep unchanged로 유지됩니다. 성공한 목록 조회와 참조 읽기는 연결이 여전히 작동함을 입증합니다. 인증 또는 네트워크 오류는 삭제를 입증하지 못합니다. AWS View에는 이제 보존된 참조와 Orders table absent만 표시됩니다. 일회성 연결은 이 VM과 함께 종료됩니다. 자격 증명을 다른 곳에 복사하지 마세요.

요약

String 파티션 키를 가진 온디맨드 테이블을 생성하고, 타입이 지정된 항목을 쓰고, 키를 사용한 강력한 일관성 읽기를 수행하고, 선택한 속성을 수정하고, 항목을 제거했습니다. 그런 다음 소유한 테이블만 삭제하고 관련 없는 참조를 계속 읽을 수 있음을 입증했습니다. 이 작업들은 다음 실습에서 다룰 복합 키 쿼리와 다른 접근 패턴의 기초가 됩니다.

자세한 내용은 AWS 공식 문서를 참고하세요: 테이블, 항목, 속성 및 기본 키.