"매 의도적 정보 비대칭 + 인지 편향 착취 = 약탈". 약탈적 수익화는 단순 결제 유도 가 아니라, 사용자가 fully informed하게는 절대 동의하지 않을 거래 를 reward schedule · sunk cost · social pressure 으로 끌어내는 패턴들의 집합이다. 2026 기준 EU DSA, 벨기에/네덜란드 loot box 금지, 한국 확률형 정보공개법(2024.3 시행) 등으로 규제화 진행 중.
매 핵심
매 King & Delfabbro 분류 (5 categories)
Disguised: 진짜 비용을 숨김 (premium currency, conversion 불투명).
Pay-to-skip / pay-to-win: artificial grind 조성 후 결제 skip.
Exploitative: 미성년자 · 도박 성향자 specific targeting.
매 인지 메커니즘
Variable ratio reinforcement (Skinner box) — 가장 강한 행동 형성.
Sunk cost fallacy — 이미 쓴 돈 회수 욕구.
Social proof / FOMO — 길드/친구 비교.
Loss aversion — "limited offer 끝나면 손실".
Pity timer 의 역설 — 보장 메커니즘이 오히려 spend 가속.
매 응용 (회피)
Ethical monetization audit — 5 categories 점검.
Transparent odds disclosure — 1% 확률을 1%로 명확히.
Spend caps + age gates — 미성년 보호.
💻 패턴
Dark pattern detector
typeOffer={realCostUSD: number;displayedAs:'currency'|'usd';timer?: number;// seconds until expiry
drawProbability?: number;// 0..1 for loot
targetsUnder18?: boolean;};functionpredatoryFlags(o: Offer):string[]{constf: string[]=[];if(o.displayedAs==='currency')f.push('disguised-cost');if(o.timer&&o.timer<24*3600)f.push('time-pressure');if(o.drawProbability&&o.drawProbability<0.01)f.push('compulsive-low-odds');if(o.targetsUnder18)f.push('exploitative-minor');returnf;}
Transparent loot box (regulation-compliant)
interfaceLootBox{items:{id: string;rarity: string;probability: number}[];pityCap: number;guaranteedAt: number;}functiondiscloseOdds(box: LootBox){console.assert(Math.abs(box.items.reduce((s,i)=>s+i.probability,0)-1)<1e-6,'probabilities must sum to 1');returnbox.items.map(i=>`${i.id} (${i.rarity}): ${(i.probability*100).toFixed(2)}%`);}
Spend cap (age-aware)
classSpendGuard{monthlyCapUSD(age: number):number{if(age<13)return0;// no purchases
if(age<18)return50;// KR/EU youth cap
returnInfinity;// adult
}canCharge(userId: string,age: number,amountUSD: number,monthSpentUSD: number){returnmonthSpentUSD+amountUSD<=this.monthlyCapUSD(age);}}
FOMO-free LTO replacement
// 대신: rotating shop without artificial scarcity
constshop={rotation:'weekly',itemsAlwaysReturnInDays: 28,// 모든 아이템 4주 내 재등장
noCountdownTimer: true,};