본문으로 건너뛰기
HY Devlog
뒤로 가기

Unity 광고 미디에이션 정리: 워터폴이 끝나고 비딩만 남았다

모바일 게임이 돈을 어떻게 버는지가 궁금해서 이것저것 보다가, Unity 매뉴얼의 Ads Mediation 페이지를 스크랩해뒀었다. 한 장짜리 패키지 소개 페이지고 설명은 짧다. 기능 목록에 “인앱 비딩, 워터폴 광고 전략, A/B 테스트, 크로스 프로모션”이 나열되어 있는 정도다.

목록만 봐서는 각각이 뭔지 알 수 없어서 찾아보게 됐는데, 확인해보니 그 목록 중 하나가 이미 폐지 단계에 들어가 있었다. 그리고 패키지 버전은 그 사이 1.0.0에서 9.5.1이 됐다.

그래서 두 가지를 정리한다. 미디에이션이 대체 무엇인지, 그리고 지금 기준으로 뭐가 달라졌는지.

목차

목차

미디에이션이 무엇인가

Unity 공식 문서의 정의가 간결하다.

Unity LevelPlay는 앱 개발자가 하나의 SDK로 여러 광고 네트워크를 관리하고 최적화할 수 있게 해주는 수익화 솔루션이다. 여러 광고 네트워크에 앱의 광고 인벤토리를 열어주어, 네트워크들이 자기 광고를 내보내려고 경쟁하는 무대를 만든다.

핵심은 “경쟁”이다. 광고 네트워크 하나만 붙이면 그 네트워크가 부르는 값이 곧 내 단가다. 여러 곳을 붙여 경쟁시키면 같은 노출을 더 비싸게 팔 수 있다.

미디에이션은 그 경쟁을 붙이는 중개 계층이고, 개발자 입장에서는 네트워크마다 SDK를 따로 붙이지 않아도 되게 해주는 것이기도 하다.

워터폴과 인앱 비딩

경쟁을 붙이는 방식이 두 가지다. 이게 이 글에서 가장 중요한 부분이다.

워터폴 — 줄 세워서 순서대로

네트워크를 eCPM 순으로 정렬해두고 위에서부터 차례로 호출하는 방식이다.

  1. eCPM이 가장 높은 네트워크를 먼저 부른다
  2. 그 네트워크가 채울 광고가 없으면 다음으로 내려간다
  3. 채워질 때까지 반복

이름 그대로 물이 위에서 아래로 떨어지는 모양이다. eCPM은 노출 1,000회당 단가고, 퍼블리셔가 네트워크별·플레이스먼트별로 목표 가격대를 지정한다.

문제는 이게 정적인 순서라는 점이다. 실제 이번 노출에 어느 네트워크가 얼마를 낼 의향이 있는지와 무관하게, 미리 정해둔 줄대로 부른다. 그래서 운영이 까다롭다. 공식 문서의 권고만 봐도 그렇다.

인앱 비딩 — 매번 실시간 경매

노출이 생길 때마다 여러 네트워크가 동시에 입찰하고, 가장 높이 부른 쪽이 가져간다. 줄 세워둔 순서가 아니라 그 순간의 실제 값으로 정해진다.

수동으로 가격대를 관리할 필요가 없고, 노출 하나하나의 값을 제대로 찾아낸다.

그리고 워터폴은 끝나는 중이다

이게 스크랩 당시와 지금의 가장 큰 차이다. 공식 문서 상단에 이렇게 붙어 있다.

Waterfall placements are no longer supported being phased out. Starting August 11, 2026, you can no longer create new waterfall placements. Any placements not converted to bidding or archived by this date will no longer be editable, but will continue to serve ads.

정리하면 이렇다.

시점상태
2026-08-11 이전워터폴 플레이스먼트 신규 생성 가능
2026-08-11 이후신규 생성 불가
그 시점까지 비딩으로 전환하거나 보관하지 않은 것편집 불가. 다만 광고는 계속 서빙됨

즉 기존 플레이스먼트가 갑자기 죽지는 않는다. 다만 손을 댈 수 없게 된다. 운영 중인 프로젝트가 있다면 확인해볼 만한 지점이다.

