전체 서비스를 마비시키는 GSI Back-Pressure를 극복하기 위한 커스텀 인덱스 파이프라인 설계 전략
대규모 트래픽 상황에서 DynamoDB의 GSI 구조적 한계로 발생하는 장애를 분석하고, 이를 해결하기 위해 자체적인 인덱싱 시스템을 구축한 실무 사례를 다룹니다. 단순한 스케일업이 아닌 비동기 파이프라인과 버퍼링 도입을 통해 시스템 안정성을 근본적으로 개선하는 아키텍처적 접근법을 제시합니다.
DynamoDB의 핫 파티션 문제로 서비스 장애를 겪고 있거나, NoSQL 환경에서 대규모 쓰기 부하 분산을 고민하는 백엔드 개발자 및 인프라 엔지니어에게 일독을 권합니다.
특정 GSI 파티션에 쓰기 부하가 집중되면서 발생하는 핫 파티션 현상과, 이로 인해 메인 테이블 전체의 쓰기가 거부되는 Back-Pressure 장애가 발생하여 서비스 핵심 기능인 Boot 요청까지 차단되는 문제가 있었습니다.
기존 GSI를 제거하는 대신 별도의 인덱스 테이블을 생성하고, DynamoDB Streams(Kinesis), 전용 전파 서비스(ch-flow-shard), Rate Limiter, SQS 버퍼를 조합하여 쓰기 부하를 비동기로 제어하는 커스텀 인덱스 파이프라인을 설계했습니다.
메인 테이블과 인덱스 쓰기가 비동기로 격리되어 GSI 병목이 전체 시스템 장애로 전이되는 구조적 결함을 해결했으며, 22억 건의 대규모 데이터를 무중단으로 마이그레이션하고 인덱스 전파 가시성을 확보했습니다.
Trade-off
AWS 관리형 서비스인 GSI 대신 직접 파이프라인을 구축 및 운영해야 하므로 인프라 관리 복잡도가 증가했으며, 비동기 처리에 따른 미세한 인덱스 반영 지연(Eventual Consistency)을 수용해야 합니다.
시스템의 하류 구성 요소가 처리를 감당하지 못할 때 상류의 흐름을 억제하여 시스템 전체를 보호하려는 현상입니다.
분산 데이터베이스에서 특정 파티션 키에 트래픽이 집중되어 해당 파티션의 처리 한계를 초과하는 현상입니다.
테이블 데이터의 변경 이벤트를 실시간으로 캡처하고 외부 시스템으로 전파할 수 있도록 지원하는 스트림 서비스입니다.