관계형 데이터베이스를 오래 써온 개발자가 DynamoDB를 처음 배울 때 가장 충격을 받는 부분은 두 가지다. 첫째, JOIN이 없다. 둘째, 어떻게 데이터를 조회할지를 먼저 결정한 다음 테이블을 설계해야 한다 — RDBMS와는 정반대 순서다. 이 day에서는 왜 Amazon이 2007년 DynamoDB의 전신인 Dynamo를 만들었는지, 그 핵심 아이디어인 파티셔닝과 일관성 모델이 어떻게 동작하는지를 이해한다. 이 원리를 이해하면 DVA-C02의 DynamoDB 문제는 외우지 않아도 풀린다.
2007년 10월, Amazon의 수석 엔지니어들이 ACM SOSP 학술회의에서 "Dynamo: Amazon's Highly Available Key-value Store"라는 논문을 발표했다. 이 논문은 분산 시스템 역사에서 가장 영향력 있는 논문 중 하나가 됐다.
당시 Amazon의 문제는 이랬다. MySQL 같은 관계형 DB는 트랜잭션을 위해 락(lock)을 사용하고, 분산 확장이 어려우며, 특히 피크 트래픽(블랙 프라이데이, 크리스마스)에서 수십만 TPS를 처리하기 어렵다. Amazon의 수석 과학자 Werner Vogels는 "Amazon의 수많은 서비스가 95% 이상의 쿼리에서 PRIMARY KEY를 사용하며, 복잡한 JOIN이 거의 필요없다"는 분석을 했다. 그렇다면 JOIN을 포기하고 수평 확장에 최적화된 스토리지를 만들면 어떨까?