DynamoDB는 관계형 데이터베이스인가요?
아닙니다. DynamoDB는 관계형 데이터베이스가 아니라 NoSQL 키-값 및 문서 저장소입니다. 고정 스키마를 가진 테이블도, 외래 키도, 조인도 없습니다. 관계형(SQL) 데이터베이스에서처럼 관련 테이블에 걸쳐 정규화하는 대신, 애플리케이션의 액세스 패턴을 중심으로 데이터를 모델링하고 비정규화합니다. 관계형 워크플로가 그립다면 DynoTable이 그중 일부를 클라이언트에서 되돌려 줍니다. 실제 JOIN과 GROUP BY를 실행하는 SQL 워크벤치, 그리고 테이블을 시각적으로 조인하는 스마트 테이블이 있습니다.
왜 관계형이 아닌가요
관계형 데이터베이스는 스키마를 강제하고, 데이터를 여러 테이블에 정규화하고, 읽는 시점에 조인합니다. DynamoDB는 그 반대입니다. 스키마 없는 항목을 저장하고, 관련 데이터를 복제하거나 내장해 미리 조인해 두기를 기대합니다.
관계형 기능을 대신하는 것
- 조인 → 비정규화와 단일 테이블 설계.
- 정규화된 테이블 → 하나의 파티션 키 아래 묶인 항목 컬렉션.
- 임의 SQL → 키 기반 Query와 Scan, 또는 PartiQL(SQL 호환 하위 집합이며 여전히 조인 없음).
덧붙이면 PartiQL이 그 간극을 메워 주지도 않습니다. PartiQL 파서는 두 테이블 SELECT를 거부하고 GROUP BY도 거부하는데, 둘 다 무엇을 읽기도 전입니다. 정확한 거부 문구는 DynamoDB는 조인을 지원하나요와 DynamoDB는 SQL을 지원하나요에 인용되어 있습니다.
비정규화가 실제로 치르는 비용
이 절충은 보통 "조인 대신 데이터를 복제한다"라고 설명되어 스토리지 결정처럼 들립니다. 실제로는 쓰기와 원자성에 관한 결정이며, 관계형 엔진이 여러분에게 숨겨 주는 부분이 바로 그것입니다.
주문이 5,000건인 고객이 있고, 그 고객이 표시 이름을 바꾼다고 해 봅시다. 관계형 스키마에서는 한 행에 대한 UPDATE 하나이고 모든 조인이 즉시 새 값을 집어 옵니다. DynamoDB로 비정규화하면 그 이름은 5,000개 주문 항목 모두에 살고 있으므로, 이름 변경은 항목 쓰기 5,000번입니다. 쓰기 단위 5,000개이고, 항목당 1 KB 기준 us-east-1 온디맨드로 약 $0.003입니다.
돈은 아무것도 아닙니다. 문제는 그것이 하나의 작업이 될 수 없다는 것입니다. TransactWriteItems는 100개 작업에서 상한에 걸리므로 5,000개 항목은 최소 50개의 별도 트랜잭션이 되고, 그것들 사이에는 격리가 없습니다. 그 팬아웃이 도는 동안 여러분의 데이터는 스스로와 어긋나 있고, 그 와중에 들어온 읽기는 옛 이름과 새 이름이 섞인 상태를 보게 됩니다.
관계형 데이터베이스가 사 주는 것이 바로 그것입니다. 권위 있는 사본 하나에 대한 원자적 변경 하나. 그것을 포기하는 것이 실제 입장료이며, "어떤 속성을 인덱싱할까"보다 "어떤 속성을 복제할까"가 더 많은 설계 관심을 받아야 하는 이유이기도 합니다.
더 알아보기
DynamoDB에서 데이터를 모델링하는 방법과 단일 테이블 설계를 읽어 보세요. 데이터 모델을 시각적으로 탐색하고 SQL 워크벤치로 그 위에 관계형 방식의 JOIN/GROUP BY 쿼리를 실행하려면 DynoTable을 다운로드하세요.
참고 자료
- What is Amazon DynamoDB? — Amazon DynamoDB Developer Guide
- Core components of Amazon DynamoDB — Amazon DynamoDB Developer Guide
- PartiQL — a SQL-compatible query language for Amazon DynamoDB — Amazon DynamoDB Developer Guide
위에 링크된 공식 AWS 문서를 기준으로 2026-07-13에 마지막으로 검증했으며, 트랜잭션 100개 작업 상한은 2026-07-28에 API 레퍼런스에서 다시 확인했습니다.