cron 표현식 해석기
0 */6 * * 1-5가 실제로 언제 실행되는지 날짜 목록으로, 각 칸이 허용하는 값과 함께 보여 줍니다.
출력
위에 붙여넣거나 입력하면 여기에 결과가 표시됩니다.
파일은 내 기기 밖으로 나가지 않습니다
이 도구는 브라우저 안에서만 작동합니다. 붙여넣은 내용은 기기에서 처리되고 서버로 전송되지 않으므로 토큰, 키, 공개 전 문서도 안심하고 사용할 수 있습니다.
사용 예시
예: UTC 서버에서 한국 시간 평일 오전 9시 — 0 9 * * 1-5와 0 0 * * 1-5
사내 알림 배치를 평일 오전 9시(한국 시간)에 돌리려 합니다. 이 페이지는 브라우저 시간대로 계산하므로 한국에서 열면 목록 맨 위에 Asia/Seoul이 표시됩니다. 목록은 항상 지금부터 계산되며, 아래 날짜는 2026년 10월 30일 금요일 정오를 기준으로 실행 횟수 12로 구한 것입니다.
- 0 9 * * 1-5를 넣으면 2026년 11월 2일 월요일 오전 9:00부터 6일 금요일까지, 그다음 9일 월요일로 이어집니다. 토요일과 일요일은 목록에 없습니다.
- 스프링 @Scheduled에 쓰는 여섯 자리 0 0 9 * * MON-FRI도 첫 칸을 초로 읽어 같은 목록이 나옵니다.
- 서버의 cron이 UTC로 돈다면 한국 시간에서 9시간을 빼야 합니다. 오전 9시는 UTC 0시이므로 서버에는 0 0 * * 1-5. 여기에 넣으면 ‘오전 12:00’으로 보이는데, 이것이 서버 시계이고 한국 시간으로는 오전 9시입니다.
- UTC로 바꾸면 전날이 되는 시각은 요일도 하루 당깁니다. 한국 시간 월~금 오전 8시는 0 23 * * 0-4(일~목 23시)이고, 목록 첫 줄은 11월 1일 일요일 오후 11:00입니다.
| 표현식 | 2026년 10월 30일(금) 정오 이후 실행 | 뜻 |
|---|---|---|
| 0 9 * * 1-5 | 11월 2일(월)~6일(금), 9일(월)… 오전 9:00 | 평일 오전 9시 |
| 0 0 9 * * MON-FRI | 위와 같음 | 초가 맨 앞인 스프링·Quartz 형식 |
| 0 10 25 * * | 11월 25일(수), 12월 25일(금), 2027년 1월 25일(월) 오전 10:00 | 매월 25일, 주말이어도 실행(2027년 4월 25일은 일요일) |
| 0 9 1-7 * MON | 11월 1일(일)~7일(토) 매일, 9·16·23·30일(월), 12월 1일(화) | 1~7일 ‘또는’ 월요일: 첫째 월요일이 아님 |
| 0 9 28-31 * * | 10월 31일, 11월 28·29·30일, 12월 28~31일 | 말일 대신 쓰는 범위(아래 참고) |
| 0 9 L * * | "L"의 값이 올바르지 않습니다 | 말일 L은 Quartz 확장이라 읽지 않음 |
| 0 0 31 2 * | // 다음 0회 실행 | 2월 31일은 오지 않음 |
날짜 목록으로 보면 ‘평일만’, ‘25일만’ 같은 의도가 맞는지 바로 드러납니다. 매월 말일이 필요하면 0 9 28-31 * * 로 두고 명령 앞에 [ "$(date -d tomorrow +\%d)" = 01 ] && 를 붙이세요. 내일이 1일인 날, 곧 말일에만 실행됩니다(리눅스 GNU date 기준, crontab에서는 %를 \%로 적습니다).
사용 방법
- 분, 시, 일, 월, 요일 다섯 자리로 된 cron 표현식을 붙여 넣으세요. 예를 들어 30 2 * * 0은 매주 일요일 02시 30분에 실행됩니다.
- 앞으로의 실행 시각을 몇 개까지 볼지 1에서 20 사이로 정하세요.
- 입력하는 대로 결과가 나옵니다. "2026년 10월 25일 일요일 오전 2:30" 같은 날짜로 실행 시각 목록이 나오고, 그 아래에 각 칸이 허용하는 값이 나옵니다.
- 날짜가 의도한 것과 맞는지 비교하세요. 요일이나 간격 값을 하나 잘못 쓴 실수는 목록에서 바로 드러납니다.
자주 묻는 질문
- 다음 실행 시각은 어느 시간대 기준인가요?
- 브라우저의 로컬 시간대, 즉 운영체제 설정에 표시된 시간대로 계산합니다. 서버의 cron은 보통 UTC나 서버에 설정된 시간대로 돌기 때문에, 운영 일정과 비교할 때는 그만큼 시간을 옮겨서 보세요.
- 어떤 문법을 지원하나요?
- 표준 다섯 자리 형식과 모든 값을 뜻하는 *, 쉼표 목록(1,15), 범위(1-5), 간격(*/10 또는 1-30/5), 월(JAN-DEC)과 요일(SUN-SAT)의 세 글자 이름을 지원합니다. 0과 7은 모두 일요일입니다. @hourly, @daily, @weekly, @monthly, @yearly 같은 특수 문자열은 대응하는 다섯 자리 형식으로 펼쳐집니다.
- 일(day of month)과 요일(day of week)은 어떻게 조합되나요?
- Vixie cron과 동일합니다. 두 칸이 모두 제한되어 있으면(둘 다 *가 아니면) 둘 중 하나만 맞아도 실행됩니다. 그래서 0 0 1 * MON은 매월 1일과 매주 월요일에 모두 실행됩니다. 많은 사람이 놓치는 부분이니 다음 실행 목록을 꼭 확인하세요.
- 초나 연도 칸도 지원하나요?
- 여섯 자리 표현식은 Quartz와 스프링처럼 첫 칸을 초로 읽습니다. 초는 버리고 나머지 다섯 칸으로 실행 시각을 계산하므로 0 0 12 * * ?는 매일 12:00에 실행됩니다(?는 *로 읽습니다). 예외는 분이 맨 앞, 연도가 맨 뒤에 오는 AWS EventBridge 형식으로, 일이나 요일 칸에 ?가 있는 것으로 알아봅니다. 0 12 * * ? *도 매일 12:00에 실행되며 연도는 다른 칸 아래에 표시됩니다. Quartz의 여섯 칸 뒤에 오는 일곱 번째 칸은 연도로 읽습니다.
- 매월 말일에 실행하려면 어떻게 쓰나요?
- 표준 cron에는 말일 기호가 없고, Quartz의 L을 넣으면 "L"의 값이 올바르지 않습니다라고 나옵니다. 0 9 28-31 * * 로 28~31일에 돌게 한 뒤, 명령 앞에 [ "$(date -d tomorrow +\%d)" = 01 ] && 를 붙여 내일이 1일인 날에만 실제로 실행되게 하는 방법이 흔히 쓰입니다(리눅스 GNU date 기준).
- 한국 시간 기준 일정을 UTC 서버 crontab에 쓰려면?
- 한국은 UTC+9이고 서머타임이 없으니 시에서 9를 빼면 됩니다. 오전 9시는 0, 오후 6시는 9입니다. 오전 0~8시처럼 빼면 음수가 되는 시각은 24를 더하고 요일과 날짜를 하루 앞으로 당기세요. 한국 시간 월~금 오전 8시는 UTC 일~목 23시, 곧 0 23 * * 0-4입니다.
- 표현식이 서버로 전송되나요?
- 아니요. 해석과 날짜 계산 모두 브라우저 안에서 이루어집니다. 업로드할 것도, 기록될 것도 없습니다.