Cron 표현식 읽는 방법
cron 표현식은 공백으로 구분한 몇 개의 필드로 반복 일정을 나타냅니다. 개념은 단순하지만 필드 순서와 특수문자는 시스템마다 다릅니다. 이 가이드에서는 자주 쓰는 형식을 읽는 방법을 설명합니다.
Unix의 다섯 필드
전통적인 Unix·Linux cron은 왼쪽에서 오른쪽으로 읽는 다섯 개의 필드를 사용합니다.
분 시 일 월 요일
따라서 30 9 * * 1-5는 "월요일부터 금요일까지 09:30에"라는 뜻입니다. 분은 0~59, 시는 0~23, 일은 1~31, 월은 1~12입니다. 요일은 0~6이며 0이 일요일입니다(많은 구현에서 일요일로 7도 허용합니다). 대부분의 버전은 JAN이나 MON 같은 이름과 @daily, @hourly 같은 매크로도 받아들입니다.
Spring, Quartz, AWS 형식
다른 스케줄러는 필드를 추가하는데, 이것이 한 시스템의 표현식을 다른 시스템으로 복사할 때 가장 흔히 혼란이 생기는 원인입니다.
| 형식 | 필드 | 요일 |
|---|---|---|
| Unix / Linux | 5개: 분 시 일 월 요일 | 0–6, 일요일 = 0 |
| Spring | 6개: 초 분 시 일 월 요일 | 0–7, 일요일 = 0 또는 7 |
| Quartz | 6개 또는 7개: 초 분 시 일 월 요일 [연도] | 1–7, 일요일 = 1 |
| AWS EventBridge | 6개: 분 시 일 월 요일 연도 | 1–7, 일요일 = 1 |
같은 숫자도 의미가 달라질 수 있습니다. 0 0 12 * * ?는 Quartz에서 "매일 정오"이지만, 5필드 형식으로 읽으면 올바른 표현식이 아닙니다. 요일 번호도 어긋납니다. Quartz와 AWS에서 2는 월요일이지만 Unix cron에서는 화요일입니다. 지원되는 곳에서는 MON 같은 요일 이름을 쓰면 이런 모호함을 피할 수 있습니다.
특수문자
*필드의 모든 값.,목록. 예:1,15-범위. 예:9-17또는MON-FRI/간격. 분 필드의*/15는 15분마다를 뜻하고,5/15는 5분부터 시작합니다(전통적인 Unix cron에서는 지원하지 않으며, 대신5-59/15같은 범위를 씁니다).?"지정 안 함". Quartz와 AWS에서는 일 또는 요일 필드 중 하나에 반드시 있어야 합니다.L마지막. 일 필드의L은 그달의 마지막 날이고, Quartz의 요일 필드에서6L은 마지막 금요일입니다.W가장 가까운 평일.15W는 15일에 가장 가까운 평일입니다.#그달의 N번째 요일. Quartz와 AWS 번호 체계에서6#3은 셋째 금요일입니다.
L, W, #은 전통적인 Unix cron이 지원하지 않는 확장 기능입니다.
일 필드와 요일 필드
두 날짜 필드가 모두 제한되어 있을 때 이를 어떻게 결합할지는 시스템마다 다릅니다. 전통적인 Unix cron에서는 둘 중 하나만 맞아도 작업이 실행됩니다. 0 9 13 * 5는 13일의 금요일에만이 아니라 매월 13일과 매주 금요일에 실행됩니다. Spring은 두 필드가 모두 맞아야 합니다. Quartz와 AWS는 두 필드 중 하나에 ?를 요구해 이 문제를 피합니다.
LeedyBox Cron 해석기는 선택한 형식의 규칙을 적용하며, 요약에서 두 날짜 중 하나만 맞으면 되는지 둘 다 맞아야 하는지 설명합니다.
시간대와 서머타임
cron 표현식에는 시간대가 들어 있지 않습니다. 표현식은 이를 실행하는 시스템이나 서비스의 시간대에서 실행되며, 이는 서버의 현지 시간일 수도 있고 UTC일 수도 있습니다. 현지 시간 09:00을 기준으로 작성한 작업도 서버가 UTC를 쓰면 다른 시각에 실행될 수 있습니다.
서머타임(일광 절약 시간)은 경계 상황을 더 만듭니다. 시계를 앞당기는 날에는 02:30 같은 시각이 존재하지 않을 수 있고, 시계를 되돌리는 날에는 두 번 나타날 수 있습니다. 구현에 따라 그 구간의 작업은 건너뛰거나, 늦게 실행되거나, 두 번 실행될 수 있습니다. 중요한 작업을 전환 구간 밖이나 UTC 기준으로 예약하면 예상치 못한 일을 줄일 수 있습니다. Cron 해석기에서는 시간대를 고르고 다음 실행 시각 목록을 보면서 전환 전후의 날짜를 확인할 수 있습니다.
자주 묻는 질문
작업을 5분마다 실행하려면 어떻게 하나요?
Unix cron에서는 */5 * * * *를 씁니다. Spring에서는 맨 앞에 초 필드를 추가해 0 */5 * * * *로 씁니다.
Quartz 표현식이 왜 Linux crontab에서 동작하지 않나요?
Quartz 표현식은 초 필드로 시작하고 ?나 L을 쓸 수 있는데, crontab은 이를 받아들이지 않습니다. 표현식을 5필드 형식으로 다시 작성하세요.
해석기가 보여 주는 다음 실행 시각은 정확한가요?
선택한 형식과 시간대를 기준으로 브라우저에서 계산한 값입니다. 구현마다 다를 수 있으므로 작업을 실행할 시스템에서 일정을 확인하세요.