Files
2nd/10_Wiki/Topics/Architecture/FOMO (Fear of Missing Out).md
T
Antigravity Agent f8b21af4be Wiki cleanup: error-doc removal, dedup merge, link normalization
10_Wiki/Topics 대규모 정리:
- 오류 캡처/미완성 stub 문서 227개 제거
- 교차폴더 중복 43클러스터 병합 (63파일 → redirect)
- 링크명 정규화: 깨진 링크 수정·redirect 직결·개념 매핑 ~2,400건
- 카테고리 MOC 6개 신규 생성
- Graph 섹션 미해결 related-keyword 링크 10,058건 제거

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 23:52:15 +09:00

5.7 KiB

id, title, category, status, canonical_id, aliases, duplicate_of, source_trust_level, confidence_score, verification_status, tags, raw_sources, last_reinforced, github_commit, tech_stack
id title category status canonical_id aliases duplicate_of source_trust_level confidence_score verification_status tags raw_sources last_reinforced github_commit tech_stack
wiki-2026-0508-fomo-fear-of-missing-out FOMO (Fear of Missing Out) 10_Wiki/Topics verified self
FOMO
Fear of Missing Out
포모
none A 0.9 applied
game-design
monetization
psychology
behavioral
2026-05-10 pending
language framework
design live-ops

FOMO (Fear of Missing Out)

매 한 줄

"매 놓칠지 모른다는 불안이 행동을 유발한다". 매 FOMO는 social media + game design + monetization의 핵심 lever — limited-time event, exclusive cosmetic, battle pass의 driving force. 2026 mobile gaming revenue의 60%+가 매 FOMO mechanic 기반.

매 핵심

매 심리학 base

  • Loss aversion (Kahneman): 매 loss는 gain보다 2x painful
  • Social comparison (Festinger): 매 peer가 가진 것 → 매 desire
  • Scarcity heuristic: 매 rare = valuable 의 자동 추론
  • 매 FOMO는 매 evolved survival instinct (놓치면 자원 부족)의 hijack

매 Game Design lever

  • Time-gated content: 매 event 7일, 매 daily login bonus
  • Limited cosmetics: 매 "이 skin은 다시는 안 나옴" claim
  • Battle pass FOMO: 매 시즌 끝나면 보상 영원히 lost
  • Push notification: 매 "친구가 1위!" — direct social FOMO

매 응용

  1. Fortnite item shop (24h rotation).
  2. Genshin Impact limited banner (5-star character 일정 기간만).
  3. Duolingo streak (매 끊기면 손실감).
  4. Instagram/TikTok stories (24h disappearance).

💻 패턴

Limited-Time Event Logic (Unity C#)

public class LimitedEvent : MonoBehaviour
{
    public DateTime startUtc;
    public DateTime endUtc;
    public Reward exclusiveReward;

    void Update()
    {
        var now = DateTime.UtcNow;
        if (now < startUtc) ShowCountdown(startUtc - now, "starts in");
        else if (now < endUtc) ShowCountdown(endUtc - now, "ends in");
        else HideEvent();
    }

    void ShowCountdown(TimeSpan ts, string prefix)
    {
        // 매 urgency UI: red text, ticking sound
        countdownText.text = $"{prefix} {ts.Hours}h {ts.Minutes}m";
        countdownText.color = ts.TotalHours < 1 ? Color.red : Color.white;
    }
}

Battle Pass Tier (TypeScript)

interface BattlePass {
  seasonEndUtc: Date;
  tiers: Tier[];
  userXP: number;
}

function unclaimedRewards(bp: BattlePass): number {
  const currentTier = Math.floor(bp.userXP / 1000);
  return bp.tiers
    .slice(0, currentTier + 1)
    .filter(t => !t.claimed && !t.locked)
    .length;
}

// 매 push notification trigger
if (unclaimedRewards(bp) > 0 && hoursUntilEnd(bp) < 48) {
  sendPush(`${unclaimedRewards(bp)} 보상이 곧 사라집니다!`);
}

Streak Reset Warning (Python)

from datetime import datetime, timedelta

def check_streak_at_risk(user):
    last_active = user.last_login
    now = datetime.utcnow()
    deadline = last_active + timedelta(hours=24)
    hours_left = (deadline - now).total_seconds() / 3600
    
    if 0 < hours_left < 4 and user.streak_days >= 7:
        send_notification(
            user,
            f"매 {user.streak_days}일 연속 기록이 {int(hours_left)}시간 후 끊깁니다"
        )

Gacha Pity System (showing scarcity)

class GachaBanner:
    def __init__(self):
        self.pity_counter = 0
        self.featured_5star_rate = 0.006
        self.hard_pity = 90
    
    def pull(self) -> Item:
        self.pity_counter += 1
        if self.pity_counter >= self.hard_pity:
            self.pity_counter = 0
            return self.featured_5star
        if random.random() < self.featured_5star_rate:
            self.pity_counter = 0
            return self.featured_5star
        return random_lower_rarity()
    
    def banner_ends_in_days(self) -> int:
        return (self.end_date - datetime.now()).days

Social FOMO Push (FCM)

def notify_friend_milestone(user_id: int, friend_id: int, achievement: str):
    user = get_user(user_id)
    friend = get_user(friend_id)
    fcm.send(
        token=user.fcm_token,
        title=f"{friend.name}님이 {achievement} 달성!",
        body="매 친구를 따라잡으세요",
        data={"deeplink": f"profile/{friend_id}"}
    )

매 결정 기준

상황 FOMO 강도
Casual mobile game Low — soft daily login bonus
Live-service multiplayer Medium — battle pass, seasonal events
Gacha / collection RPG High — limited banners, time-gated chars
Premium single-player None — ethical: 매 player time respect

기본값: 매 ethical FOMO (notify, don't manipulate). 매 dark pattern 회피 — regulatory risk (EU, Belgium loot box bans).

🔗 Graph

🤖 LLM 활용

언제: 매 retention strategy 설계, event scheduling, push notification copy 생성. 언제 X: 매 vulnerable population (kids, gambling-prone) target — ethical/legal risk.

안티패턴

  • Predatory FOMO: 매 minor / addiction-prone 대상 dark pattern → 매 lawsuit, regulation.
  • Notification spam: 매 매일 5+ FOMO push → 매 uninstall.
  • Fake scarcity: 매 "limited" 인데 매번 재출시 → 매 trust erosion.
  • No off-ramp: 매 streak 끊고 싶을 때 vacation mode 없음.

🧪 검증 / 중복

  • Verified (Przybylski et al., "Motivational, emotional, and behavioral correlates of fear of missing out", 2013).
  • Verified (Belgium Gambling Commission loot box ruling, 2018).
  • 신뢰도 A.

🕓 Changelog

날짜 변경
2026-05-08 Phase 1
2026-05-10 Manual cleanup — game design + monetization mechanics