DynamoDB 쿼리 빌더
Query 또는 Scan 요청 전체를 구성하세요 — 테이블, 인덱스, 키 조건, 필터, 프로젝션, Limit, 정렬 순서, 일관성 읽기, 페이지네이션 — 그리고 실행 가능한 AWS SDK v3, CLI, boto3 프로그램 또는 PartiQL 문으로 복사하세요.
액세스 패턴에서 실행 가능한 요청으로
표현식만으로 일이 끝나는 경우는 드뭅니다. 프로덕션 Query는 어떤 인덱스를 읽을지, 요청당 몇 개의 항목을 평가할지, 정렬 키를 어느 방향으로 훑을지, 읽기가 강력한 일관성이어야 하는지, 그리고 응답이 LastEvaluatedKey와 함께 돌아오면 어떻게 할지도 결정합니다. 이런 요청 수준 파라미터는 표현식 문자열 바깥에 있으며 — 복사해 붙인 스니펫이 어긋나는 곳이 바로 거기입니다.
이 빌더는 요청을 작업의 단위로 다룹니다. 표현식 빌더와 동일한, 타입이 지정되고 예약어에 안전한 모델 위에서 키 조건·필터·프로젝션을 구성하고, 그 옆에서 요청 옵션을 설정합니다. 출력은 조각이 아니라 실행할 수 있는 프로그램입니다 — import, 클라이언트 설정, 호출 자체, 그리고 “모든 페이지 가져오기”를 켜면 결과의 모든 페이지를 끝까지 읽는 ExclusiveStartKey 루프까지.
생성된 코드는 각 대상에 대해 정직합니다. AWS CLI는 스스로 페이지네이션하므로 Limit은 --page-size가 되고 단일 요청 실행에는 --no-paginate가 붙습니다. PartiQL은 문이 아니라 ExecuteStatement API에 속하는 파라미터를 거절합니다. 내림차순 Query는 표현 가능한 경우 정렬 키에 대한 ORDER BY가 됩니다.
여섯 가지 작업 중 어느 것이든, 자리표시자 맵을 갖춘 조건·필터·업데이트 표현식 자체만 필요하신가요? DynamoDB 표현식 빌더가 바로 그 용도로 만들어졌습니다. 두 읽기 작업 중 무엇을 쓸지부터 정하고 있나요? Query 대 Scan 문서가 각각 언제 옳은 선택인지 정리해 줍니다.
자주 묻는 질문
DynamoDB 표현식 빌더와는 무엇이 다른가요?
둘은 의도적으로 문제를 나눠 맡습니다. 표현식 빌더의 주제는 표현식 문법입니다 — 여섯 가지 작업 전반의 키 조건, 필터, 업데이트·조건 표현식과 그 ExpressionAttributeNames/Values 맵 — 그리고 명령 자체만 출력합니다. 쿼리 빌더의 주제는 완전한 Query 또는 Scan 요청입니다. 테이블과 인덱스, 키 조건, 필터, 프로젝션에 더해 표현식 도구가 노출하지 않는 요청 수준 파라미터(Limit, 정렬 순서, ConsistentRead, ExclusiveStartKey)까지 다루며, 클라이언트 설정과 선택적 페이지네이션 루프를 갖춘 실행 가능한 프로그램을 출력합니다.
Query나 Scan에서 Limit은 실제로 무엇을 제한하나요?
Limit은 요청당 DynamoDB가 평가하는 항목 수의 상한이지, 돌려받는 일치 항목 수가 아닙니다. 필터는 읽기 이후에 적용되므로 Limit 25와 FilterExpression이 있는 Query는 25개 미만 — 혹은 0개 — 를 반환하면서도 평가한 모든 것의 읽기 용량을 소비하며, 페이지네이션은 LastEvaluatedKey에서 이어집니다. 자동으로 페이지네이션하는 AWS CLI에서는 같은 파라미터를 --page-size로 설정합니다.
DynamoDB 페이지네이션(LastEvaluatedKey)은 어떻게 동작하나요?
데이터가 더 남은 Query 또는 Scan 응답에는 마지막으로 읽은 항목의 기본 키인 LastEvaluatedKey가 포함됩니다. 이를 다음 요청의 ExclusiveStartKey로 되돌려 보내고, LastEvaluatedKey가 없는 응답이 올 때까지 반복합니다. “모든 페이지 가져오기”를 켜면 생성되는 SDK v3와 boto3 프로그램에 바로 그 루프가 들어갑니다. AWS CLI는 --no-paginate를 넘기지 않는 한 스스로 페이지를 따라갑니다.
강력한 일관성 읽기는 언제 사용할 수 있나요?
ConsistentRead는 기본 테이블과 로컬 보조 인덱스에서 동작하지만 글로벌 보조 인덱스에서는 동작하지 않습니다 — ConsistentRead를 설정한 GSI 대상 Query는 거부됩니다. 강력한 일관성 읽기는 최종적 일관성 읽기보다 읽기 용량을 두 배 소비하기도 합니다. 이는 PartiQL 문 텍스트가 아니라 API 파라미터이기 때문에 PartiQL 탭이 정직하게 거절합니다.
여기에 입력한 내용이 어딘가로 업로드되나요?
아니요. 이 페이지는 정적입니다. 요청 구성과 코드 생성이 전부 브라우저 안에서 이루어지므로 테이블 이름, 키 값, 필터가 서버에 닿는 일은 없습니다. “링크 복사”는 요청 전체를 URL에 담습니다 — 입력한 내용이 페이지 밖으로 나가는 유일한 경로는 그 링크의 공유이며, 그것은 당신의 손에 달려 있습니다.