Go(AWS SDK v2)의 DynamoDB DeleteItem

client.DeleteItem전체 기본 키를 담은 dynamodb.DeleteItemInput을 받습니다. types.ReturnValueAllOld를 쓰면 응답이 실제로 뭔가 있었는지 알려주고, ConditionExpression을 더하는 순간에는 오류가 왜 그것이 남아 있는지 알려줍니다.

코드

package main

import (
	"context"
	"fmt"
	"log"

	"github.com/aws/aws-sdk-go-v2/aws"
	"github.com/aws/aws-sdk-go-v2/config"
	"github.com/aws/aws-sdk-go-v2/service/dynamodb"
	"github.com/aws/aws-sdk-go-v2/service/dynamodb/types"
)

func main() {
	ctx := context.TODO()
	cfg, err := config.LoadDefaultConfig(ctx, config.WithRegion("us-east-1"))
	if err != nil {
		log.Fatalf("load config: %v", err)
	}
	client := dynamodb.NewFromConfig(cfg)

	out, err := client.DeleteItem(ctx, &dynamodb.DeleteItemInput{
		TableName: aws.String("Music"),
		Key: map[string]types.AttributeValue{
			"Artist":    &types.AttributeValueMemberS{Value: "Arturo Sandoval"},
			"SongTitle": &types.AttributeValueMemberS{Value: "Cubano Chant"},
		},
		ReturnValues: types.ReturnValueAllOld,
	})
	if err != nil {
		log.Fatalf("delete item: %v", err)
	}

	if len(out.Attributes) == 0 {
		fmt.Println("No item with that key existed")
	} else {
		fmt.Println("Deleted:", out.Attributes)
	}
}

설명

  • types.ReturnValueAllOld는 문자열 "ALL_OLD"가 아니라 타입이 지정된 상수입니다 — 이 필드는 types.ReturnValue를 받으므로 오타가 런타임 ValidationException이 아니라 컴파일 오류가 됩니다. DeleteItemNONEALL_OLD만 받아들이며, 나머지 열거값UpdateItem과 공유합니다.
  • len(out.Attributes) == 0이 얻을 수 있는 유일한 신호입니다 — 존재한 적 없는 키를 삭제해도 성공하며, SDK는 오류 대신 nil 맵을 돌려줍니다. "삭제했다"와 "삭제할 것이 없었다"를 가르는 다른 표시는 없습니다.
  • 가드 실패는 errors.As로 잡으세요var ccfe *types.ConditionalCheckFailedException 다음 errors.As(err, &ccfe)입니다. Go v2가 서비스 오류를 Smithy 작업 오류로 감싸기 때문에 직접 비교로는 놓칩니다.
  • 예외가 진 항목을 실어 올 수 있습니다ReturnValuesOnConditionCheckFailure: types.ReturnValuesOnConditionCheckFailureAllOld를 설정하면 ccfe.Item이 DynamoDB가 본 그대로의 행을 담으므로, 다시 읽지 않고도 실제로 가드를 통과하지 못한 값을 기록할 수 있습니다. SDK는 그 대가를 이렇게 문서화합니다. "No read capacity units are consumed."
  • 호출당 항목 하나 — 전체 삭제 API는 없습니다. 여러 항목을 삭제한다는 것은 먼저 키를 모아 쓰기를 배치로 처리하거나, 테이블을 통째로 버린다는 뜻입니다.

시각적으로 해보기

까다로운 쪽은 가드입니다. ConditionExpression과 거기에 딸린 이름·값 맵 말입니다. DynamoDB Expression Builder가 이 셋을 폼 하나로 조립해 줍니다.

DynoTable은 같은 위험을 반대편에서 공략합니다. 삭제는 먼저 Pending changes 패널에 들어가고 커밋할 때만 테이블에 도달하므로, 잘못된 행은 복구할 대상이 아니라 그냥 버리면 되는 것이 됩니다. DynoTable 다운로드.

관련 예제

참고 자료

위에 링크된 공식 AWS 문서를 기준으로 2026-07-28에 마지막으로 검증했습니다.

Console 없이 DynamoDB 작업하기

DynamoDB로는 실행할 수 없는 진짜 SQL(JOINs, GROUP BY, 집계)을 실행하는 빠른 DynamoDB 데스크톱 클라이언트. 시각적 편집과 여러분 자신의 Bedrock 키로 동작하는 AI 에이전트를 제공합니다.

30일 무료 체험, 신용카드 불필요 — 이후 기간 제한 없는 무료 요금제.