백엔드
DynamoDB 핫 파티션을 해결하는 3가지 방법 (4): 쓰기 샤딩
두줄요약
member GSI의 핫 파티션을 쓰기 샤딩으로 분산한 과정을 다뤘습니다. 공통 프레임워크와 단계적 마이그레이션, 백필 중 Rolling Hot Partition 대응까지 설명했습니다.
문제 상황
- User 테이블의 member GSI가 channelId 단위로 쓰기가 집중되어 핫 파티션과 쓰로틀링이 발생하는 구조
- Back-Pressure로 인해 User 테이블 쓰기까지 거부되어 Boot 요청 실패로 이어질 위험
원인 분석
- 단일 channelId 로 쓰기가 모여 DynamoDB 물리 파티션의 1,000 WCU 한계에 먼저 도달
- 기존 조회 패턴은 channelId 와 memberId 가 모두 있어 단건 조회가 가능했지만, 쓰기 분산은 되지 않음
- 백필에서는 Export 파일의 순서가 비슷한 키를 연속 처리하게 만들어 Rolling Hot Partition 발생
해결 방법
- memberId 로 suffix를 계산해 channelId 와 조합하는 결정적 쓰기 샤딩 적용
- 공통 프레임워크로 저장, 조회, 백필의 샤드 계산 규칙을 통일
- DynamoDB Export + AWS Glue 백필에 Rate Limit과 Shuffle을 함께 적용
- 기존 GSI에서 신규 샤드 GSI로 단계적으로 전환하고 검증 후 제거
적용해볼 점
- 조회 입력만으로 대상 샤드를 재현할 수 있는지 먼저 확인
- 쓰기량뿐 아니라 읽기 비용과 백필 운영 비용까지 함께 고려
- 대규모 백필에서는 처리량 제한과 처리 순서 섞기를 같이 설계
