Python(boto3 batch_writer)에서의 DynamoDB 배치 쓰기

Python에서 DynamoDB 항목을 대량으로 쓰는 관용적인 방법은 boto3의 batch_writer() 컨텍스트 매니저입니다: put과 delete를 버퍼링하고, 최대 25개씩 BatchWriteItem 호출로 보내며, 미처리 항목을 자동으로 재전송합니다 — 다른 언어에서는 모두 손으로 작성하는 그 재시도 루프입니다.

Code

import boto3

dynamodb = boto3.resource("dynamodb")
table = dynamodb.Table("Music")

songs = [
    {"Artist": "Arturo Sandoval", "SongTitle": "Cubano Chant", "AlbumTitle": "Danzon", "Year": 1994},
    {"Artist": "Arturo Sandoval", "SongTitle": "A Mis Abuelos", "AlbumTitle": "Danzon", "Year": 1994},
    {"Artist": "Arturo Sandoval", "SongTitle": "Groovin' High", "AlbumTitle": "Swingin'", "Year": 1996},
]

with table.batch_writer() as batch:
    for song in songs:
        batch.put_item(Item=song)
    batch.delete_item(Key={"Artist": "Ella Fitzgerald", "SongTitle": "Misty"})

print(f"Wrote {len(songs)} songs")

Explanation

  • batch_writer() — boto3 문서에 따르면 이 핸들은 "버퍼링과 항목을 배치로 보내는 것을 자동으로 처리"하며, "미처리 항목도 자동으로 처리하고 필요에 따라 재전송"합니다. with 블록을 나가면 아직 버퍼에 남은 것이 모두 플러시됩니다.
  • 평범한 Python 값 — 이것은 리소스 API입니다: DynamoDB JSON 없이 숫자를 int/Decimal로 사용합니다. 각 put_item 항목은 테이블의 전체 기본 키를 포함해야 하며, delete_item은 키만 받습니다.
  • 중복 키 — 원시 BatchWriteItem 호출은 동일한 키에 대한 두 개의 쓰기를 거부합니다. 소스 데이터에 키가 반복될 수 있다면 라이터를 table.batch_writer(overwrite_by_pkeys=["Artist", "SongTitle"])로 구성하세요 — 버퍼를 중복 제거해 키당 마지막 쓰기를 유지합니다.
  • 그 아래에는 동일한 서비스 한도가 적용됩니다: 요청당 25개 쓰기, 항목당 400 KB, 요청당 16 MB. batch_writer는 청킹을 처리하지만, 항목별 상한을 없앨 수는 없습니다.
  • 업데이트 없음, 조건 없음BatchWriteItemUpdateItem이나 ConditionExpression을 표현할 수 없습니다. 기존 키에 대한 put은 항목을 조용히 교체합니다. 전부 아니면 전무이거나 조건부 쓰기가 필요한가요? TransactWriteItems를 사용하세요.
  • 대신 저수준 클라이언트(client.batch_write_item)를 사용하시나요? 그러면 UnprocessedItems를 비우는 것은 여러분의 몫입니다 — Node.js 예제와 정확히 동일하게 지수 백오프로 반복하세요.

Do it visually

대량 로드 전에 항목을 확인하시나요? 항목 크기 계산기는 각 항목을 400 KB 상한에 대해 검증하며, DynamoDB Expression Builder는 후속 읽기와 쓰기를 위한 실행 가능한 boto3 코드를 복사해 줍니다.

GUI에서 항목을 대량으로 추가, 편집, 삭제하려면 — CSV/JSON 가져오기 포함 — DynoTable을 다운로드하세요.

References

Last verified 2026-07-13 against the official AWS documentation linked above.

Console 없이 DynamoDB 작업하기

DynoTable은 DynamoDB를 위한 빠른 데스크톱 클라이언트입니다 — 테이블을 탐색하고, SQL 스타일 쿼리를 실행하고, 항목을 로컬에서 편집하세요.