--- id: wiki-2026-0508-liveops title: LiveOps category: 10_Wiki/Topics status: verified canonical_id: self aliases: [LiveOps, Live Operations, Live Service, GaaS] duplicate_of: none source_trust_level: A confidence_score: 0.9 verification_status: applied tags: [game-development, liveops, mobile-games, gaas, monetization, retention] raw_sources: [] last_reinforced: 2026-05-10 github_commit: pending tech_stack: language: Unity/Unreal/Backend framework: PlayFab/Firebase/Custom --- # LiveOps ## 매 한 줄 > **"매 game 매 ship 의 끝 아닌, 매 시작"**. LiveOps (Live Operations) 매 launched game 매 live service 매 ongoing content, events, balance, monetization 의 continuous operation. 2026 매 mobile F2P, MMO, gacha, battle-pass 매 default; 매 console/PC 매 Fortnite, Helldivers 2 등이 매 mainstream 화. Data-driven, A/B-tested, calendar-planned. ## 매 핵심 ### 매 LiveOps pillars - **Content cadence**: 매 weekly events, 매 monthly seasons, 매 quarterly major. - **Balance patches**: 매 telemetry-driven 매 buff/nerf. - **Monetization**: 매 battle pass, 매 limited bundles, 매 events. - **Retention loops**: 매 daily login, 매 streak, 매 timed events. - **Community**: 매 Discord, 매 Reddit, 매 patch notes, 매 dev streams. ### 매 Telemetry → action loop 1. Collect (events, sessions, IAP, churn). 2. Analyze (cohort retention, ARPDAU, funnel). 3. Hypothesize (feature/event/balance change). 4. A/B test (segmented rollout). 5. Roll out (or roll back). ### 매 응용 1. **Mobile F2P**: 매 Clash Royale, Genshin, Royal Match — 매 textbook. 2. **Live-service shooter**: 매 Fortnite, Apex, Helldivers 2. 3. **MMO**: 매 FFXIV, WoW — 매 patch + expansion cycle. 4. **Gacha**: 매 Genshin, 매 Star Rail — 매 banner schedule 매 core. ## 💻 패턴 ### Remote config (server-driven balance) ```csharp // Unity + PlayFab async Task ApplyRemoteBalance() { var cfg = await PlayFab.GetTitleData(new[] { "balance.json" }); var balance = JsonConvert.DeserializeObject(cfg["balance.json"]); GameTuning.SwordDamage = balance.SwordDamage; GameTuning.GoldDropRate = balance.GoldDropRate; GameTuning.BossHpScalar = balance.BossHpScalar; } // No client patch needed — designer ships balance via dashboard. ``` ### Event scheduling (calendar-driven) ```json { "events": [ { "id": "summer_2026", "start": "2026-06-15T00:00Z", "end": "2026-07-15T00:00Z", "modifiers": { "xp_mult": 2.0, "drop_table": "summer_pool" }, "store": "summer_bundle" }, { "id": "halloween_2026", "start": "2026-10-20T00:00Z", "end": "2026-11-05T00:00Z", "modifiers": { "skin_pack": "spooky" } } ] } ``` ### A/B test (server-segmented) ```python def assign_variant(user_id: str, exp: str) -> str: h = hashlib.sha256(f"{exp}:{user_id}".encode()).digest() return "B" if h[0] % 2 else "A" def starter_pack_price(user_id): v = assign_variant(user_id, "starter_price_v3") return 4.99 if v == "A" else 7.99 # measure conversion × revenue ``` ### Battle pass logic ```typescript interface BattlePass { seasonId: string; startUtc: string; endUtc: string; freeTrack: Reward[]; // 50 tiers premiumTrack: Reward[]; xpPerTier: number; premiumPrice: { usd: 9.99 }; } function tierFromXp(xp: number, bp: BattlePass): number { return Math.min(50, Math.floor(xp / bp.xpPerTier)); } ``` ### Cohort retention SQL ```sql WITH cohort AS ( SELECT user_id, DATE(MIN(session_start)) AS d0 FROM sessions GROUP BY user_id ) SELECT d0, COUNT(*) AS n0, COUNT(DISTINCT CASE WHEN s.session_start::date = d0 + 1 THEN s.user_id END)::float / COUNT(*) AS d1, COUNT(DISTINCT CASE WHEN s.session_start::date = d0 + 7 THEN s.user_id END)::float / COUNT(*) AS d7, COUNT(DISTINCT CASE WHEN s.session_start::date = d0 + 30 THEN s.user_id END)::float / COUNT(*) AS d30 FROM cohort c LEFT JOIN sessions s USING (user_id) GROUP BY d0 ORDER BY d0; ``` ### Hot-fix flag system ```csharp // Feature flag — disable broken feature without client patch if (FeatureFlags.IsEnabled("new_pvp_mode") && !FeatureFlags.IsKilled("new_pvp_mode")) { ShowPvpEntry(); } ``` ### Anti-cheat telemetry alert ```python # Real-time anomaly detection on coin gain def is_suspicious(user, gain, window): median = get_median_gain(user.cohort, window) return gain > median * 50 # >50× median = inspect ``` ## 매 결정 기준 | 상황 | Approach | |---|---| | 매 mobile F2P launch | 매 LiveOps 매 day-1 plan, 매 6mo content roadmap | | 매 single-player premium | 매 LiveOps 매 unnecessary (DLC enough) | | 매 small indie | 매 lightweight events + Discord, 매 full LiveOps team 매 X | | 매 MMO | 매 patch cycle + expansion + LiveOps 매 hybrid | | 매 dying game | 매 sunset plan, 매 honest 매 player communication | **기본값**: 매 remote config + event calendar + cohort retention dashboard 매 minimum viable LiveOps. ## 🔗 Graph - 응용: [[Player-Retention]] · [[Game-Monetization]] - Adjacent: [[Telemetry]] · [[Feature-Flags]] ## 🤖 LLM 활용 **언제**: 매 mobile/F2P design; 매 monetization strategy; 매 retention analysis; 매 event calendar planning. **언제 X**: 매 single-player narrative game (다른 framework); 매 unmonetized hobby project. ## ❌ 안티패턴 - **Burnout-grind events**: 매 daily-mandatory events 매 churn 매 가속. - **Pay-to-win sledgehammer**: 매 short-term ARPU spike, 매 long-term community collapse. - **Silent nerf**: 매 patch notes 없이 매 weapon nerf — 매 trust 매 destroy. - **No sunset plan**: 매 servers 매 갑작스럽 shut, 매 player data 매 lose. - **Calendar-only, no story**: 매 events 매 mechanical 매 없이 narrative — 매 fatigue. ## 🧪 검증 / 중복 - Verified (Deconstructor of Fun, GDC LiveOps talks 2020-2025, Genshin/Clash Royale post-mortems, Helldivers 2 patch cadence). - 신뢰도 A. ## 🕓 Changelog | 날짜 | 변경 | |---|---| | 2026-05-08 | Phase 1 | | 2026-05-10 | Manual cleanup — full content (LiveOps pillars, telemetry, battle pass) |