Vercel의 Cron 기능은 정해진 시간 간격으로 특정 API를 자동 호출하여 정기 작업(예: 데이터 갱신, 광고 입찰 조정 등)을 수행하도록 해주는 강력한 도구입니다.
1️⃣ 기본 구조 및 문법
Vercel은 표준 Cron 표현식 (* * * * *)을 그대로 사용합니다.
┌───────────── 분 (minute, 0–59)
│ ┌───────────── 시 (hour, 0–23)
│ │ ┌───────────── 일 (day of month, 1–31)
│ │ │ ┌───────────── 월 (month, 1–12)
│ │ │ │ ┌───────────── 요일 (day of week, 0–6, 일요일=0)
│ │ │ │ │
* * * * *
💡 예시표
| 표현식 | 실행 주기 |
|---|---|
* * * * * | 매분 실행 |
0 * * * * | 매시간 정각 실행 |
0 9 * * * | 매일 오전 9시 실행 |
30 2 * * * | 매일 새벽 2시 30분 실행 |
0 */3 * * * | 3시간마다 실행 (0시, 3시, 6시...) |
*/5 * * * * | 5분마다 실행 |
0 9-18 * * 1-5 | 월~금 9시~18시 매시간 실행 |
15 14 1 * * | 매월 1일 14시 15분 실행 |
🔹 특수기호 정리
| 기호 | 설명 | 예시 |
|---|---|---|
| * | 모든 값 | * * * * * → 매분 |
| , | 여러 값 지정 | 0,15,30,45 * * * * → 0·15·30·45분 |
| - | 범위 지정 | 0 9-17 * * * → 9시~17시 |
| / | 주기 지정 | */10 * * * * → 10분마다 |
2️⃣ 자주 사용하는 주기별 설정 예시
🕒 3시간 간격으로 실행
{
"crons": [
{
"path": "/api/naver-ads-keyword-cpc-adjuster-cron-version",
"schedule": "0 */3 * * *"
}
]
}
0 */3 * * * → 매일 0분 기준으로 3시간 간격(0시, 3시, 6시, 9시, 12시, 15시, 18시, 21시)에 실행됩니다.즉, 하루 총 8회 실행됩니다.
🗓 특정 요일·시간대 예시
0 9-18 * * 1-5→ 월~금 9시~18시, 매시간 정각 실행*/15 14-16 * * 3→ 수요일 14~16시, 15분마다 실행
🕗 특정 시간 범위만 제어
*/30 8-20 * * *→ 매일 8시~20시, 30분마다 실행* * * * *→ 매일, 매분 실행
✅ 정리:
Vercel Cron은 분·시·일·월·요일 단위로 자유롭게 범위를 지정할 수 있으며,
요일 포함·제외 모두 가능합니다.
3️⃣ 크론 중단 및 비활성화 방법
Vercel의 vercel.json은 주석 처리나 비활성화 속성을 직접 지원하지 않습니다.
대신 다음 세 가지 방법 중 하나를 사용해야 합니다.
방법 ①: Dashboard에서 크론 항목 삭제
가장 확실하고 안전한 방법입니다. Vercel 프로젝트 대시보드에서 Cron 항목을 삭제하면 즉시 비활성화됩니다.
방법 ②: .env 설정으로 내부 제어
API 내부에서 ENABLE_CRON 값을 조건으로 확인하여 동작을 제어할 수 있습니다.
export default async function handler(req, res) {
const ENABLE_CRON = process.env.ENABLE_CRON === 'true';
if (!ENABLE_CRON) {
return res.status(200).send("Cron is temporarily disabled.");
}
// 실제 작업 수행
}
# .env
ENABLE_CRON=false
💡 이 방법의 장점:
크론 호출 자체는 유지되지만, 실제 작업 수행은 막을 수 있습니다.
즉, .env에서 한 줄만 변경해 “켜기/끄기”를 손쉽게 제어할 수 있습니다.
크론 호출 자체는 유지되지만, 실제 작업 수행은 막을 수 있습니다.
즉, .env에서 한 줄만 변경해 “켜기/끄기”를 손쉽게 제어할 수 있습니다.
방법 ③: JSON 속성명 변경 (비권장)
"schedule" 키를 "schedule_"처럼 임의 변경하면
Vercel이 이를 인식하지 못해 실행되지 않지만, 이는 임시방편에 불과합니다.
⚠️ 주의: JSON은 주석을 지원하지 않으며,
"schedule" 항목을 제거하면 해당 크론은 등록되지 않습니다.
4️⃣ 결론
- “* * * * *” 형식은 분·시·일·월·요일을 의미한다.
- 주기, 범위, 요일 조합으로 매우 정밀한 실행 주기 설정 가능.
- 주석으로 크론을 끄는 것은 불가능 → Dashboard 또는
ENABLE_CRON변수로 제어. - 3시간마다 실행하려면 →
"schedule": "0 */3 * * *"
✅ 가장 권장되는 관리 방식:
1) 개발 중엔
2) 운영 중엔 Dashboard에서 관리,
3) 모든 설정은
1) 개발 중엔
ENABLE_CRON=false 로 제어,2) 운영 중엔 Dashboard에서 관리,
3) 모든 설정은
vercel.json 내 crons 배열로 유지.
