DevLog

엔지니어링 블로그를 한 곳에서 탐색하고, 최근 발행 흐름을 빠르게 파악할 수 있는 서비스 입니다.

Quick Links

  • Latest Feed
  • Engineering Directory

Support

  • 소개
  • 개인정보처리방침

Contribute

  • 원하는 블로그 추가 (준비 중)
  • Feedback

© 2026 DevLog Inc. All rights reserved.

본 사이트는 공개 RSS 피드를 통해 콘텐츠를 수집하며, 모든 콘텐츠의 저작권은 원저작자에게 있습니다.

Back to Feed
Read Original

Contents

Continue Reading

  • More from 채널 톡
  • Related reads#DynamoDB
#Backend

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

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

Summary

22억 건 무중단 마이그레이션 돌파! 채널톡의 DynamoDB 핫 파티션 탈출 작전

DynamoDB의 숨겨진 제약을 극복하고, GSI를 독립 테이블로 전향하며 스로틀링 0회를 구현해낸 대용량 데이터 마이그레이션 실무 노하우

이 아티클은 대규모 실시간 사용자 데이터를 관리하는 채널톡 백엔드 엔지니어링 팀이 DynamoDB GSI의 핫 파티션 성능 한계를 극복하기 위해 수행한 아키텍처 다각화 및 실무 구축기를 다룹니다. 기존 GSI 구조를 탈피하여 신규 인덱스 테이블을 별도로 구성하고 무중단 데이터를 이관하는 5단계 배포 여정을 구체적인 수치로 다룹니다. 특히 Token Bucket의 트래픽 버스트로 인해 발생한 예기치 못한 병목과 SQS 부하 상황을 Leaky Bucket 적용을 포함한 점진적인 튜닝을 통해 매끄럽게 극복해 나가는 해결 과정을 고스란히 엿볼 수 있습니다.

  • 01AWS Glue ETL과 DynamoDB Import를 결합하여 수십억 건 단위의 고속 정형 데이터 일괄 적재 및 분할 설계 구현
  • 02DynamoDB Streams의 NEW_AND_OLD_IMAGES를 활용해 변경 이전과 이후 상태를 파악하고 Delete-and-Put 복제 로직을 비동기로 완벽 구현
  • 03Kinesis Sequence Number를 버전 식별자로 삼은 조건부 PutItem 제어로 데이터가 뒤늦게 오거나 순서가 꼬여 유실되는 분산 환경의 무결성 보장
  • 04초기 Token Bucket 속도 제한으로 제어하지 못했던 버스트 현상을 Leaky Bucket 알고리즘 전환을 통해 지속 가능하고 예측 가능한 트래픽 수치로 정형화
  • 05아키텍처 대수술 후 기존의 월 110만 건 이상의 대형 쓰기 장애 스로틀링 건수를 0건으로 완전히 수습하는 대기록 달성

+RECOMMENDATION

DynamoDB를 핵심 아키텍처로 사용하며 트래픽 스케일업에 따른 핫 파티션 제약이나 GSI 쓰기 스로틀링의 연쇄 정체 문제를 미리 대응하려는 시니어 백엔드 아키텍트 및 데이터 인프라 엔지니어들에게 모범적인 가이드가 될 것입니다.

The Problem

DynamoDB의 Managed GSI에서 발생하는 특정 파티션의 쓰기 부하(핫 파티션)가 원본 User 테이블 전체의 쓰기 실패로 이어지는 문제가 발생했습니다. 서비스 운영 중 중단 없이 약 22억 건의 방대한 기존 데이터를 안전하게 신규 테이블로 마이그레이션하고, 이후 발생하는 실시간 변경 사항을 일관성 있게 동기화해야 하는 도전 과제가 있었습니다.

The Solution

DynamoDB Export, AWS Glue ETL, DynamoDB Import 파이프라인을 구축하여 대규모 스냅샷 데이터를 새로운 인덱스 테이블 구조로 성공적으로 이관했습니다. 실시간 변경분은 Kinesis Data Stream과 자사 애플리케이션(ch-flow-shard)을 통해 동기화하였으며, DynamoDB 내부 복제 동작을 모방한 커스텀 생성·변경·삭제 조건 제어 및 Leaky Bucket 기반의 Rate Limiter 알고리즘을 도입해 쓰기 속도를 제어했습니다.

The Result

