백엔드
메시지 트래픽 100배에도 끄떡 없게 고객 테이블 뜯어고치기 (1)
두줄요약
Badge 업데이트가 User 테이블 전체를 느리게 만든 원인을 분석하고, 별도 테이블 분리 전략을 설명했습니다. 16억 건 규모를 안전하게 옮기기 위해 Export/Import와 Glue 기반 마이그레이션을 설계했습니다.
문제 상황
- User 테이블에 고객 프로필과 Badge 상태가 함께 묶여 있어 스파이크성 Badge 업데이트가 전체 테이블 성능을 저하
- DynamoDB 쓰기 용량 고갈과 GSI 핫 파티션으로 인한 Back-Pressure가 정상적인 User 업데이트까지 차단
원인 분석
- Badge 업데이트가 메시지 발송 시점에 집중되며 트랜잭션과 재시도로 WCU 소모가 크게 증가
- 모든 GSI가 channelId에 몰려 특정 파티션 병목이 발생하고, 메인 테이블 쓰기 거부로 전파
해결 방법
- Badge를 User 테이블에서 분리해 별도 UserBadge 테이블로 설계 전환
- 대규모 이관은 DynamoDB Export/Import와 AWS Glue를 사용해 RCU/WCU 소모 없이 진행
- 마이그레이션 중 변경분 유실을 막기 위해 TmpUserBadge와 동기 Dual Write를 활용
