
백엔드
DynamoDB Limit 설정으로 RCU 97% 절감한 이야기
두줄요약
DynamoDB 조회에서 Limit 미설정과 Strong Consistent Read가 RCU 급증의 원인이었습니다. SearchLimit 적용과 일관성 수준 조정으로 RCU를 최대 97% 절감했습니다.
문제 상황
- DynamoDB RCU가 약 1k에서 130k/s까지 급증한 현상
- 특정 조회 코드에서 Limit 미설정과 Strong Consistent Read 사용으로 불필요한 비용 발생
- guregu/dynamo의 Iter 흐름과 Query 페이징 동작에 대한 오해 가능성
원인 분석
- Limit만 사용한 경우 필터 조건에 따라 라이브러리 내부에서 API Limit이 전달되지 않을 수 있는 구조
- Iter() 첫 호출 시 페이지 전체를 가져와, 중간에 break해도 이미 RCU가 소모되는 동작
- 조회 대상 테이블에서 평균 300개 수준의 파티션을 광범위하게 스캔한 점
해결 방법
- SearchLimit 적용으로 서버 측 스캔 범위 제한
- Strong Consistent Read를 Eventually Consistent Read로 전환
- ConsumedCapacity 로깅과 일단위 메트릭, 배포 이력 매트릭스 교차 분석으로 원인 추적
