투케이2K

144. (Aws/Amazon) [Aws NoSQL DynamoDB Service] Scan - 다이나모 디비에 생성 된 특정 테이블 데이터 전체 스캔 API 설명 본문

Aws (Amazon)

144. (Aws/Amazon) [Aws NoSQL DynamoDB Service] Scan - 다이나모 디비에 생성 된 특정 테이블 데이터 전체 스캔 API 설명

투케이2K 2025. 12. 5. 09:32
728x90

[개발 환경 설정]

개발 환경 : Aws / Amazon Web Services

 

[설명 정리]

// --------------------------------------------------------------------------------------
[개발 및 환경]
// --------------------------------------------------------------------------------------

- 인프라 : Aws / Amazon Web Services


- 기술 구분 : Aws / Database / DynamoDB


- 사전) DynamoDB 간단 설명 : 

  >> Aws DynamoDB 는 모든 규모에서 10밀리초 미만의 성능을 제공하는 서버리스, NoSQL, 완전관리형 데이터베이스입니다 (서버리스 NoSQL 데이터베이스 서비스)

  >> Aws DynamoDB 는 규모와 관계없이 일관된 성능이 필요한 운영 워크로드에 맞게 특별히 구축되고 최적화되었습니다.

  >> Aws DynamoDB 특징 : 

    - Serverless (서버리스) : 서버를 프로비저닝하거나 소프트웨어를 패치, 관리, 설치, 유지 보수 또는 운영할 필요가 없으며, 가동 중지가 발생하지 않는 유지 관리를 제공합니다

    - NoSQL : 
      $ 기존의 관계형 데이터베이스보다 향상된 성능, 확장성, 관리성 및 유연성을 제공하도록 특별히 구축되었습니다  
      $ 다양한 사용 사례를 지원하기 위해 DynamoDB 는 키-값 및 문서 데이터 모델을 모두 지원합니다

    - 완전관리형 : 
      $ DynamoDB 는 설정, 구성, 유지 관리, 고가용성, 하드웨어 프로비저닝, 보안, 백업, 모니터링 등을 처리하며 테이블을 생성할 때 프로덕션 워크로드에 즉시 사용할 수 있습니다. 
      $ 또한, 업그레이드가 필요하지 않고 가동 중지가 발생하지 않으면서 가용성, 신뢰성, 성능, 보안 및 기능을 지속적으로 개선합니다

    - 규모를 따지지 않는 한 자릿수 밀리초의 성능 : 
      $ DynamoDB 는 모든 규모에서 10밀리초 미만의 성능을 제공하여 관계형 데이터베이스의 성능과 확장성을 개선하기 위해 특별히 개발되었습니다.
      $ DynamoDB 는 고성능 워크로드에 최적화되어 있으며 효율적인 데이터베이스 사용을 장려하는 API를 제공합니다 (JOIN 작업과 같이 규모에 비해 비효율적이고 성능이 떨어지는 기능은 생략됩니다)

// --------------------------------------------------------------------------------------






// --------------------------------------------------------------------------------------
[설 명]
// --------------------------------------------------------------------------------------

1. Scan API 는 Amazon DynamoDB 에서 제공하는 API 작업 중 하나로, 테이블의 모든 항목을 읽어오는 작업을 수행하는 API입니다

  >> AWS 콘솔 사이트 : https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Scan.html


2. Scan API 는 Amazon DynamoDB 지정된 테이블 또는 인덱스의 모든 아이템을 검색합니다


3. Scan API 요청 주요 파라미터 : 

  >> TableName : 스캔할 테이블 이름 (필수)

  >> FilterExpression : 반환할 항목을 필터링하는 조건식 (예: attribute_exists(Status))

  >> ProjectionExpression : 특정 속성만 가져오도록 지정 (예: id, name)

  >> Limit : 한 번의 요청에서 반환할 최대 항목 수 (페이징 처리 시 사용)

  >> ExclusiveStartKey : 이전 스캔에서 반환된 LastEvaluatedKey를 사용해 다음 페이지 요청

  >> ConsistentRead : 강력한 읽기 일관성 여부 (기본값: false)

  >> 예시 요청 전문 : 

  POST / HTTP/1.1
  Host: dynamodb.<region>.<domain>;
  Accept-Encoding: identity
  Content-Length: <PayloadSizeBytes>
  User-Agent: <UserAgentString>
  Content-Type: application/x-amz-json-1.0
  Authorization: AWS4-HMAC-SHA256 Credential=<Credential>, SignedHeaders=<Headers>, Signature=<Signature>
  X-Amz-Date: <Date>
  X-Amz-Target: DynamoDB_20120810.Scan

  {
      "TableName": "Reply",
      "FilterExpression": "PostedBy = :val",
      "ExpressionAttributeValues": {":val": {"S": "joe@example.com"}},
      "ReturnConsumedCapacity": "TOTAL"
  }


