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시간마다 실행 |
*/5 * * * * |
5분마다 실행 |
0 9-18 * * 1-5 |
월~금 9시~18시 매시간 실행 |
15 14 1 * * |
매월 1일 14시 15분 실행 |
🔹 특수기호 정리
| 기호 | 설명 | 예시 |
|---|---|---|
* |
모든 값 | * * * * * → 매분 |
, |
여러 값 지정 | 0,15,30,45 * * * * |
- |
범위 지정 | 0 9-17 * * * |
/ |
주기 지정 | */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 프로젝트 Dashboard 에서 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 값 한 줄만 변경해 손쉽게 켜기/끄기 제어가 가능합니다.
방법 ③ JSON 속성명 변경 (비권장)
schedule 키를 schedule_ 처럼 변경하면 Vercel이 이를 인식하지 못해 실행되지 않습니다.
다만 임시방편 방식이며 권장되지 않습니다.
⚠️ 주의사항
JSON은 주석을 지원하지 않습니다.
schedule 항목을 제거하면 해당 크론은 등록되지 않습니다.
4️⃣ 결론
* * * * *형식은 분·시·일·월·요일을 의미합니다.- 주기, 범위, 요일 조합으로 매우 정밀한 실행 주기 설정이 가능합니다.
- 주석으로 크론을 끄는 것은 불가능합니다.
- Dashboard 또는
ENABLE_CRON변수로 제어하는 방식이 권장됩니다. - 3시간마다 실행하려면 아래 설정을 사용합니다.
"schedule": "0 */3 * * *"
✅ 가장 권장되는 관리 방식
- 개발 중에는
ENABLE_CRON=false로 제어 - 운영 환경에서는 Dashboard 에서 관리
- 모든 설정은
vercel.json의crons배열로 유지