엠넷플러스, AWS 기반 투표 시스템으로 팬 참여의 미래를 열다!
글로벌 팬덤 플랫폼의 급증하는 트래픽에 대응하기 위해 기존 상용 솔루션 기반 투표 시스템을 AWS 관리형 서비스 기반으로 재설계
Amazon DynamoDB를 투표 원장으로 활용, 무제한 쓰기 처리 성능과 자동 확장을 통해 확장성 문제 해결
SQS, MSK 기반의 Event-Driven 아키텍처를 도입하여 투표 수집과 집계를 분리, 안정성 및 유연성 확보
워커(Worker)의 Graceful Shutdown 및 Backpressure 전략을 통해 트래픽 급증에도 안정적인 서비스 운영을 보장
기존 고정 비용 구조에서 사용량 기반 비용 모델로 전환하여 비용 효율성을 개선하고, 투표 정책 변경에 대한 대응 속도 향상
데이터 격리 아키텍처(Data Isolation Architecture) 설계
엠넷플러스는 투표 시스템의 안정성을 위해 데이터 격리 아키텍처(Data Isolation Architecture)를 적극적으로 활용했다. 기존 단일 파이프라인 구조에서 벗어나, 투표 요청 수집, 원장 데이터 저장, 실시간 집계, 백업 집계 흐름을 분리했다. 특히, Amazon SQS를 활용하여 투표 요청 수집과 원장 적재를 분리함으로써, 투표 API의 병목 현상을 제거했다. 또한, Amazon DynamoDB를 투표 원장으로 사용하여 데이터 유실을 방지하고, Amazon MSK를 통해 비동기적으로 투표 확인서 발급 및 실시간 결과 집계를 수행하도록 설계했다. 이러한 분리된 아키텍처는 특정 단계의 장애가 전체 시스템에 미치는 영향을 최소화하고, 각 구성 요소의 독립적인 확장을 가능하게 한다.
Amazon DynamoDB를 활용한 멱등성(Idempotency) 보장
엠넷플러스는 Amazon DynamoDB를 투표 원장으로 사용하며, 데이터의 정확성을 보장하기 위해 멱등성을 확보하는 데 주력했다. Amazon DynamoDB 원장 테이블의 키 설계를 통해, 동일한 투표 이벤트가 여러 번 유입되더라도 최초 1회 유입된 데이터만 저장되도록 설계했다. 구체적으로, 각 이벤트에 고유한 Partition Key(PK)와 Sort Key(SK) 조합을 부여하여 중복을 방지했다. 또한, TransactWriteItems API를 활용하여 투표 원장 및 사용자 별 투표 정보 기록을 원자적으로 처리함으로써, 데이터 일관성을 유지했다. 이러한 멱등성 보장은 장애 발생 시에도 데이터의 정확성을 유지하고, 재처리/복구의 용이성을 제공한다.
워커(Worker)의 안정적인 운영 전략
엠넷플러스는 Amazon MSK 기반 워커의 안정적인 운영을 위해 다양한 전략을 채택했다. 워커는 Spring의 SmartLifecycle을 기반으로 동작하며, 애플리케이션 종료 시점에 수신을 즉시 중단하고 이미 수신한 메시지는 끝까지 처리한 뒤 종료하는 Graceful Shutdown을 구현했다. 또한, Buffer 기반 Backpressure를 통해 순간적인 트래픽 스파이크를 흡수하고, 워커의 동시 처리량을 제한하여 저장 계층에 과도한 부하가 전달되는 것을 방지했다. 특히, Graceful Shutdown 과정에서 메시지 소비 구독을 명시적으로 해제하여 리소스 누수나 종료 지연을 방지했다. 이러한 전략들은 대규모 트래픽 환경에서도 워커의 안정적인 운영을 보장한다.
성능 최적화를 위한 기술적 노력
엠넷플러스는 투표 시스템의 성능 향상을 위해 다양한 기술적 노력을 기울였다. Amazon SQS Consumer의 In-flight 메시지 수를 최소화하여 투표 지연 시간을 단축하고, Amazon MSK 컨슈머의 쓰레드 수와 버퍼 사이즈를 최적화하여 CPU 리소스 활용도를 극대화했다. 또한, SpringData의 saveAll 대신 insertAll을 사용하고, 중복 제거를 위해 메모리 캐시를 활용하여 불필요한 쿼리를 제거했다. 실시간 랭킹 집계 시에는 투표 그룹 및 후보자 기준으로 파티션 키를 설계하고, 메모리 캐시를 활용하여 중복을 제거함으로써 쓰기 충돌을 방지했다. 이러한 노력들을 통해 투표 처리 시간을 3초에서 300ms로 개선하는 성과를 달성했다.
Event-Driven 아키텍처의 장점
엠넷플러스는 투표 시스템의 핵심 구간에 Event-Driven 아키텍처를 적용하여 시스템의 유연성과 확장성을 확보했다. 투표 요청을 받아 Amazon DynamoDB 원장에 적재하는 과정은 Amazon SQS를 활용하여 안정성을 높였으며, 투표 확인서 발급 및 실시간 결과 집계는 Amazon MSK 기반의 비동기 처리 파이프라인으로 구성했다. Event-Driven 아키텍처는 각 처리 단계의 독립성을 보장하고, 특정 서비스의 장애가 다른 서비스에 미치는 영향을 최소화한다. 또한, Amazon MSK 장애 시 Amazon SQS를 통해 이벤트를 처리하는 Fallback 경로를 마련하여, 투표 확인서 발급 및 투표 결과 수집의 중단을 방지했다. 이러한 유연성은 시스템의 지속적인 성장과 변화에 효과적으로 대응할 수 있도록 한다.