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>
6.6 KiB
6.6 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-게이미피케이션 | 게이미피케이션 | 10_Wiki/Topics | verified | self |
|
none | A | 0.9 | applied |
|
2026-05-10 | pending |
|
게이미피케이션
매 한 줄
"매 non-game context에 game-design element를 적용해 user motivation / engagement / behavior를 reshape". 2002 Nick Pelling의 용어 등장 → 2010 Foursquare 배지로 mainstream → 2014 Yu-kai Chou의 Octalysis 8-driver framework → 2026 현재 Duolingo · Strava · Apple Fitness가 industry exemplar이며 LLM-generated personalized quests가 emerging.
매 핵심
매 PBL Triad (Basic)
- Points (P): 매 quantitative score — XP, currency.
- Badges (B): 매 achievement marker — collection / status.
- Leaderboards (L): 매 social comparison — ranked scoreboard.
매 Octalysis 8 Core Drives (Yu-kai Chou)
- Epic Meaning: 매 큰 mission의 일부 — Wikipedia 기여.
- Development & Accomplishment: 매 progress / mastery — Duolingo streak.
- Empowerment of Creativity: 매 player creativity expression — Minecraft.
- Ownership & Possession: 매 collection / customization.
- Social Influence: 매 peer comparison / cooperation.
- Scarcity & Impatience: 매 limited-time / FOMO.
- Unpredictability: 매 variable reward — gacha, slot.
- Loss & Avoidance: 매 streak break 회피.
매 응용
- Duolingo — streak, league, hearts (loss-avoidance).
- Strava — segment leaderboard, kudos.
- Apple Fitness — 3 rings + 30-day challenge.
- Habitica — RPG-style habit tracker.
- LinkedIn — profile completion %, "All-Star" badge.
💻 패턴
XP / Level System
const xpForLevel = (level: number): number =>
Math.floor(100 * Math.pow(level, 1.5));
export function levelFromXP(totalXP: number): { level: number; progress: number } {
let level = 1;
let acc = 0;
while (acc + xpForLevel(level) <= totalXP) {
acc += xpForLevel(level);
level++;
}
const inLevel = totalXP - acc;
const need = xpForLevel(level);
return { level, progress: inLevel / need };
}
Streak Tracker
import { differenceInCalendarDays } from 'date-fns';
interface StreakState { current: number; longest: number; lastActiveDate: Date }
export function recordActivity(state: StreakState, now: Date = new Date()): StreakState {
const gap = differenceInCalendarDays(now, state.lastActiveDate);
if (gap === 0) return state; // already counted today
if (gap === 1) { // consecutive day
const next = state.current + 1;
return { current: next, longest: Math.max(next, state.longest), lastActiveDate: now };
}
return { current: 1, longest: state.longest, lastActiveDate: now }; // broken
}
Badge Engine (rule-based)
type BadgeRule = { id: string; name: string; check: (s: PlayerStats) => boolean };
const RULES: BadgeRule[] = [
{ id: 'first_blood', name: 'First Win', check: s => s.wins >= 1 },
{ id: 'centurion', name: '100 Wins', check: s => s.wins >= 100 },
{ id: 'streak_30', name: '30-Day Streak', check: s => s.streak >= 30 },
];
export function evaluateBadges(stats: PlayerStats, owned: Set<string>): string[] {
return RULES.filter(r => !owned.has(r.id) && r.check(stats)).map(r => r.id);
}
Variable Reward (Loot Box) with disclosed odds
type Drop = { item: string; weight: number };
export function rollLoot(table: Drop[], rng: () => number = Math.random): string {
const total = table.reduce((s, d) => s + d.weight, 0);
let r = rng() * total;
for (const d of table) {
r -= d.weight;
if (r <= 0) return d.item;
}
return table[table.length - 1].item;
}
// 매 disclosed odds (regulatory: KR / CN / BE / NL)
const TABLE: Drop[] = [
{ item: 'common', weight: 70 },
{ item: 'rare', weight: 25 },
{ item: 'epic', weight: 4.5 },
{ item: 'legendary', weight: 0.5 },
];
Leaderboard (Redis ZSET)
import { Redis } from '@upstash/redis';
const redis = Redis.fromEnv();
export async function recordScore(userId: string, score: number) {
await redis.zadd('leaderboard:weekly', { score, member: userId });
}
export async function topN(n = 10) {
return redis.zrange('leaderboard:weekly', 0, n - 1, { rev: true, withScores: true });
}
export async function rankOf(userId: string) {
return redis.zrevrank('leaderboard:weekly', userId);
}
Personalized Quest (LLM-generated)
import Anthropic from '@anthropic-ai/sdk';
const client = new Anthropic();
export async function dailyQuest(profile: { skills: string[]; weak: string[]; mood: string }) {
const msg = await client.messages.create({
model: 'claude-opus-4-7',
max_tokens: 200,
system: 'Generate ONE daily quest for a learning app. Output JSON: {title, goal, xp, steps[]}',
messages: [{ role: 'user', content: JSON.stringify(profile) }],
});
return JSON.parse((msg.content[0] as { text: string }).text);
}
매 결정 기준
| 상황 | Approach |
|---|---|
| Education app | Streak + XP + League (Duolingo) |
| Fitness | Goal-rings + monthly challenge |
| Productivity | Habit-RPG (Habitica) |
| Enterprise training | Badge + leaderboard, opt-in |
| Health-critical | Avoid scarcity / FOMO — ethical-only |
기본값: PBL + 1~2 Octalysis drives matched to context, with disclosed-odds + opt-out.
🔗 Graph
- 부모: Game_Design
- 변형: Self_Determination_Theory
- Adjacent: Operant_Conditioning
🤖 LLM 활용
언제: personalized quest generation, badge naming, encouragement copy, weakness-targeted exercise sequencing. 언제 X: 매 reward-schedule design — RL / behavioral economist domain (LLM은 hidden bias 위험).
❌ 안티패턴
- Pointsification: 매 PBL만 얹기 — intrinsic motivation 없으면 6주 후 fatigue.
- Dark patterns: 매 streak shame, FOMO-pressure, sunk-cost manipulation.
- One-size-fits-all: 매 모든 user에 leaderboard — competitive-averse user 이탈.
- Reward inflation: 매 점차 큰 보상 → 매 동일 효과 위해 escalation 필요.
🧪 검증 / 중복
- Verified (Yu-kai Chou Actionable Gamification, Self-Determination Theory, Duolingo Engineering Blog 2024).
- 신뢰도 A.
🕓 Changelog
| 날짜 | 변경 |
|---|---|
| 2026-05-08 | Phase 1 |
| 2026-05-10 | Manual cleanup — PBL + Octalysis 8 drives + ethical guardrails 정리 |