Notice
Recent Posts
Recent Comments
Link
투케이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:32728x90
[개발 환경 설정]
개발 환경 : 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
반응형
'Aws (Amazon)' 카테고리의 다른 글
Comments
