f8b21af4be
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>
181 lines
5.7 KiB
Markdown
181 lines
5.7 KiB
Markdown
---
|
|
id: wiki-2026-0508-fomo-fear-of-missing-out
|
|
title: FOMO (Fear of Missing Out)
|
|
category: 10_Wiki/Topics
|
|
status: verified
|
|
canonical_id: self
|
|
aliases: [FOMO, Fear of Missing Out, 포모]
|
|
duplicate_of: none
|
|
source_trust_level: A
|
|
confidence_score: 0.9
|
|
verification_status: applied
|
|
tags: [game-design, monetization, psychology, behavioral]
|
|
raw_sources: []
|
|
last_reinforced: 2026-05-10
|
|
github_commit: pending
|
|
tech_stack:
|
|
language: design
|
|
framework: 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#)
|
|
```csharp
|
|
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)
|
|
```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)
|
|
```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)
|
|
```python
|
|
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)
|
|
```python
|
|
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
|
|
- 부모: [[Game Design]]
|
|
- 변형: [[Loss Aversion]]
|
|
|
|
## 🤖 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 |
|