Cron 표현식의 구성 요소와 작동 원리
Cron 표현식은 유닉스 계열 운영체제 및 다양한 작업 스케줄러에서 특정 시간에 작업을 자동으로 실행하기 위해 사용하는 문자열 형식의 규격입니다. 이 도구는 입력된 cron 표현식을 개별 구성 요소로 분해하여 각 필드가 의미하는 바를 명확하게 보여주고, 향후 해당 스케줄이 실행될 시간 목록을 계산하여 표시합니다.
표준 cron 표현식은 공백으로 구분된 5개의 필드로 구성됩니다. 각 필드는 왼쪽부터 순서대로 다음과 같은 의미를 가집니다:
- 분 (Minute): 작업을 실행할 분을 지정합니다.
- 시 (Hour): 작업을 실행할 시간을 지정합니다.
- 일 (Day of month): 작업을 실행할 날짜를 지정합니다.
- 월 (Month): 작업을 실행할 월을 지정합니다.
- 요일 (Day of week): 작업을 실행할 요일을 지정합니다.
이 도구는 표준 5필드 구문을 지원하며, 초(second) 단위를 지정하는 여섯 번째 필드나 L, W, #과 같은 Quartz 전용 확장 규격은 지원하지 않습니다.
지원하는 입력 형식 및 특수 기호
Cron 표현식 파서는 다음과 같은 다양한 형식과 특수 기호를 해석할 수 있습니다:
- 와일드카드 (
*): 해당 필드의 모든 값을 의미하며, 분석 결과에는 "매 (Any)"로 표시됩니다. - 범위 (
-): 특정 시작 값부터 종료 값까지의 범위를 지정합니다 (예:1-5). - 단계 (
/): 특정 간격으로 실행 주기를 지정합니다 (예:*/15). 이 형식은 필드에 따라 "{n}분마다", "{n}시간마다", "{n}일마다", "{n}개월마다" 등으로 변환되어 표시됩니다. - 목록 (
,): 실행할 특정 값들을 나열합니다 (예:1,15). - 영문 이름: 월 필드에는
JAN과 같은 영문 월 이름을, 요일 필드에는MON과 같은 영문 요일 이름을 사용할 수 있습니다. - 단축키: 개별 필드를 직접 작성하는 대신
@yearly,@monthly,@weekly,@daily,@hourly와 같은 표준 단축 표현식을 입력할 수 있습니다.
예를 들어, */15 9-17 * * MON-FRI와 같은 표현식을 입력하면 월요일부터 금요일까지, 매일 9시부터 17시 사이에 15분 간격으로 실행되는 스케줄로 정확히 분석됩니다.
스케줄 분석 시 주의해야 할 규칙 및 예외 처리
Cron 스케줄을 작성할 때는 몇 가지 독특한 규칙과 예외적인 상황을 고려해야 합니다.
일(Day of month)과 요일(Day of week)의 상호작용
가장 주의해야 할 규칙 중 하나는 일 필드와 요일 필드가 동시에 제한될 때의 동작 방식입니다. 두 필드가 모두 와일드카드(*)가 아닌 특정 값으로 제한되어 있는 경우, 두 조건 중 하나만 만족해도 스케줄이 실행됩니다. 즉, 지정된 날짜이거나 지정된 요일일 때 작업이 수행됩니다.
실행 불가능한 스케줄 오류
입력한 cron 표현식이 문법적으로는 유효하더라도, 논리적으로 결코 발생할 수 없는 스케줄을 나타내는 경우가 있습니다. 예를 들어, 월 필드에 4월, 6월, 9월, 11월을 지정하고 일 필드에 31일을 입력하면, 해당 월들에는 31일이 존재하지 않으므로 스케줄이 실행될 수 없습니다. 이 경우 도구는 "이 스케줄은 절대로 실행될 수 없습니다. 선택한 모든 월에 존재하지 않는 일(day)이 지정되었는지 확인해 주세요."라는 오류 메시지를 출력합니다.
문법 자체가 잘못된 표현식을 입력했을 때는 "유효하지 않은 cron 표현식입니다."라는 메시지가 표시되며, 입력창이 비어 있는 경우에는 초기 대기 상태인 "파싱할 cron 표현식을 입력하세요." 상태로 돌아갑니다.
시간대 적용 및 로컬 브라우저 처리 방식
이 도구는 사용자의 개인정보 보호와 빠른 성능을 위해 입력된 cron 표현식을 외부 서버로 전송하지 않고 사용자의 브라우저 내에서 직접 파싱합니다. BroBroGo로 어떠한 데이터도 업로드되지 않으므로 안심하고 스케줄을 검증할 수 있습니다.
스케줄 분석 결과로 제공되는 '다음 실행 예정 시간' 목록은 사용자가 현재 사용 중인 브라우저의 로컬 시간대를 기준으로 계산되어 표시됩니다. 화면에 표시할 실행 횟수는 최소 1회에서 최대 20회까지 수치 입력을 통해 조절할 수 있습니다. 실제 서버 환경에서 cron 작업을 등록할 때는 서버의 시스템 시간대 설정과 브라우저의 로컬 시간대가 일치하는지 확인하는 것이 중요합니다.
자주 묻는 질문 (FAQ)
Q. 이 도구는 어떤 cron 구문을 지원하나요?
A. 분, 시간, 일, 월, 요일로 구성된 표준 5필드 cron을 지원합니다. 범위(1-5), 단계(*/15), 목록(1,15), 영문 월 및 요일 이름(JAN, MON) 및 @yearly/@monthly/@weekly/@daily/@hourly 단축키를 포함합니다. 주의할 점: 일(day-of-month)과 요일(day-of-week)이 모두 제한된 경우(둘 다 *이 아님), 둘 중 하나만 일치해도 실행됩니다.
Q. 다음 실행 시간은 어떤 시간대로 표시되나요?
A. 사용자 브라우저의 로컬 시간대(시스템 시계와 동일한 시간대) 기준입니다. 표준 cron은 자체 시간대 정보를 가지지 않으며 이를 실행하는 작업 스케줄러가 시간대를 결정하므로, 이 실행 시간은 서버가 아닌 로컬 스케줄의 미리보기로 참고해 주세요.
Q. 이 스케줄이 절대로 실행될 수 없다고 표시되는 이유는 무엇인가요?
A. 일반적으로 선택한 모든 월에 존재하지 않는 '일' 값을 지정했을 때 발생합니다. 예를 들어 월 필드에 4월, 6월, 9월, 11월을 지정하고 일 필드에 31일을 입력한 경우입니다. 나열된 모든 월에 존재하는 일을 선택하거나 스케줄을 별도의 표현식으로 분할해 주세요.
Q. 초(Second) 단위나 연도 필드가 포함된 6필드 표현식도 분석할 수 있나요?
A. 아니요, 이 도구는 표준 5필드 cron 구문만을 지원하며, 초 단위를 지정하는 여섯 번째 필드나 Quartz 스케줄러 등에서 사용하는 특수 확장 문자(L, W, # 등)는 지원하지 않습니다.