목록 보기
DynamoDB 핫 파티션을 해결하는 3가지 방법 (1): 인덱스 테이블로 GSI 떼어내기 설계편
백엔드

DynamoDB 핫 파티션을 해결하는 3가지 방법 (1): 인덱스 테이블로 GSI 떼어내기 설계편

채널톡
채널톡
2026년 5월 14일

두줄요약

DynamoDB managed GSI의 핫 파티션이 Boot 트래픽까지 막는 구조를 분석했습니다. 이를 해결하기 위해 인덱스 테이블과 쓰기 전파 파이프라인을 설계했습니다.

문제 상황

  • DynamoDB User 테이블의 managed GSI에 쓰기가 집중되며 테이블 전체 쓰기까지 막히는 Back-Pressure 장애 발생
  • Boot 요청과 외부 매체 갱신이 같은 파티션을 포화시켜 채널톡 동작 장애로 확산

원인 분석

  • GSI의 PK가 channelId라 특정 채널 쓰기가 한 파티션으로 몰리는 구조
  • GSI의 SK가 lastSeenAt이라 갱신 시 삭제 후 재기록이 발생해 쓰기 비용 증가
  • GSI 파티션 포화 시 메인 테이블 쓰기까지 거부되는 DynamoDB 특성

해결 방법

  • managed GSI를 직접 대체하는 인덱스 테이블 user_managed_index 설계
  • DynamoDB Streams(Kinesis), ch-flow-shard, ch-rate-limiter, SQS 버퍼로 쓰기 전파 파이프라인 구성
  • DDB Export + Glue + DDB Import + Kinesis Catch-Up으로 무중단 마이그레이션 진행

선택 이유

  • 키 샤딩은 정렬된 목록 조회에서 스캐터-게더 비용이 과도함
  • 도메인 테이블 분리는 쓰기 경로가 너무 많아 비즈니스 로직 수정 부담이 큼
  • 인덱스 테이블 분리는 기존 쓰기 경로를 유지하면서 병목만 통제 가능

댓글 0

댓글을 작성하려면 로그인이 필요합니다.

댓글을 불러오는 중...