vercel.json 2크론 + coach→tip-ranking·rewards→drip 체이닝). 기록 보관용 · 최신은 문서 허브| 크론 | KST | LLM | 의존성 | 문제 |
|---|---|---|---|---|
| community-rewards | 01:00 | 없음 | 독립(반응) | 정상(월/1일만 발동) |
| community-drip | 01:30 | 없음 | 독립(콘텐츠 풀) | 정상 |
| coach | 02:00 | haiku | 내부 backfill→편지(그룹됨) | 정상 |
| tip-ranking | 02:30 | 없음 | coach 산출 의존 | ⚠️ 30분 간격 타이밍 의존 |
| moderate-comments | 03:00 | — | — | ❌ 라우트 없음=유령 404 |
| enrich | 04:00 | (haiku) | enrich_queue | ⚠️ 큐 비어 no-op |
remap 라우트 주석에 직접 "Hobby 크론 수 절약"이라 적혀 있다(=하비 플랜). 하비는 크론 2개·하루 1회 제한 → 6개 등록 시 대부분이 조용히 안 돌았을 가능성. (코칭만 실측 확인됨.)tip-ranking → coach(coach_letters.context를 읽음). 그런데 별도 크론 30분 뒤라, 스케일되면 coach가 안 끝난 채 tip-ranking이 어제 데이터로 계산.backfillUnmappedMenus(메뉴→식재료 매핑) → 영양 분석 → 편지. 한 함수 안.vercel.json 크론 2개(하비 한도 충족). 각 배치가 의존 작업을 self-fetch 체이닝으로 순서 보장. 라우트 파일은 보존(수동 트리거·백필).
community-rewards보상(주간 톱10/월간, 월·1일만 발동) 실행 → 끝에 drip(매일 코치 PICK 공식 글 게시) 체이닝. 둘 다 커뮤니티·서로 독립이라 한 배치.
coach(backfill →) 편지·질문·휴면 복귀·회유 알림톡 → 끝에 tip-ranking(coach_letters 갱신 직후) 체이닝. 의존성·타이밍 문제 제거.
?n=20 등).체이닝 = 같은 배포 URL로 fetch(new URL('/api/cron/...', req.url)) + authorization 포워드(둘 다 동일 CRON_SECRET 가드). 실패해도 본 배치는 정상 반환(try/catch).
| 항목 | 단가 | 현재(활성 ~1명) | 활성 1,000명 가정 |
|---|---|---|---|
| 코칭 편지·질문 LLM | claude-haiku-4-5(초저가) | 월 수백 원 | ~월 40만 원 |
| tip-ranking·drip·rewards | LLM 0(결정론·DB만) | 0 | 0(쿼리비 무시) |
| 알림톡(편지·회유) | ₩8/건 | ₩0(도먼트) | ~월 24만(전원 수신 가정) |
| Vercel | 하비=무료 | 0 | Pro 전환 시 $20 |