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

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

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

두줄요약

DynamoDB GSI 핫 파티션이 Boot까지 막는 장애 구조를 분석했습니다. 인덱스 테이블과 스트림 기반 파이프라인으로 쓰기 병목을 분리하는 설계를 소개했습니다.

문제 상황

  • DynamoDB User 테이블의 managed GSI에 쓰기가 집중되며 파티션 핫스팟과 Back-Pressure 발생
  • GSI와 무관한 Boot 요청까지 거부되어 고객사 사이트의 채널톡 동작 중단으로 확대
  • 메인 테이블 용량 확장이나 경로별 요청 제한만으로는 근본 해결 불가

원인 분석

  • managed GSI의 PK가 channelId라 특정 채널 쓰기가 한 파티션에 집중
  • SK가 lastSeenAt이라 접속 시각 갱신마다 삭제 후 재기록이 일어나 쓰기 비용 증가
  • GSI 쓰기 지연이 메인 테이블 쓰기 거부로 이어지는 DynamoDB Back-Pressure 구조

해결 방법

  • managed GSI를 제거하고 user_managed_index 인덱스 테이블로 역할 분리
  • DynamoDB Streams(Kinesis) 기반 ch-flow-shard와 ch-rate-limiter로 쓰기 전파와 핫파티션 제어
  • 내부 SQS 버퍼로 핫 채널 쓰기를 격리해 메인 테이블과 인덱스 테이블의 비동기 분리

댓글 0

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

댓글을 불러오는 중...