Lazy evaluated grant(지연된 평가), Lazy Token Issuance(게으른 토큰 지급) 방식
✅ 개념: **Lazy Token Issuance (게으른 지급)**
✅ “매일 새벽에 미리 주는 게 아니라, 사용자가 내 토큰 얼마 있지? 하고 확인할 때 그때 계산해서 지급한다.”
🎯 이 방식의 장점
| 항목 | 설명 |
|---|---|
| ✅ 스케줄러 불필요 | Celery, crontab 등 관리할 필요 없음 |
| ✅ 중복 지급 방지 쉬움 | last_issued_at 체크만 하면 됨 |
| ✅ API 응답에 실시간 상태 반영 | “현재까지 받을 수 있는 총 Token” 를 계산해서 바로 지급 |
✅ 선택적으로 도입 가능한 최적화
| 기능 | 설명 |
|---|---|
| next_reward_at 캐싱 | 다음 지급일을 미리 계산해서 보여줌 |
| 잔액 캐싱 | 매번 계산이 부담되면 Redis 등에 결과를 캐싱 가능 |
| Webhook 대응 | Paddle 등에서 “결제 성공 시”에 last_issued_at 초기화 가능 |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
def check_wallet(user_id):
sub = get_active_subscription(user_id)
if not sub:
return {"balance": get_wallet(user_id)}
now = datetime.utcnow()
months_since_last = month_diff(sub.last_issued_at, now)
if months_since_last > 0:
# 새로 지급할 Token 계산
total_new = months_since_last * sub.plan.bct_per_month
give_token(user_id, total_new)
sub.last_issued_at = now
db.commit()
return {"balance": get_wallet(user_id)}
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.
