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

메시지 트래픽 100배에도 끄떡 없게 고객 테이블 뜯어고치기 (1)

메시지 트래픽 100배에도 끄떡 없게 고객 테이블 뜯어고치기 (1)
01

Summary

1.8TB 데이터의 대수술, 16억 개 고객 테이블에서 '뱃지'를 도려낸 이유

DynamoDB 쓰로틀링과 GSI 백프레셔를 잡기 위한 채널톡의 대규모 아키텍처 현대화 전략

폭발적인 메시지 트래픽 속에서 시스템 안정성을 확보하기 위해 거대해진 User 테이블을 분리한 엔지니어링 기록입니다. 단순한 기능 분리를 넘어, DynamoDB의 내부 동작 원리와 핫 파티션 문제를 해결하며 16억 건의 데이터를 안전하게 옮기기 위한 고군분투를 담고 있습니다.

  • 011.68B 레코드 규모의 DynamoDB 테이블 운영 중 발생한 성능 병목 분석
  • 02GSI 핫 파티션이 메인 테이블 쓰기까지 막는 백프레셔 현상의 실체 확인
  • 03아이템 분리 대신 테이블 분리를 선택한 4가지 기술적/비용적 근거
  • 047일이 소요되는 수동 마이그레이션 대신 AWS Glue를 선택한 배경
  • 05데이터 유실을 방지하는 동기식 Dual-Write 및 임시 버퍼 테이블 전략

+RECOMMENDATION

DynamoDB를 사용하며 급격한 트래픽 스파이크로 인한 쓰로틀링을 겪고 있거나, 대규모 NoSQL 데이터 마이그레이션을 고민하는 백엔드 엔지니어에게 적극 추천합니다.

The Problem

16억 8천만 건의 레코드를 보유한 DynamoDB User 테이블에서 스파이크성 뱃지 업데이트 트래픽(1500 TPS 이상)이 발생하여 서비스 핵심 기능인 '부트'가 마비되는 현상이 발생했습니다. 원인은 업데이트 시 아이템 전체 크기 기준의 WCU 소모와 GSI 핫 파티션으로 인한 백프레셔(Back-Pressure)로 분석되었습니다.

The Solution

성격과 쓰기 패턴이 다른 뱃지 데이터를 별도의 UserBadge 테이블로 물리적으로 분리하는 결정을 내렸습니다. 대규모 데이터를 안전하게 이전하기 위해 Java 스크립트 기반 방식 대신 RCU/WCU 소모가 없는 DynamoDB Export/Import와 AWS Glue를 조합한 무중단 마이그레이션 파이프라인을 설계했습니다.

The Result

GSI를 제거한 독립 테이블 구성을 통해 백프레셔 문제를 근본적으로 차단할 수 있는 아키텍처를 확보했습니다. 또한 1.8TB 규모의 데이터를 수동 작업 대비 비용과 리스크를 최소화하며 이전할 수 있는 자동화된 ETL 기반의 마이그레이션 전략을 수립했습니다.

Trade-off

테이블 분리로 인해 데이터 조회 시 추가적인 쿼리가 필요할 수 있으며, 마이그레이션 중 데이터 정합성을 유지하기 위한 동기식 이중 쓰기(Dual-Write)와 임시 버퍼 테이블(TmpUserBadge) 운영에 따른 시스템 복잡도가 일시적으로 증가했습니다.

03

Key Concepts

Concept · 01

GSI Back-Pressure

DynamoDB GSI의 특정 파티션에 쓰기 부하가 집중되어 처리가 지연될 때, 데이터 정합성을 위해 메인 테이블의 쓰기 요청까지 거부되는 현상입니다.

  • User 테이블의 channelId 기반 GSI에서 핫 파티션이 발생하여 전체 시스템 쓰기 차단
  • WCU를 늘려도 파티션당 1,000 WCU 제한 때문에 해결되지 않는 구조적 병목으로 작용
Concept · 02

DynamoDB Export/Import

PITR(지점 복구) 스냅샷을 활용하여 테이블 데이터를 S3로 내보내고, 다시 새 테이블로 가져오는 AWS 관리형 기능입니다.

  • 운영 중인 테이블의 RCU/WCU를 소모하지 않고 백그라운드에서 대용량 데이터 처리 가능
  • 16억 건의 데이터를 Java 스크립트 대비 안전하고 효율적으로 이전하기 위한 핵심 도구로 활용
Concept · 03

AWS Glue

다양한 소스의 데이터를 추출, 변환, 로드하는 서버리스 ETL 서비스로 복잡한 데이터 파이프라인 구성을 자동화합니다.

  • S3에 Export된 전체 User 데이터 중 뱃지 관련 필드만 골라내어 Import 형식으로 변환
  • 인프라 프로비저닝 없이 시각적 에디터와 스크립트로 대규모 데이터 변환 작업을 수행
Continue reading · same source

채널 톡More from 채널 톡

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

    MeetupAI InfrastructureArtificial Intelligence
    2일 전
  • 채널콘 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개월 전
채널 톡

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

#DynamoDB1개월 전
채널 톡

AWS가 DynamoDB를 만든 방법

#DynamoDB2개월 전

Source

채널 톡
채널 톡
Engineering Blog

Published · January 22, 2026

Topics

DynamoDBAWS GlueDatabase PartitioningNoSQLData Architecture