Cannot do operations on a non-existent table (DynamoDB Local)
요약 — 이것은 DynamoDB Local이 표현한 ResourceNotFoundException이며, 함정은 "존재하지 않음"이 이 인스턴스가 현재 접근 키 + 리전에 대해 연 데이터베이스 파일로 한정된다는 점입니다. -sharedDb가 없으면 Local은 자격 증명/리전 조합마다 별도의 테이블 집합을 유지하므로, CLI로 만든 테이블이 앱에는 보이지 않을 수 있습니다. Local을 -sharedDb로 실행하세요(또는 모든 곳에 동일한 더미 자격 증명 + 리전을 고정). 그리고 -inMemory는 재시작할 때마다 빈 상태로 시작한다는 점을 기억하세요.
무엇을 의미하나요
ResourceNotFoundException: Cannot do operations on a non-existent table요청이 실행 중인 DynamoDB Local에 도달했고, Local이 테이블을 찾았지만 찾지 못했습니다 — 요청의 식별자에 대해 사용 중인 데이터베이스에서. 실제 AWS는 같은 실패를 다르게 표현하므로(Requested resource not found), 이 정확한 메시지는 에뮬레이터와 통신하고 있다는 강한 힌트입니다.
왜 발생하나요
- 자격 증명/리전 분리 뇌(고전적).
-sharedDb가 없으면 DynamoDB Local은 각 요청의 접근 키 ID와 리전을 따라 데이터베이스 파일 이름을 짓습니다. 따라서 CLI(--profile의 키local, 리전us-east-1)와 앱(키fake, 리전local)은 서로 다른 두 테이블 집합을 보게 됩니다 — 각각 "자신을 위해" 테이블을 만든 것입니다. -inMemory+ 재시작 — 인메모리 모드는 디스크에 아무것도 유지하지 않습니다. 재시작할 때마다 빈 데이터베이스입니다.- 볼륨 없는 새 컨테이너 —
docker run amazon/dynamodb-local은 빈 상태로 시작합니다.-dbPath스토리지를 마운트하지 않으면 이전 컨테이너의 테이블은 사라집니다. - 테이블이 실제로 생성되지 않음 — 설정 스크립트가 실행되지 않았거나, 다른 포트/인스턴스를 대상으로 생성했습니다.
- 같은 코드가 실제 AWS vs Local을 가리킴 — 테이블이 클라우드에는 있지만 에뮬레이터에는 없습니다(또는 그 반대).
어떻게 고치나요
이 식별자가 보는 것을 확인하세요 — 앱이 사용하는 정확한 자격 증명/리전/엔드포인트로 테이블을 나열하세요:
AWS_ACCESS_KEY_ID=local AWS_SECRET_ACCESS_KEY=local \ aws dynamodb list-tables --endpoint-url http://localhost:8000 --region us-east-1여기서 테이블이 없는데 "어딘가에" 존재한다면, 범위 지정 문제입니다.
Local을
-sharedDb로 실행하세요 — 자격 증명/리전과 무관하게 모든 클라이언트가 하나의 데이터베이스를 공유하도록:java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -sharedDb # docker: docker run -p 8000:8000 amazon/dynamodb-local -jar DynamoDBLocal.jar -sharedDb또는 모든 곳에 하나의 식별자를 고정하세요 — CLI 프로필, SDK 클라이언트 구성, 테스트 설정에서 동일한 더미
accessKeyId,secretAccessKey,region.재시작 간 유지하세요 —
-inMemory를 빼고,-dbPath를 설정하고, (Docker에서는) 볼륨으로 마운트하세요.설정에서 테이블을 만드세요 — 테스트의 경우 스위트 부트스트랩에서 테이블을 만들고(그리고 기다리고) 새 인스턴스가 절대 놀라지 않도록 하세요.
범위 지정 문제는 추론하기보다 보기 가 훨씬 쉽습니다 — DynoTable 데스크톱 앱은 DynamoDB Local에 연결해 엔드포인트 + 자격 증명 조합이 정확히 어떤 테이블을 볼 수 있는지 보여주므로, 분리 뇌 문제가 한눈에 드러납니다. 시드 데이터를 준비하나요? DynamoDB JSON 변환기는 일반 JSON을 타입이 지정된 항목으로 바꿉니다.
FAQ
방금 만든 테이블인데 왜 DynamoDB Local이 테이블이 존재하지 않는다고 하나요?
-sharedDb가 없으면 DynamoDB Local은 접근 키 ID와 리전마다 별도의 데이터베이스 파일을 유지하므로, 자격 증명이나 리전이 다르면 CLI로 만든 테이블이 앱에는 보이지 않을 수 있습니다. Local을 -sharedDb로 실행하거나 모든 곳에 동일한 더미 자격 증명과 리전을 고정하세요.
재시작 후 DynamoDB Local 테이블이 사라진 이유는 무엇인가요?
-inMemory 모드에서는 디스크에 아무것도 유지되지 않으므로 재시작할 때마다 빈 데이터베이스입니다. 마운트된 볼륨이 없는 새 Docker 컨테이너도 빈 상태로 시작합니다. 테이블을 유지하려면 -inMemory를 빼고, -dbPath를 설정하고, 볼륨으로 마운트하세요.
관련 오류
- ResourceNotFoundException — 실제 AWS 버전(잘못된 리전/계정/테이블 이름).
- Could not connect to DynamoDB Local (ECONNREFUSED)
- DynamoDB Local port 8000 in use
- 학습: Running DynamoDB Local · Connect to Local & LocalStack
References
- DynamoDB local usage notes — AWS DynamoDB Developer Guide (per-credential/Region
myaccesskeyid_region.dbfiles,-sharedDb→shared-local-instance.db,-inMemorykeeps nothing on disk) - Deploying DynamoDB locally on your computer — AWS DynamoDB Developer Guide (Docker Compose
-sharedDb -dbPath ./data+ volume pattern, dummy credentials) - amazon/dynamodb-local — Docker Hub (official image; fresh containers start empty without a mounted volume)
공식 AWS 문서(위 링크)를 기준으로 2026-07-13에 마지막으로 검증되었습니다.