'자막 수집 서비스'에서 각 문제별 수집된 데이터 수 현황을 보여주는 기능을 만들었다.
이때 DynamoDB 조회가 필요했는데 이것에 관한 고찰을 적어본다 🔥
query와 scan 두 가지 방법이 있다.
query
scan
이전에 검색 기능을 만들 때 query를 이용했었다.
하지만 오늘은 전체 데이터의 수가 필요했기 때문에 scan을 이용했다.
처음엔 이렇게 scan했다.
# DynamoDB에서 모든 게시글을 검색
response = table.scan()
DynamoDB의 scan 연산은 기본적으로 전체 테이블을 스캔하지만,
한 번의 요청으로 가져올 수 있는 항목의 양에 제한이 있다 😢
대량의 데이터를 처리할 때는 여러 페이지로 나뉘어 결과가 반환되는데
scan이 전체 데이터를 한 번에 반환하지 않고 일부만 반환하는 경우 추가 데이터를 순차적으로 요청해야 한다.
어떻게 요청해야 할까?
반환하는 응답 값에 LastEvaluatedKey가 있는데
이 값을 scan시 ExclusiveStartKey의 인자값으로 넣으면 된다.
# LastEvaluatedKey를 확인하여 모든 데이터를 스캔했는지 확인
while 'LastEvaluatedKey' in response:
response = table.scan(ExclusiveStartKey=response['LastEvaluatedKey'])
LastEvaluatedKey가 없는 경우 더 이상 가져올 항목이 없다는 의미다.
따라서 위와 같이 while 문을 통해 다음 페이지가 없을 때 까지 요청하면 된다 👍