표현식에서 사용되지 않는 ExpressionAttributeNames에 제공된 값

TL;DR — 표현식이 참조하지 않는 이름 자리 표시자를 ExpressionAttributeNames(예: #status)에 선언했습니다. DynamoDB에서는 선언된 모든 별칭을 KeyConditionExpression, FilterExpression, UpdateExpression, ConditionExpression 또는 ProjectionExpression에서 사용해야 합니다. 사용하지 않는 별칭을 제거하거나 이를 참조해야 했던 표현식을 수정하세요.

무엇을 의미하는가

ValidationException: 1 validation error detected: Value provided in ExpressionAttributeNames unused in
expressions: keys: {#status}

# what the engine actually returns, reproduced against DynamoDB Local:
ValidationException: 1 validation error detected: Value provided in ExpressionAttributeNames unused in expressions: keys: {#status}

ExpressionAttributeNames은 속성 이름 별칭에 대한 대체 맵입니다(예약어 또는 특수 문자가 있는 이름에 필요함). DynamoDB는 엄격한 양방향 계약을 적용합니다. 표현식에 사용하는 모든 별칭은 선언되어야 하며 **그리고** 선언하는 모든 별칭은 사용해야 합니다. 참조되지 않은 남은 항목이 이 HTTP 400ValidationException`을 트리거합니다. 이는 클라이언트 측이며 맵이 표현식과 일치할 때까지 재시도할 수 없습니다.

왜 발생하는가

  • 표현식을 편집한 후 오래된 별칭이 남음 — 표현식에서 #status = :s를 제거했지만 이름 맵에서 #status을 삭제하는 것을 잊었습니다.
  • 과도하게 선언된 생성된 맵 — 매핑 레이어는 최종 표현식이 건드리지 않는 속성이라도 모든 속성에 대한 별칭을 내보냈습니다.
  • 별칭은 이름이 아니라 값 맵에 있습니다:status(값)을 의미했지만 #status(이름)으로 선언했습니다.
  • 오타 불일치 — 지도에서는 #status를 선언하는 반면 표현식에서는 #stat를 사용하므로 #status는 기술적으로 사용되지 않습니다.

어떻게 해결하는가

  1. ExpressionAttributeNames의 메시지 이름에서 사용하지 않는 별칭을 삭제합니다.
  2. 표현식과 함께 지도를 고정 상태로 유지 — 표현식이 실제로 참조하는 경우에만 #name을 선언합니다.
  3. 이름과 값이 혼동되는지 확인하세요#-별칭은 ExpressionAttributeNames에 있고 :-자리 표시자는 ExpressionAttributeValues에 있습니다.
  4. 요청을 다시 생성하여 이름, 값 및 표현식 텍스트가 직접 조립되지 않고 함께 작성되도록 합니다.

DynoTable에서 검사

DynoTable은 업데이트 및 필터 편집기에서 예약된 속성 이름을 별칭으로 지정합니다. 출력의 모든 #placeholder는 표현식에서 참조됩니다. ⌘K로 테이블을 열고, 항목을 편집하고, 생성된 ExpressionAttributeNames 지도를 복사하세요.

reserved words checker에서 실패한 SDK 요청을 교차 확인합니다. # 접두사가 필요한 이름에 대한 별칭 맵을 인쇄합니다. ⌘P로 프로필을 전환합니다. Connect to AWSInstall를 참조하세요.

출처

재현하기

어떤 표현도 참조하지 않는 ExpressionAttributeNames 항목:

await client.send(
  new UpdateItemCommand({
    TableName: 'orders',
    Key: {pk: {S: 'ORDER#1'}, sk: {S: 'META'}},
    UpdateExpression: 'SET stat = :v', // note: 'stat', not '#unused'
    ExpressionAttributeNames: {'#unused': 'status'},
    ExpressionAttributeValues: {':v': {S: 'shipped'}}
  })
);

실제 출력:

ValidationException: 1 validation error detected: Value provided in ExpressionAttributeNames unused in expressions: keys: {#unused}
HTTP 400

메시지에는 문제가 있는 키의 이름이 지정되어 있으며, 이는 다른 내용을 읽지 않고도 조치를 취할 수 있는 몇 가지 DynamoDB 검증 오류 중 하나입니다. 일반적으로 편집으로 인해 표현식에서 자리 표시자가 제거되었지만 해당 선언은 남겨진 후에 나타납니다.

관련 오류

참고 자료

위에 링크된 공식 AWS 문서를 기준으로 2026년 7월 13일에 마지막으로 확인되었습니다.

JavaScript용 AWS SDK v3.1095.0을 사용하여 DynamoDB Local 2.x에 대해 2026년 7월 26일 재현 — 위 출력은 그대로입니다.

Console 없이 DynamoDB 작업하기

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

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