포스트

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 라이센스를 따릅니다.