마이그레이션 및 신규 인덱스 테이블 구조 전환 완료 후, 4월 한 달 운영 기준 기존의 110만 회에 달하던 GSI 쓰기 스로틀링 현상(WriteThrottleEvents)을 0회로 완전히 제거했습니다. 또한 신규 인덱스 테이블의 실시간 변경 전파 지연 시간을 P95 기준 500ms, P99 기준 950ms 내외의 고도로 안정적인 수준으로 인프라를 유지 및 입증하는 데 성공했습니다.

Trade-off

DynamoDB가 백그라운드에서 전적으로 제어해 주던 인덱스 복제 작업을 애플리케이션 레이어로 직접 올리게 되면서, 생성·삭제 조건이나 이벤트 버저닝, 에러 처리 등의 데이터 복제 일관성 보장 로직을 직접 구현하고 유지보수해야 하는 추가적인 소프트웨어적 관리 오버헤드가 발생했습니다. 또한, 비동기 파이프라인 전파 특성상 쓰기 직후 즉각적인 강한 일관성을 보장하지 못하며 최종 일관성 제어 모델에 의존해야 하는 한계가 존재합니다.

03

Key Concepts

Concept · 01

DynamoDB Import

Amazon S3에 보관된 대형 JSON 또는 파케(Parquet) 원천 데이터를 기반으로 DynamoDB 쓰기 용량(WCU)을 극적으로 낭비하지 않으며 신규 테이블을 즉석에서 벌크로 로드하고 생성하는 관리형 기능입니다.

  • AWS Glue를 통해 전처리된 S3의 22억 건 데이터를 기반으로, 테이블 스키마에 부합하는 정규화된 형태를 user_managed_index 테이블에 직접 적재하기 위해 사용했습니다.
Concept · 02

Leaky Bucket Algorithm

불규칙하고 급격하게 인입되는 트래픽의 버스트를 허용하지 않고 고정된 속도의 깔때기 파이프라인처럼 정해진 레이트만큼만 일정하게 다운스트림으로 데이터를 방류하여 보호하는 트래픽 쉐이핑 알고리즘입니다.

  • Token Bucket 모델에서 간헐적으로 나타나던 순간 피크 쓰기와 그로 인한 SQS 유입 폭증의 한계를 끊고, 인덱스 쓰기 처리 흐름을 균등하게 평탄화하여 대상 파티션을 안정화시켰습니다.
Concept · 03

NEW_AND_OLD_IMAGES Stream View

DynamoDB 테이블 내부의 데이터 레코드가 수정되거나 삭제될 때, 변경 전의 원본 상태(Old)와 변경 후의 최신 상태(New)를 동시에 스트림 메시지 페이로드에 모두 실어 전달하는 DynamoDB Streams 설정 모델입니다.

  • 사용자의 특정 key 정보가 수정되었을 때, 변경 전의 인덱스 키(Old) 위치에 위치한 데이터를 완전히 삭제하고 변경 후의 키(New) 위치에 새롭게 적재하는 복제 처리를 지원하는 데 적극 활용되었습니다.
Continue reading · same source

채널 톡More from 채널 톡

View all posts from 채널 톡
  • [신청 중] AI Product Frontiers: AI 시대, 최전선에서 방향을 만드는 사람들

    MeetupAI InfrastructureArtificial Intelligence
    1일 전
  • 채널콘 2026 디자인 비하인드

    FramerGenerative AILocalization
    2일 전
  • Swift 6 어때요? (1): 스레드, 블록, 태스크

    Swift ConcurrencyGCDRxSwift
    2일 전
  • 5년, 340개의 이야기로 이어온 개발 문화

    Developer RelationsKnowledge SharingEngineering Culture
    3일 전
  • 유저챗 개인정보 마스킹 개발기

    RegexRE2ReDoS
    4일 전

Related reads#DynamoDB

Explore #DynamoDB
채널 톡

[신청 중] 핫파티션과 트래픽 폭주, 우리는 이렇게 넘었습니다

#DynamoDB2주 전
채널 톡

DynamoDB 핫 파티션을 해결하는 3가지 방법 (3): 조회를 인덱스 테이블로 옮기기

#DynamoDB3주 전
우아한형제들·AWS NACL

멀티 어카운트 NACL 차단 자동화 도구 운영 및 개선 경험

#DynamoDB1개월 전
채널 톡

AWS가 DynamoDB를 만든 방법

#DynamoDB2개월 전
Airbnb·JanusGraph

통합 지식 그래프 인프라를 활용한 에어비앤비 ID 그래프 확장

#DynamoDB3개월 전

Source

채널 톡
채널 톡
Engineering Blog

Published · July 3, 2026

Topics

DynamoDBAWS GlueKinesis StreamsRate LimitingData Migration