DynamoDB를 처음 배울 때 "파티션 키를 잘 골라야 한다"는 말을 듣지만, "잘 고른다"의 수학적 의미는 잘 가르쳐주지 않는다. 이 day에서는 파티션 키 설계가 왜 수학적 문제인지, LSI와 GSI가 내부적으로 어떻게 다르게 저장되는지, 그리고 수십 개의 마이크로서비스가 사용하던 테이블들을 하나로 합치는 Single-Table Design이 왜 DynamoDB의 표준 패턴인지를 깊이 파고든다.
파티션 키의 "좋은 선택"을 수학으로 정의하면 이렇다: 모든 파티션에 걸쳐 읽기/쓰기 부하가 균등하게 분산되도록 해야 한다.
이 균등 분산을 측정하는 지표가 카디널리티(Cardinality)와 편향도(Skewness)다.
카디널리티 계산:
userId(UUID): 수백만 고유 값 → 수백만 파티션 가능 → 좋음
status: 3~5개 값 → 최대 5개 파티션 → 핫 파티션 위험
날짜: 수천 개 값이지만 오늘 날짜에 쓰기 집중 → 시간적 편향
편향도가 중요한 이유:
파티션 A: 초당 쓰기 900건 (한도 1,000 WCU에 근접)
파티션 B: 초당 쓰기 10건
파티션 C: 초당 쓰기 5건
테이블 총 WCU = 915/s로 한도 여유가 있어도
파티션 A에서만 throttling 발생 → Adaptive Capacity가 완화
하지만 편향이 극심하면 AC도 한계