Journey of an Ad Request: The Hidden Engineering
Author: Ayush Kumar (JioHotstar) | Source: blog.hotstar.com | Published: 2026-07-20
한 줄 요약
30초 광고 브레이크 하나가 relevance 필터링 → frequency cap → pacing → tiered waterfall 우선순위 결정을 거쳐 100ms 안에 수천 개 후보에서 2~3개를 고르는 과정이고, IPL 마지막 오버 같은 동시성 스파이크에서도 그래야 한다.
핵심 주장/내용
- 용어: CPM(1,000 노출당 광고주 지불 비용), CPC(클릭당 비용)
- SSAI (Server-Side Ad Insertion) — 서버에서 비디오 스트림에 광고를 stitch. JioHotstar 규모에서는 흔히 cohort 레벨에서 일어나 유사 사용자를 그룹화한 균형 잡힌 개인화
- CSAI (Client Side) — 프론트엔드 플레이어가 cue marker에 따라 스트림을 중단하고 광고를 표시. cue marker는 콘텐츠 재생 시 미리 알려져 있다
- SGAI (Server-Guided) — 서버가 플레이어에게 무엇을 할지 “가이드”하고 최종 삽입은 플레이어가 수행. cue marker를 미리 알 수 없는 라이브 이벤트 규모에서 1:1 개인화를 가능하게 한다
- Direct vs Programmatic — Direct는 악수 거래(“광고에 100만 뷰를 원한다”), Programmatic은 실시간으로 3rd-party SSP에 광고를 요청하는 자동 경매
- 수요 퍼즐: 최신 플래그십을 출시하는 글로벌 스마트폰 브랜드는 전국 인지도를 위해 인도 전역 1,000만 노출을 원하고, 로컬 부티크는 벵갈루루 Indiranagar 사용자로부터 1,000 클릭(CPC) 을 원한다. 목표·규모·타겟팅 전략·최적화 신호가 근본적으로 다르다. 하나는 도달과 가시성을 국가 규모로 최적화하고 다른 하나는 정밀도·지역성·측정 가능한 성과를 최적화한다. 시스템은 이런 상충하는 수요 수천 개를 동시에 저글링해야 한다
- Ad Decision 로직 — 수천 개 중 30초 pod에 들어갈 2~3개를 어떻게 고르나:
- Relevance — 1만 개 후보 광고 중 프리미엄 안드로이드 기기로 코미디 영화를 보는 벵갈루루 Indiranagar의 여성 사용자에게 실제로 자격이 있는 광고는? 지리, 사용자 affinity, 기기 신호, 광고주 제약 등을 밀리초 안에 실시간 필터링해 후보 풀을 줄인다
- Experience — 아무도 같은 브랜드 광고를 외울 때까지 보고 싶어 하지 않는다. 수백만 사용자 × 수천 광고 조합에 대한 Frequency cap(FCap) 을 분산 캐시로 확인
- Pacing과 Time Interval Capping — 수백만이 라이브로 보는 IPL 경기 하나에서 100만 노출 목표에 도달하면 어떻게 배달을 멈추나? 한 달짜리 캠페인의 1,000만 노출을 어떻게 첫 며칠에 다 소진하지 않게 하나? PID·SHALE 같은 pacing 알고리즘으로 캠페인 기간 전반에 균일 분포를 보장하고 over-delivery(OD)와 under-delivery(UD)를 방지
- Priority Decisioning — 그 한 자리에 자격 있는 10개 중 무엇이 가장 큰 가치를 주나? Tiered Waterfall로 해결 — 우선순위 높은 캠페인부터 평가하고, ad pod가 완전히 채워지지 않은 경우에만 하위 티어 고려, 남은 시간은 사내 프로모로 채움
- Programmatic 도전 — Fill Rate: 선택된 광고가 Direct deal이면 즉시 VAST 응답을 반환하지만, Programmatic이면 외부 경매소(SSP)에 “지금 이 사용자를 위한 광고 있나?”를 묻는 것이다. 실제로 광고를 받을 확률인 fill rate가 make-or-break 지표가 된다. 바쁜 식당의 예약 vs 워크인에 비유:
- Programmatic Guaranteed (예약) — 사전 협상되어 광고주가 물량을 약속. fill rate 보통 80~100%
- Open Exchange (워크인) — 공개 시장 최고 입찰자에게 던짐. 실시간 경쟁과 가격에 달려 있어 fill rate가 1~2%까지 곤두박질칠 수 있다
- Attribution — 루프 닫기: 광고가 끝나도 여정은 끝나지 않는다. 요청이 서버에 도착한 순간부터 앱 UI에 광고가 표시되는 시점까지 qualification·selection·impression·click에 대해 초당 다수의 트래커 이벤트가 발화. 빅데이터 파이프라인이 초당 수백만 이벤트를 처리해 원시 텔레메트리를 정확한 배달 지표와 광고주 대시보드로 변환. 하지만 광고주는 궁극적으로 결과에 관심이 있다
- CTA (Click-Through Attribution) — 사용자가 광고를 클릭한 뒤 앱 설치·가입·구매 같은 액션을 완료한 전환.
클릭 → 전환 → 그 광고에 크레딧 - VTA (View-Through Attribution) — 잠재의식적 승리. 많은 사용자는 긴장된 IPL 경기 중에 광고를 클릭하지 않지만(FOMO 때문에) 다음날 그 제품을 사거나 앱을 설치할 수 있다. 광고를 본 사용자가 나중에 전환한 것을 추적해, 클릭 없이도 광고가 작동했음을 증명한다. 대규모 신제품 인지도 캠페인에 특히 필요한 브랜드 노출 효과를 포착
- CTA (Click-Through Attribution) — 사용자가 광고를 클릭한 뒤 앱 설치·가입·구매 같은 액션을 완료한 전환.
주요 수치 / 사실
- 전체 결정이 100ms 미만에 수행·전달. IPL 경기 마지막 오버 같은 대규모 동시성 스파이크에서도
- 후보 광고 풀 약 10,000개
- 라이브 스포츠 중 광고 서비스는 매우 스파이키한 트래픽 — 유기적 스케일업에 반응할 시간이 거의 없어 사전 준비가 필수. 광고 브레이크 중 피크, 이닝 브레이크(20:40~21:10) 중 API 트래픽이 예측 가능하고 낮아짐
- pacing 알고리즘 참조: PID (arXiv 1905.10928), SHALE (Google Research)
- 광고 포맷: Preroll(콘텐츠 시작 전 영상 광고), Midroll(콘텐츠 중간), Fence(플레이어 아래 정적 디스플레이)
관련 위키
- Ad Tech Data Infrastructure
- ML Ranking Systems
- Real-Time Stream Processing
- Customer Data Platform
- Recommendation Impact Measurement
- Distributed Systems Reliability
Source: 원문 보기