본문으로 건너뛰기

SDK 설계

내부 구조

아래 다이어그램은 TV 앱, SDK, Ad Agent 및 서버가 전체 시스템 내에서 어떻게 배치되어 있으며 서로 어떻게 통신하는지 개략적으로 보여줍니다.

  1. SDK를 초기화하고, TV 이벤트를 전달하고, SCTE-35를 사용할 경우 TS 스트림 패킷을 전달하여 SDK를 제어합니다.
  2. SCTE-35 또는 아날로그 광고 큐가 인식되어 광고를 재생해야 하는 시점에 TV 앱과 통신하여 광고를 재생합니다.
  3. 수신된 이벤트를 Ad Agent에 전달합니다.
  4. 백엔드 서버에서 수신한 개인화된 광고 목록과 구동 방식 등의 정보를 SDK에 전달합니다.
  5. HTTP 통신을 사용하여 개인화된 광고 목록, 구동 방식 등의 정보를 백엔드 서버에 요청하고, 노출 및 상태 변경 등의 이벤트를 백엔드 서버에 전송합니다.
  6. Ad Agent의 동작을 제어하는 명령을 전송합니다.

Ad Agent의 설계 개념

FLOWER Platform에서는 백엔드 시스템이 중요한 의사결정을 담당하고, 클라이언트 디바이스는 이러한 의사결정을 단순히 수행하여 결과를 보고하는 역할만 수행합니다. 따라서 광고 운영 프로세스가 바뀌더라도 클라이언트 디바이스에 설치된 소프트웨어의 업데이트를 최소화하면서 백엔드 시스템의 변경만으로 유연하게 대응할 수 있습니다.

디바이스에서 구동되는 Ad Agent는 다음과 같은 기능별 모듈로 구성되어 있습니다.

Ad Agent 구동 및 인증 모듈

디바이스가 구동된 후 TV App이 전송하는 초기화 명령 또는 백엔드 서버에서 전송하는 재인증 명령이 수신될 때 동작하는 모듈입니다.

푸시 명령 수신 모듈

이 모듈은 푸시 서버가 TCP 소켓을 통해 전송하는 명령을 수신하여 처리합니다. 기본적으로 31102 포트가 사용되지만 디바이스의 상황에 따라 포트 번호가 변경될 수 있습니다.

백엔드 시스템은 디바이스의 작동 상태를 실시간으로 모니터링하면서 필요한 시점에 푸시 명령을 전송하므로 이러한 명령을 수신하는 모듈(서버 푸시 프레임워크의 클라이언트 모듈)이 디바이스에서 항상 실행되고 있어야 합니다. 그러나 이 모듈은 매우 단순한 기능만을 수행하므로 디바이스에 부하를 거의 주지 않으며, 이를 제외한 대부분의 모듈은 필요한 시점에만 실행됩니다.

주요 기능

  • 재인증 수행 디바이스가 백엔드 서버에 재인증하여 광고 채널 또는 설정의 최신 버전을 다시 수신하도록 명령합니다.
  • 광고 동기화 디바이스가 자신의 광고 목록을 백엔드 서버가 할당한 광고 목록과 동기화하도록 명령합니다.
  • 아날로그 광고 큐 수신 H/E에서 인식된 광고 큐를 Anypoint 플랫폼이 수신하고 디바이스에 광고 시작을 명령합니다.
  • 광고 중지 상황에 따라 특정 광고의 게재를 즉시 중단해야 하는 경우 광고 중지를 명령합니다.
  • 로그 전송 디바이스가 보유한 로그 파일(최대 20KB)을 백엔드 서버로 분할 전송하도록 명령합니다. 이 기능은 디바이스에서 오동작이 발생할 경우 원인을 파악하는 데 유용합니다.

광고 소재 다운로드 및 관리 모듈

이 모듈은 백엔드 시스템이 푸시한 광고 동기화 명령을 수신하면 다운로드할 광고 소재의 목록을 백엔드 시스템에 요청하고, 해당 목록을 수신하고, 목록에 포함된 CDN URL을 사용하여 광고 소재를 다운로드합니다. 실시간 방송 시청과 같은 디바이스의 핵심 서비스에 부정적인 영향이 없도록 다운로드 속도와 용량을 디바이스 유형에 따라 제한할 수 있습니다.

백엔드 시스템은 클라이언트 디바이스에서 최대한 빠르게 다운로드를 완료하고 최대한 폭넓은 타겟팅에 대응할 수 있도록 광고를 선정합니다. 이 과정에서 디바이스의 최대 저장 용량, 현재 저장 용량, 오디언스 세그먼트, 지역 및 현재 시청 채널과 함께 각 광고의 배정 우선순위가 고려됩니다.

광고 소재 저장공간 사용 정책

