트래커 아키텍처
트래커는 시스템의 핵심으로, 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를 호출하여 캠페인 지표를 소비합니다.