---
id: wiki-2026-0508-iaa-in-app-advertising
title: IAA (In-App Advertising)
category: 10_Wiki/Topics
status: verified
canonical_id: self
aliases: [In-App Advertising, 인앱 광고, 광고 수익화]
duplicate_of: none
source_trust_level: A
confidence_score: 0.9
verification_status: applied
tags: [monetization, advertising, mobile, mediation]
raw_sources: []
last_reinforced: 2026-05-10
github_commit: pending
tech_stack:
  language: Swift / Kotlin
  framework: AdMob / AppLovin MAX / IronSource LevelPlay
---

# IAA (In-App Advertising)

## 매 한 줄
> **"매 attention 의 monetize"**. 매 ad 의 impression 의 currency, 매 eCPM 의 metric. 매 hyper-casual 의 lifeblood, 매 2026 의 mediation + waterfall + bidding 의 hybrid 의 mainstream.

## 매 핵심

### 매 ad format
- **Banner**: 매 320x50 / 320x100, 매 low eCPM ($0.10 ~ $1).
- **Interstitial**: 매 full-screen, 매 round 사이 ($3 ~ $15 eCPM).
- **Rewarded video**: 매 user opt-in, 매 highest eCPM ($15 ~ $50).
- **Native**: 매 in-content, 매 design 의 blend.
- **Playable**: 매 mini-game preview, 매 UA 와 monetization 의 dual.
- **Offerwall**: 매 multi-action reward (매 IronSource).

### 매 stack
- **SDK**: 매 AdMob, AppLovin MAX, IronSource LevelPlay, Unity Ads, Mintegral.
- **Mediation**: 매 multi-network 의 unified call.
- **Bidding (in-app)**: 매 real-time auction — 매 waterfall 의 replace.
- **Attribution**: 매 AppsFlyer, Adjust, Singular.

### 매 KPI
- **eCPM**: 매 effective CPM = revenue / impressions × 1000.
- **Fill rate**: 매 served / requested.
- **ARPDAU**: 매 ad revenue / DAU.
- **Show rate**: 매 placement 의 conversion.

### 매 응용
1. Hyper-casual / hybrid-casual 의 primary revenue.
2. F2P game 의 IAP 의 보완.
3. News / utility app 의 free tier monetization.

## 💻 패턴

### Rewarded video (AppLovin MAX, Swift)
```swift
import AppLovinSDK

class RewardedManager: NSObject, MARewardedAdDelegate {
    let ad = MARewardedAd.shared(withAdUnitIdentifier: "REWARDED_UNIT")
    override init() {
        super.init()
        ad.delegate = self
        ad.load()
    }
    func show() {
        if ad.isReady { ad.show() }
    }
    func didRewardUser(for ad: MAAd, with reward: MAReward) {
        Wallet.add(coins: 100)  // 매 server-side validation 의 권장
    }
    func didFailToDisplay(_ ad: MAAd, withError error: MAError) {
        ad.load()  // 매 immediate retry
    }
}
```

### Interstitial frequency cap
```kotlin
class InterstitialGate(private val minIntervalSec: Long = 60) {
    private var lastShown = 0L
    fun canShow(): Boolean {
        val now = System.currentTimeMillis() / 1000
        return now - lastShown >= minIntervalSec
    }
    fun markShown() { lastShown = System.currentTimeMillis() / 1000 }
}
```

### eCPM tracking + segment
```python
def ecpm(revenue: float, impressions: int) -> float:
    return revenue / impressions * 1000 if impressions else 0.0

def segment_ecpm(events):
    by_country = defaultdict(lambda: [0.0, 0])
    for e in events:
        by_country[e.country][0] += e.revenue
        by_country[e.country][1] += 1
    return {c: ecpm(r, n) for c, (r, n) in by_country.items()}
```

### Mediation waterfall config
```yaml
# 매 declining eCPM order
waterfall:
  - network: applovin_bidding   # 매 in-app bidding 의 highest priority
  - network: admob
    floor_ecpm: 25.0
  - network: ironsource
    floor_ecpm: 15.0
  - network: unity_ads
    floor_ecpm: 8.0
  - network: backfill
    floor_ecpm: 0.0
```

### Server-side reward validation
```python
@app.post("/ad/reward")
def reward(req: RewardCallback):
    # 매 SHA256 signature 의 verify
    expected = hmac.new(SECRET, req.payload(), "sha256").hexdigest()
    if not hmac.compare_digest(expected, req.signature):
        raise HTTPException(403)
    if Cache.has(req.transaction_id):  # 매 replay 의 prevent
        return {"ok": True}
    Cache.set(req.transaction_id, ttl=86400)
    Wallet.credit(req.user_id, req.coins)
```

### Predicted LTV gating (no-ads for whales)
```python
def should_show_ad(user) -> bool:
    if user.iap_total_usd > 50:  # 매 whale 의 ad-free
        return False
    if user.predicted_ltv < 1.0:
        return True
    return random.random() < 0.7
```

## 매 결정 기준
| 상황 | Approach |
|---|---|
| 매 hyper-casual | IAA dominant, 매 rewarded + interstitial |
| 매 mid-core | IAP primary + rewarded only |
| 매 utility / news | Native + interstitial sparingly |

**기본값**: 매 rewarded video + opportunistic interstitial + IAP whale 의 ad-free.

## 🔗 Graph
- 부모: [[게임 수익화 모델]]
- 응용: [[Hybrid-casual]]
- Adjacent: [[IAP]] · [[Attribution]]

## 🤖 LLM 활용
**언제**: 매 placement strategy 의 review, 매 eCPM anomaly 의 root cause hypothesis.
**언제 X**: 매 ad creative generation 의 단독 — 매 brand safety 의 human review 필수.

## ❌ 안티패턴
- **Forced interstitial**: 매 30s 의 frequency → D1 retention 의 collapse.
- **Misleading rewarded**: 매 reward 의 not delivered → ASO review 의 1-star.
- **Mediation neglect**: 매 single network → 매 30-50% revenue 의 손실.
- **Whale ad-spam**: 매 high-LTV user 의 ad 의 spam → IAP churn.

## 🧪 검증 / 중복
- Verified (AppLovin docs 2025; AppsFlyer State of Gaming 2024).
- 신뢰도 A.

## 🕓 Changelog
| 날짜 | 변경 |
|---|---|
| 2026-05-08 | Phase 1 |
| 2026-05-10 | Manual cleanup — IAA full reference with mediation + waterfall |
