서버리스 광고 트래커 구축: 수백만 이벤트 규모 확장 및 비용 효율성 유지

Building a Serverless Ad Tracker: Scaling to Events and Back

작성자
HackerNews
발행일
2025년 11월 22일

핵심 요약

  • 1 AWS 서버리스 아키텍처를 활용하여 예측 불가능한 트래픽에도 유연하게 확장하고 비용 효율성을 극대화한 광고 트래킹 플랫폼을 구축했습니다.
  • 2 GoLang 기반의 Lambda 함수로 트래커와 실시간 통계 처리 시스템을 구현하여 초고속 응답 시간(p95 ~25ms)과 낮은 메모리 사용량을 달성했습니다.
  • 3 관리 콘솔은 Ruby on Rails와 Lamby를 AWS Lambda에 배포하여 개발 속도를 우선시했으며, 콜드 스타트 문제 없이 안정적으로 운영됩니다.

도입

본 문서에서는 성능 기반 이메일 마케팅 분야의 스타트업인 ThePerformer가 하루 수백만 건의 이벤트를 처리하면서도 비활동 기간에는 비용 효율성을 유지할 수 있는 완전한 광고 트래킹 및 기여 플랫폼을 구축한 경험을 공유합니다. CTO로서 저의 목표는 예측 불가능한 트래픽 급증에 즉시 대응하고, 광고주와 퍼블리셔 모두에게 중요한 속도와 신뢰성을 보장하는 인프라를 설계하는 것이었습니다. 이를 위해 100ms 미만의 응답 시간, 제로 다운타임, 탄력적인 가격 책정, 실시간 통계라는 엄격한 요구사항을 충족해야 했습니다.

트래커 아키텍처

트래커는 시스템의 핵심으로, RawEvent를 TrackedEvent로 변환하는 단일 목적의 경량 함수처럼 설계되었습니다. AWS API Gateway를 통해 사용자 클릭, 노출, 전환과 같은 RawEvent를 수신하며, 캠페인 정보는 EventBridge를 통해 Lambda 기반의 트래커(GoLang)로 전달되어 Redis 캐시를 사용하는 MySQL에 저장됩니다. 처리된 TrackedEvent는 AWS Kinesis 스트림으로 푸시되어 후속 처리를 위해 전달됩니다. 이 아키텍처는 제로 병목 현상으로 필요한 만큼 확장 및 축소될 수 있으며, Kinesis는 초당 수 MB, Redis는 수십만 건의 쿼리를 처리할 수 있어 충분한 성능을 제공합니다.

스트림 소비 및 분석

추적된 이벤트 스트림은 두 가지 방식으로 소비됩니다.

  • 장기 분석: AWS Firehose를 사용하여 Kinesis 스트림을 S3 데이터 레이크로 공급하고, AWS Glue 작업을 통해 데이터를 쿼리 가능한 형식으로 변환한 후 AWS Quicksight 및 Athena를 통해 분석합니다.

  • 실시간 분석: 또 다른 GoLang 기반 Lambda 함수가 Kinesis에서 이벤트 배치(batch)를 로드하고, 필터링 및 캠페인, 퍼블리셔, 시간 등 다양한 차원으로 집계하여 결과를 MySQL 데이터베이스에 푸시합니다. 이 집계는 데이터베이스 부하를 크게 줄이며, 해당 Lambda는 API Gateway를 통해 HTTP API를 노출하여 다른 서비스가 실시간에 가까운 통계를 쿼리할 수 있도록 합니다.

시스템 관리 (관리 콘솔)

관리 콘솔은 전통적인 MVC 대시보드로, 개발 속도와 용이성을 최우선으로 고려하여 Ruby on Rails를 AWS Lambda(Lamby 사용)에 호스팅했습니다. 예상과 달리 콜드 스타트는 드물게 발생하며 큰 문제가 되지 않았습니다. 이 Rails 앱은 EventBridge를 통해 캠페인, 미디어, 퍼블리셔, 광고 변경 사항을 트래커 및 다른 소비자에게 자동으로 전파하며, 통계 Lambda를 호출하여 캠페인 지표를 소비합니다.

결론

이러한 서버리스 아키텍처를 통해 ThePerformer는 지난 1년간 99.999%의 가동 시간과 하루 수백만 건의 피크 이벤트를 포함하여 수백만 건의 이벤트를 성공적으로 처리했습니다. 이 모든 것이 월 약 450달러의 생산 비용으로 달성되었습니다. 클라우드 서비스의 높은 비용에 대한 비판도 있지만, 베어 메탈에서 운영했을 때 발생했을 복잡성과 엔지니어링 시간을 고려하면 클라우드 서비스가 제공한 가치는 압도적이었습니다. 개발 용이성, 확장성, 신뢰성은 전적으로 AWS 서버리스 서비스를 활용한 결과이며, Redis와 MySQL을 제외한 모든 서비스는 서버리스 옵션으로 선택되었습니다.

댓글 0

로그인이 필요합니다

댓글을 작성하거나 대화에 참여하려면 로그인이 필요합니다.

로그인 하러 가기

아직 댓글이 없습니다

첫 번째 댓글을 작성해보세요!