
백엔드
채널코퍼레이션의 Amazon DynamoDB와 함께한 아키텍처 현대화 여정 – 3부
두줄요약
채널코퍼레이션은 DynamoDB User 테이블의 Badge 트래픽과 GSI 병목을 분리해 해결했습니다. Export/Glue/Import 기반 마이그레이션으로 서비스 영향 없이 5.5시간 수준으로 전환했습니다.
문제 상황
- 채널톡의 범용 User 테이블에 Badge, 프로필, 태그, 상태가 함께 있어 읽지 않은 메시지 급증 시 전체 쓰기 성능이 흔들림
- 트랜잭션 충돌 재시도와 GSI 단일 파티션 집중으로 WCU가 소진되고, 부트 기능까지 영향 받는 구조
원인 분석
- Badge 업데이트가 트래픽 스파이크를 일으키는 반면 기존 User 테이블은 균등 분산 쓰기 패턴과 섞여 있었음
- channelId 기반 GSI 3개가 동일 파티션에 부하를 몰아 back pressure를 유발
- 항목 분리만으로는 동일 테이블의 트랜잭션 충돌과 GSI 업데이트 전파를 해소할 수 없었음
해결 방법
- Badge 기능을 UserBadge 전용 테이블로 분리하고, User 테이블과 용량 모드를 각각 다르게 운영
- 마이그레이션은 Export to S3, AWS Glue, Import from S3와 TmpUserBadge를 활용해 프로덕션 RCU/WCU 소모 없이 진행
- 동기식 이중 쓰기로 이전/신규 테이블을 함께 검증하며 전환 안정성을 확보