4. Scan API 응답 주요 파라미터 : 

  >> Items : 조건에 맞는 항목 리스트

  >> Count : 필터 후 반환된 항목 수

  >> ScannedCount : 필터 적용 전 스캔한 항목 수

  >> LastEvaluatedKey : 다음 페이지 요청 시 시작 키

  >> 예시 응답 전문 : 

  HTTP/1.1 200 OK
  x-amzn-RequestId: <RequestId>
  x-amz-crc32: <Checksum>
  Content-Type: application/x-amz-json-1.0
  Content-Length: <PayloadSizeBytes>
  Date: <Date>
  {
      "ConsumedCapacity": {
          "CapacityUnits": 0.5,
          "TableName": "Reply"
      },
      "Count": 2,
      "Items": [
          {
              "PostedBy": {
                  "S": "joe@example.com"
              },
              "ReplyDateTime": {
                  "S": "20130320115336"
              },
              "Id": {
                  "S": "Amazon DynamoDB#How do I update multiple items?"
              },
              "Message": {
                  "S": "Have you looked at BatchWriteItem?"
              }
          },
          {
              "PostedBy": {
                  "S": "joe@example.com"
              },
              "ReplyDateTime": {
                  "S": "20130320115347"
              },
              "Id": {
                  "S": "Amazon DynamoDB#How do I update multiple items?"
              },
              "Message": {
                  "S": "BatchWriteItem is documented in the Amazon DynamoDB API Reference."
              }
          }
      ],
      "ScannedCount": 4
  }


5. Scan API 사용 Python 코드 예시 : 

  # [AWS IAM 계정 AccessKey, SecretKey 변수 선언]
  iamAccessKey = "AK..A6"
  iamSecretKey = "mP..5J"
  iamRegion = "ap-northeast-2"  # 서울 리전


  # [명시적 인증 정보로 세션 생성]
  session = boto3.Session(
      aws_access_key_id = iamAccessKey,
      aws_secret_access_key = iamSecretKey,
      region_name = iamRegion
  )


  # [AWS DynamoDB 리소스 객체 생성]
  aws_client = session.resource('dynamodb')


  # [조회할 테이블 명칭 이름 지정]
  table_name = 'iot_device_provisioning'


  # [DynamoDB 에 생성되어 있는 테이블 내용 전체 스캔 수행]
  aws_res = aws_client.Table(table_name)

  print(f"DLOG = aws_res : {aws_res}")


  # [테이블 내용 스캔]
  table_scan = aws_res.scan()

  print(f"DLOG = table_scan : {table_scan}")


  # [아이템 목록 추출]
  items = convert_decimal(table_scan.get('Items', []))

  print(f"DLOG = items : {items}")


6. Scan API 사용 주의사항 : 

  >> 비용 : 스캔은 테이블 전체를 읽으므로 RCU(Read Capacity Unit) 를 많이 소모합니다.

  >> 성능 : 큰 테이블에서 스캔은 느릴 수 있으므로, 가능하면 Query API를 사용하세요.

  >> 병렬 스캔 : Segment와 TotalSegments를 사용해 병렬 처리 가능.

// --------------------------------------------------------------------------------------






// --------------------------------------------------------------------------------------
[참고 사이트]
// --------------------------------------------------------------------------------------

[Aws NoSQL DynamoDB Service] Aws Dynamo DB 다이나모 디비 개념 및 설명 정리

https://kkh0977.tistory.com/7627

https://blog.naver.com/kkh0977/223734725747?trackingCode=blog_bloghome_searchlist


[AWS] [Lambda] 런타임 Python 3.13 - boto3 모듈 사용해 다이나모 DB ( DynamoDB ) 특정 테이블 내용 전체 스캔

https://blog.naver.com/kkh0977/223990670122


[Aws NoSQL DynamoDB Service] AWS 콘솔에서 다이나모 데이터베이스 ( Dynamo DB ) 테이블에 저장 된 데이터 조회 방법

https://blog.naver.com/kkh0977/223933617765?trackingCode=blog_bloghome_searchlist


[AWS] [Lambda] 런타임 Python 3.13 - boto3 모듈 사용해 다이나모 DB ( DynamoDB ) 테이블 목록 조회

https://blog.naver.com/kkh0977/223990664323


[AWS 사이트 : API_Scan 설명]

https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Scan.html

// --------------------------------------------------------------------------------------
 
728x90
반응형
Comments