크론 구문 해설: 실제로 쓰는 5개 필드와 표현식 (무료 생성기 제공)
Source: Dev.to
크론 표현식을 만들 때마다 나는 다섯 개의 숫자와 별표를 바라보며 스스로에게 의문을 품는다. 0 0 * * 0 은 일요일인가, 토요일인가? 요일은 0부터 시작하나요, 1부터인가? 이런 생각이 결국 나에게 깨달음을 주었다.
┌───────────── minute (0–59) ── 분 (0–59)
│ ┌───────────── hour (0–23) ── 시 (0–23)
│ │ ┌───────────── day of month (1–31) ── 일 (1–31)
│ │ │ ┌───────────── month (1–12) ── 월 (1–12)
│ │ │ │ ┌───────────── day of week (0–6, Sunday = 0) ── 요일 (0–6, 일요일 = 0)
│ │ │ │ │
* * * * *
*은 “매번”이라는 뜻입니다.- 숫자는 “정확히 그 시점에”라는 뜻입니다. 이 두 가지만으로도 작성하는 표현식의 약 90%를 커버합니다.
| 기호 | 의미 |
|---|---|
* | 모든 값 (* * * * * = 매분) |
, | 리스트 (0 9,17 * * * = 9시와 17시에) |
- | 범위 (0 9-17 * * * = 9시부터 17시까지 매시) |
/ | 단계 (*/15 * * * * = 15분마다) |
Expression / When it runs
Expression When it runs
*/5 * * * * 매 5분마다
0 * * * * 매시 정각에
0 0 * * * 매일 자정에
0 9 * * 1-5 오전 9시, 월요일–금요일
0 0 1 * * 매월 1일 자정에
0 0 * * 0 매주 일요일 자정에
30 2 * * * 매일 새벽 2시 30분 (백업 등에 유용)
요일은 0–6이며, 0은 일요일을 의미합니다(대부분의 시스템은 7도 일요일로 인식합니다). 따라서 0 0 * * 0 은 토요일이 아니라 일요일입니다.
day-of-month와 day-of-week를 동시에 지정하면 크론은 이를 OR 로 처리합니다. 예를 들어 0 0 1 * 1 은 “매월 1일 또는 매주 월요일”에 실행되며, “1일이 월요일인 경우에만” 실행되는 것이 아닙니다. 이 때문에 작업이 예상보다 두 배 더 자주 실행될 수 있으며, 디버깅이 번거로워집니다.
가장 빠른 검증 방법은 표현식을 자연어로 바꿔서 내가 의도한 내용과 일치하는지 확인하는 것입니다. 머리 속으로 계속 변환하느라 지쳤다면, 로그인 없이 사용할 수 있는 무료 크론 도구를 만들어 두었습니다. 일정 설명을 입력하면 표현식을, 혹은 표현식을 붙여넣으면 다음 실행 시간을 보여줍니다: https://forgly.dev/tools/cron-generator
일반적인 스케줄 목록을 복사‑붙여넣기 하고 싶다면 여기에서 치트시트를 확인하세요: https://forgly.dev/cron
내게 효과적이었던 팁: 크론을 오른쪽에서 왼쪽으로 읽는 습관을 버리고, 문장처럼 읽으세요 — “분 X, 시 Y, 이 날들에”.