CS/기타

안쓰면 자꾸 헷갈리는 Cron 표현식 정리하기

Joonfluence 2025. 5. 22.

Cron 표현식 정리

Cron 표현식은 주기적으로 작업을 예약할 때 사용하는 문자열 포맷으로, 각 필드는 특정 시간 단위를 의미합니다. 주요 사용 예는 리눅스의 cron, 각종 클라우드 스케줄러, 백엔드 작업 예약 등입니다.

기본 구조 및 필드

일반적으로 Cron 표현식은 5~7개의 필드로 구성됩니다. 가장 널리 쓰이는 5필드 형식은 다음과 같습니다.

필드 순서 필드명 허용 값 설명
1 분 (Minute) 0-59 몇 분에 실행할지
2 시 (Hour) 0-23 몇 시에 실행할지
3 일 (Day) 1-31 매월 며칠에 실행할지
4 월 (Month) 1-12 또는 JAN-DEC 몇 월에 실행할지
5 요일 (Day of week) 0-6 또는 SUN-SAT 무슨 요일에 실행할지 (0/7: 일요일)

일부 시스템(Quartz 등)은 초(Seconds)와 연(Year) 필드를 추가해 6~7필드까지 지원합니다.

필드 순서 필드명 허용 값
0 초 (Seconds) 0-59
6 연 (Year) 1970-2099

특수문자와 의미

  • * : 모든 값 (예: * * * * * → 매 분마다)
  • , : 여러 값 지정 (예: MON,WED,FRI)
  • - : 범위 지정 (예: 1-5 → 1~5)
  • / : 주기 지정 (예: */10 → 10분마다)
  • ? : 특정 값 없음 (주로 일/요일 필드 중 하나에 사용, Quartz 등)
  • L : 마지막 (예: L → 마지막 날/요일)
  • W : 가장 가까운 평일 (예: 15W → 15일에 가장 가까운 평일)
  • # : 몇 번째 무슨 요일 (예: 6#3 → 매월 세 번째 금요일)

예시와 해석

표현식 의미
* * * * * 매 분마다
0 * * * * 매 시 정각
0 0 * * * 매일 0시 정각
0 0 1 * * 매월 1일 0시 정각
*/5 9-17 * * 1-5 평일(월~금) 9~17시 사이 5분마다
0 0/10 * * * ? 매 10분마다
0 15 10 * * ? 매일 10시 15분
0 15 10 L * ? 매월 마지막 날 10시 15분
0 15 10 ? * 6L 매월 마지막 금요일 10시 15분
0 15 10 ? * 6#3 매월 세 번째 금요일 10시 15분
0 0 12 1/5 * ? 매월 1일부터 5일 간격으로 12시 정각
0 11 11 11 11 ? 매년 11월 11일 11시 11분

참고/주의사항

  • 월(Month)과 요일(Day of week)은 영문(대소문자 구분 없음)으로도 지정 가능 (예: JAN, MON)
  • 일(Day)과 요일(Day of week) 필드는 동시에 지정할 수 없으며, 한쪽에는 ?를 사용
  • 일부 시스템에서는 초(Seconds)와 연(Year) 필드가 필요하거나 지원되지 않을 수 있음
  • 요일은 시스템에 따라 일요일이 0 또는 7로 표기될 수 있음

실전 활용 팁

  • */n : n분/시간/일/월/요일마다 실행
  • a,b,c : 여러 특정 값 지정
  • a-b : 범위 지정
  • a-b/n : a~b 범위 내에서 n 간격
  • L, W, # 등은 Quartz 등 일부 엔진에서만 지원

예시로 보는 차이점

  • * 10 * * * ? : 매 시각 10분 (1:10, 2:10, ...)
  • 0/10 * * * ? : 10분마다 (1:10, 1:20, 1:30, ...)

대표적인 사용 예시

  • 매일 자정: 0 0 * * *
  • 매월 1일: 0 0 1 * *
  • 매주 월요일 9시: 0 9 * * 1
  • 매 5분마다: */5 * * * *
  • 평일 오전 8~10시 매 10분: */10 8-10 * * 1-5

이와 같이 Cron 표현식은 반복 작업을 자동화하는 데 매우 강력하게 활용됩니다. 복잡한 스케줄도 다양한 특수문자와 필드 조합으로 쉽게 표현할 수 있습니다.

반응형

댓글