본문으로 건너뛰기
LeedyBox
후원

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필드 형식으로 다시 작성하세요.

해석기가 보여 주는 다음 실행 시각은 정확한가요?

선택한 형식과 시간대를 기준으로 브라우저에서 계산한 값입니다. 구현마다 다를 수 있으므로 작업을 실행할 시스템에서 일정을 확인하세요.