광고 에이전트는 셋탑의 동작에 영향을 주지 않기 위해 아래와 같은 두 가지의 설정을 가지고 있습니다. 이 값들은 서버에 의해 언제든 갱신이 가능하며 셋탑 종류별로 상황에 맞게 논의하여 결정하게 됩니다.

  • 최소 잔여 보장 용량
    • 셋탑의 동작을 보장하기 위한 목적으로 광고와 무관하게 최소한으로 보장되어야 하는 용량을 의미합니다.
    • 예를 들어 펌웨어 업데이트를 위해 300MB를 잔여 용량으로 유지하는 경우라면 이 값을 300MB 이상으로 설정하는 것을 권장합니다.
    • 셋탑의 잔여 용량이 이 값 이상인 경우에만 광고를 캐싱하는 용도로 사용합니다.
    • 즉, 이 값이 300MB로 설정되어 있고 350MB의 잔여 용량이 있다면 광고는 최대 50MB만 사용가능한 것입니다.
  • 최대 광고 저장 용량
    • 광고의 캐싱을 위해 최대 사용할 수 있는 용량을 의미하며 이 이상의 잔여 공간이 있더라도 더 이상 사용하지 않게 됩니다.

광고 가용 용량

위 두 가지의 설정을 기반으로 광고를 캐싱하기 위한 저장 용량 계산은 아래와 같습니다.

광고 가용 용량 = min((잔여 공간 용량 - 최소 잔여 보장 용량), 최대 광고 저장 용량)

예시 1 잔여 공간 용량: 789MB 최소 잔여 보장 용량: 500MB 최대 광고 저장 용량: 700MB => 광고 가용 용량: 289MB (min((789MB - 500MB), 700MB)로 계산)

예시 2 잔여 공간 용량: 6789MB 최소 잔여 보장 용량: 500MB 최대 광고 저장 용량: 700MB => 광고 가용 용량: 700MB (min((6789MB - 500MB), 700MB)로 계산)

디바이스 이벤트 전송 모듈

이 모듈은 디바이스에서 발생하는 광고 관련 이벤트와 상태 변경 이벤트를 백엔드 서버에 전달합니다.

TV 이벤트 수신 모듈

이 모듈은 TV App에 정합된 광고 SDK와 이벤트를 주고 받기 위해 안드로이드에서 기본으로 제공하는 Broadcast Intent를 사용합니다.

Ad Agent 인증 및 광고 동기화

SDK가 Ad Agent를 구동하면 Ad Agent는 먼저 백엔드 시스템에 인증을 시도합니다. 인증 응답에는 Ad Agent의 기본 동작에 대한 설정과 광고 구성 정보가 포함됩니다.

인증이 완료되면 Ad Agent는 광고 소재 목록과 타겟팅 정보를 수신하기 위해 광고 동기화를 진행합니다.

광고 동기화가 끝나면 Ad Agent가 광고 큐에 반응하여 광고 목록을 구성하고 재생할 준비가 된 것입니다.

인증 및 광고 동기화 시퀀스

SDK를 통한 광고 재생

이 섹션에서는 Ad Agent가 SDK를 제어하여 광고 소재를 재생하는 과정을 설명합니다.

푸시 서버에서 광고 큐 수신

이 방식은 H/E에서 인식된 아날로그 큐톤을 Anypoint 광고 플랫폼을 통해 디바이스로 중계하는 경우 또는 방송 프로그램 일정표를 기반으로 가상 큐를 발생시켜 디바이스에 전송하는 경우에 사용됩니다.

동작 시퀀스

SCTE-35를 통해 광고 큐 수신

이 방식은 SCTE-35 규격에 따른 광고 큐가 채널 스트림에 삽입되는 경우에 사용됩니다. SDK는 광고 대체 시 SCTE-35 SpliceSchedule 방식과 SpliceInsert 방식을 지원합니다.

동작 시퀀스

비디오 레이어의 구조

이 섹션에서는 비디오 레이어의 구조와 배치 순서 및 각 레이어의 역할에 대해 설명합니다.

TV 화면 레이어 구성

  1. 실시간 방송 레이어: 방송 플레이어에서 실시간 방송 영상을 송출하는 데 사용됩니다.
  2. 광고 레이어: 광고 플레이어에서 광고 영상을 재생하는 데 사용됩니다.
  3. 광고 UI 레이어: SDK에서 광고 상세정보 보기, 상품 구매 등의 부가 기능을 제공하는 데 사용됩니다.
  4. TV UI 레이어: TV 앱에서 채널 정보, 음량 조절 등의 편의 기능을 제공하는 데 사용됩니다.

라이프사이클

아래 다이어그램은 SDK 초기화부터 해제까지 전반적인 동작의 흐름을 보여줍니다. 이해를 돕기 위해 각 항목에 동작의 원인 및 상황에 따른 색상 코드가 부여되어 있습니다.