Cron 표현식 해석기는 `0 9 * * 1-5` 같은 크론 스케줄 문자열을 입력하면 '평일 오전 9시에 실행'처럼 사람이 읽을 수 있는 한국어 설명으로 풀어 주는 개발자 도구입니다. 크론 표현식은 다섯 개의 필드가 공백으로 구분된 짧은 문자열이지만, `*`·`/`·`,`·`-` 같은 특수문자가 섞이면 정확히 언제 실행되는지 눈으로 읽기 어렵습니다. 이 도구는 표현식을 필드별로 해석해 실행 시점을 문장으로 보여 줍니다.
Cron은 유닉스 계열 시스템에서 특정 시각마다 명령을 자동 실행하는 스케줄러이자, 그 스케줄을 적는 표기법의 이름입니다. 오늘날에는 리눅스 crontab뿐 아니라 Kubernetes CronJob, GitHub Actions의 schedule 트리거, AWS EventBridge, 각종 백엔드 배치 잡 등 거의 모든 예약 실행 환경이 이 표기법을 그대로 또는 살짝 변형해 사용합니다. 그래서 크론 표현식을 읽고 쓰는 능력은 서버·인프라·자동화 작업의 기본기입니다.
아래에서는 크론의 다섯 필드 구조와 각 필드의 허용 범위, `*`·`,`·`-`·`/` 특수문자의 의미, 그리고 현업에서 자주 쓰는 표현식 예시를 표로 정리했습니다. 값을 하나 바꿀 때마다 실행 시점이 어떻게 달라지는지 도구 상단 입력창에서 직접 확인하면서 읽어 보세요.
사용 방법
- 상단 입력창에 크론 표현식을 '분 시 일 월 요일' 순서로 다섯 필드, 공백으로 구분해 입력합니다. 예: `0 9 * * 1-5`.
- 입력 즉시 아래 결과 카드에 '평일 오전 9시에 실행'처럼 한국어 해석이 나타납니다. 필드 개수가 5개가 아니면 오류 메시지로 알려 줍니다.
- 무엇을 넣을지 막막하면 입력창 아래 프리셋 버튼('5분마다', '평일 오전 9시' 등)을 눌러 표현식을 채운 뒤, 필드 값을 하나씩 바꿔 가며 결과가 어떻게 변하는지 실험합니다.
- 완성한 표현식을 crontab, CronJob의 schedule, GitHub Actions의 cron 필드 등 실제 스케줄러 설정에 그대로 붙여 넣어 사용합니다.
크론 표현식의 5개 필드 구조
표준 크론 표현식은 공백으로 구분된 다섯 개의 필드로 이뤄집니다. 왼쪽부터 순서대로 분, 시, 일(날짜), 월, 요일이며, 이 순서는 절대 바뀌지 않습니다. 각 필드는 정해진 숫자 범위를 가지며, 모든 필드가 조건을 동시에 만족하는 시각에 작업이 실행됩니다.
| 순서 | 필드 | 허용 범위 | 설명 |
|---|---|---|---|
| 1 | 분 (minute) | 0 – 59 | 매시 몇 분에 실행할지 |
| 2 | 시 (hour) | 0 – 23 | 하루 중 몇 시에 (24시간제) |
| 3 | 일 (day of month) | 1 – 31 | 매월 며칠에 |
| 4 | 월 (month) | 1 – 12 | 몇 월에 (1=1월) |
| 5 | 요일 (day of week) | 0 – 7 | 무슨 요일에 (0·7=일요일, 1=월요일) |
요일은 0과 7이 모두 일요일
요일 필드는 0부터 6까지 쓰는 것이 기본이지만(0=일요일, 6=토요일), 많은 크론 구현이 7도 일요일로 함께 허용합니다. 즉 일요일은 0 또는 7 어느 쪽으로 적어도 됩니다. 참고로 '일' 필드와 '요일' 필드를 둘 다 지정하면 대부분의 크론은 둘 중 하나라도 맞으면 실행하는 OR 조건으로 동작하니 주의하세요.
특수문자 (* / , -) 의 의미
크론이 강력한 이유는 각 필드에 네 가지 특수문자를 써서 '언제'를 유연하게 표현할 수 있기 때문입니다. 아래 네 기호만 이해하면 대부분의 스케줄을 읽고 쓸 수 있습니다.
| 기호 | 이름 | 의미 | 예시 |
|---|---|---|---|
| * | 전체(에스터리스크) | 해당 필드의 모든 값 | 시 필드의 `*` = 매시간 |
| / | 간격(슬래시) | n 단위마다 반복 | 분 필드의 `*/15` = 15분마다 |
| , | 목록(콤마) | 나열한 값들에 각각 | 시 필드의 `9,12,18` = 9시·12시·18시 |
| - | 범위(하이픈) | 시작~끝 연속 구간 | 요일 필드의 `1-5` = 월요일부터 금요일 |
조합해서 쓰기
특수문자는 한 필드 안에서 함께 쓸 수 있습니다. 예를 들어 분 필드의 `0-30/10`은 '0분부터 30분 사이를 10분 간격으로', 즉 0·10·20·30분에 실행하라는 뜻입니다. `1-5`(월~금)와 `0`(일)을 섞어 `0,6`처럼 쓰면 주말만 실행하는 스케줄이 됩니다.
자주 쓰는 크론 표현식 예시
실무에서 반복적으로 등장하는 대표 스케줄을 표현식과 함께 정리했습니다. 이 값들을 그대로 복사해 쓰거나, 상단 입력창에 넣어 해석 결과를 확인해 보세요.
| 표현식 | 실행 시점 |
|---|---|
| * * * * * | 매 분마다 |
| */5 * * * * | 5분마다 |
| 0 * * * * | 매시 정각(0분)마다 |
| 0 0 * * * | 매일 자정(00:00)에 |
| 30 9 * * * | 매일 오전 9시 30분에 |
| 0 9 * * 1 | 매주 월요일 오전 9시에 |
| 0 9 * * 1-5 | 평일(월~금) 오전 9시에 |
| 0 0 * * 0 | 매주 일요일 자정에 |
| 0 0 1 * * | 매월 1일 자정에 |
| 0 0 1 1 * | 매년 1월 1일 자정에 |
| 0 9,18 * * * | 매일 오전 9시와 오후 6시에 |
크론을 쓸 때 주의할 점
크론 표현식 자체는 간단하지만, 실제 스케줄러에 넣을 때 자주 실수하는 지점이 있습니다. 아래 사항을 확인하면 '왜 안 도는지' 헤매는 시간을 줄일 수 있습니다.
- 시간대(타임존): 크론은 대개 서버의 로컬 타임존을 따릅니다. 서버가 UTC라면 `0 0 * * *`는 한국 시간 오전 9시에 실행됩니다. 배포 환경의 타임존을 반드시 확인하세요.
- 필드 5개 vs 6개: 표준 유닉스 크론은 5개 필드지만, 일부 스케줄러(예: 스프링 @Scheduled, Quartz)는 맨 앞에 '초' 필드를 더한 6~7개 필드를 씁니다. 이 도구는 표준 5필드 기준입니다.
- 일·요일 동시 지정: 앞서 설명했듯 일 필드와 요일 필드를 둘 다 특정 값으로 지정하면 대부분 OR로 동작해, 의도보다 더 자주 실행될 수 있습니다.
- 30·31일과 2월: `0 0 31 * *`처럼 31일을 지정하면 31일이 없는 달에는 그달 실행이 건너뛰어집니다. '매월 말일'은 크론만으로 정확히 표현하기 어렵습니다.
자주 묻는 질문
- 크론 표현식의 필드 순서가 헷갈립니다.
- 왼쪽부터 '분 → 시 → 일 → 월 → 요일' 순서입니다. 즉 작은 시간 단위(분)에서 큰 단위(월)로 가다가 마지막에 요일이 붙는 구조로 기억하면 됩니다. 예를 들어 `30 14 * * *`는 분=30, 시=14이므로 '매일 오후 2시 30분'을 뜻합니다.
- 매일 자정에 실행하려면 어떻게 쓰나요?
- `0 0 * * *`입니다. 분=0, 시=0(자정), 나머지 일·월·요일은 `*`(모든 값)이므로 '매일 00시 00분'에 실행됩니다. 만약 매일 오전 9시라면 `0 9 * * *`처럼 시 필드만 9로 바꾸면 됩니다.
- 평일에만 실행하려면 요일 필드를 어떻게 쓰나요?
- 요일 필드에 `1-5`를 넣습니다. 1이 월요일, 5가 금요일이므로 `1-5`는 월요일부터 금요일까지를 뜻합니다. 예를 들어 평일 오전 9시는 `0 9 * * 1-5`입니다. 주말만 실행하려면 일요일과 토요일을 뜻하는 `0,6`을 씁니다.
- `*`와 `*/5`는 무엇이 다른가요?
- `*`는 해당 필드의 모든 값을 뜻합니다. 분 필드가 `*`이면 매 분 실행됩니다. `*/5`는 '5 단위마다'라는 뜻으로, 분 필드에 쓰면 0·5·10·15…분처럼 5분 간격으로 실행됩니다. 슬래시 뒤 숫자가 반복 간격입니다.
- `0 0 31 2 *`처럼 존재하지 않는 날짜를 넣으면 어떻게 되나요?
- 2월은 31일이 없으므로 그 조건은 영원히 성립하지 않아 실행되지 않습니다. 크론은 지정한 모든 필드가 맞아떨어질 때만 실행하므로, 존재하지 않는 날짜·요일 조합은 조용히 건너뜁니다. '매월 말일'처럼 달마다 날짜가 달라지는 규칙은 크론만으로는 정확히 표현하기 어렵습니다.
- 이 도구는 다음 실행 시각도 알려 주나요?
- 이 도구는 표현식을 한국어 설명으로 해석하는 데 초점을 둡니다. 즉 '언제 실행되는지'를 문장으로 풀어 주지만, 구체적인 다음 실행 날짜·시각 목록을 계산해 주지는 않습니다. 정확한 다음 실행 시각은 실제 스케줄러의 타임존 설정에 따라 달라지므로, 서버 환경에서 확인하는 것이 안전합니다.