(참고로 인용한 첫 문장은 원문이 그대로 저렇다. are no longer supported being phased out은 문장이 꼬여 있는데, 편집 흔적으로 보인다.)

버전과 문서 위치가 바뀌었다

스크랩한 페이지는 Unity 2023.2 / 패키지 1.0.0 기준이었다. 지금은 이렇다.

스크랩 시점현재
패키지 버전1.0.09.5.1
패키지 IDcom.unity.services.levelplay동일
상세 문서developers.is.com/monetization/docs.unity.com/en-us/grow/levelplay/

패키지 ID는 그대로지만 버전이 1.x에서 9.x로 건너뛰었다. 상세 문서도 ironSource 도메인에서 Unity 도메인으로 옮겨왔다. 오래된 자료의 링크를 따라가면 엉뚱한 곳으로 간다.

지원 플랫폼은 이렇다.

클라이언트 개발자가 실제로 하는 일

여기부터가 실무다.

설치

패키지 매니저에서 Ads Mediation을 찾아 설치하거나, 패키지 이름으로 추가한다.

com.unity.services.levelplay

초기화

네임스페이스는 Unity.Services.LevelPlay다.

public void Start() {
    // 초기화 성공·실패 리스너 등록
    LevelPlay.OnInitSuccess += SdkInitializationCompletedEvent;
    LevelPlay.OnInitFailed += SdkInitializationFailedEvent;
    // SDK 초기화
    LevelPlay.Init("ThisIsYourAppKey");
}

리스너를 Init 호출 전에 등록하는 순서를 지켜야 한다. 초기화가 빨리 끝나버리면 나중에 붙인 핸들러는 이벤트를 놓친다.

LevelPlay 클래스에는 이런 것들이 더 있다.

멤버용도
Init(appKey, userId = null)SDK 초기화
ValidateIntegration()통합 상태 검증
LaunchTestSuite()테스트 스위트 실행
SetPauseGame(bool)광고 중 게임 일시정지
SetDynamicUserId(string)리워드 콜백용 사용자 ID
SetMetaData(key, value)부가 플래그 설정
OnImpressionDataReady노출 이벤트 — 백그라운드 스레드에서 호출됨
PluginVersion / UnityVersion버전 문자열

OnImpressionDataReady가 백그라운드 스레드라는 점은 기억해둘 만하다. 여기서 Unity API를 직접 건드리면 안 된다.

테스트 스위트

기기에서 통합 상태와 네트워크 설정을 확인할 수 있는 도구가 있다.

// SDK 초기화 전에 활성화
LevelPlay.SetMetaData("is_test_suite", "enable");

// 초기화 성공 후 실행
LevelPlay.LaunchTestSuite();

SetMetaData초기화 전, LaunchTestSuite초기화 성공 후다. 순서가 반대면 동작하지 않는다.

빌드에 무엇이 붙는가

이게 클라이언트 개발자에게 가장 중요한 부분이다. 미디에이션 SDK는 자기 혼자 들어오지 않는다. 광고 네트워크마다 어댑터와 의존성이 따라온다.

네트워크를 늘릴수록 이 목록이 길어진다. 빌드 크기, 의존성 충돌, 권한 고지가 전부 여기서 나온다. 광고를 붙인다는 건 SDK 하나를 넣는 일이 아니라 의존성 트리를 하나 들이는 일이다.

광고 포맷별(리워드·전면·배너) 구현은 각각 별도 문서로 나뉘어 있다.

정리


참고

이 글의 출발점이 된 자료는 Unity 매뉴얼의 Ads Mediation 페이지(2023.2 판)다. 항목 구성을 참고했고, 버전·API·정책은 현행 문서로 다시 대조했다. 확인 시점은 2026-08-26이다.


이 글 공유하기:

이전 글
Sentis에서 텐서 데이터에 직접 접근하기: 리드백을 피하는 이유와 방법
다음 글
서명된 APK 뽑기: 진짜 결과물은 APK가 아니라 키스토어다