피드로 돌아가기
Dev.toDatabase
원문 읽기
Sparse GSI 도입을 통한 DynamoDB Full Table Scan 제거 및 실시간 스케줄러 구현
How I used a sparse GSI to build a real-time post scheduler on Amazon DynamoDB
AI 요약
Context
사용자별 맞춤형 포스팅 스케줄링을 위해 매분 실행되는 Cron 기반 스케줄러 설계 필요성 증대. 전체 Product 테이블을 Scan 하여 대상자를 필터링하는 단순 접근 방식은 데이터 규모 확대 시 성능 저하와 비용 상승을 초래하는 구조적 한계 존재.
Technical Solution
- Sparse GSI의 특성을 활용해
scheduleStatus속성이 존재하는 'Active' 상태의 아이템만 인덱싱하는 필터링 구조 설계 scheduleStatus(Partition Key)와nextRunAt(Sort Key) 조합의 GSI를 구축하여 현재 시간 기준 실행 대상자만 정밀하게 Query- 포스트 생성 직후 다음 실행 시간을 재계산하여
nextRunAt을 갱신함으로써 인덱스 내 데이터 최신성 유지 - Vercel Webhook 라우팅 시
vercelProjectId에 Sparse GSI를 적용하여 대규모 데이터셋 내 단일 쿼리로 대상 제품 식별 - TypeScript 환경에서
removeUndefinedValues: true설정을 통해 undefined 필드로 인한 DynamoDB Write 에러 원천 차단
실천 포인트
1. 데이터 상태가 '활성/비활성'으로 나뉘는 경우 속성 존재 여부에 따른 Sparse Index 검토
2. 정기적 스캔이 필요한 작업 시 Sort Key에 Timestamp를 배치하여 범위 쿼리(Range Query) 최적화
3. DynamoDB DocumentClient 사용 시 undefined 값 처리 설정을 통한 런타임 에러 방지