본문으로 바로가기
반응형

Cron, 크론은 본래 유닉스 계열의 운영체제에서 시간 기반으로 잡 스케쥴링을 하는 후면 프로세스의 명칭이다. 이 때 잡 스케쥴링의 파라미터로 사용되는 표현식을 Cron 표현식이라고 한다. 유닉스나 리뉵스의 스케쥴링 작업에도 사용되지만, 자바 스프링 기반의 Quartz 등으로 서버 스케쥴러를 개발할 때에도 종종 사용된다.


[ Spring boot 에서 Quartz Scheduler, Cron을 사용한 스케쥴러 구현 : http://www.leafcats.com/93 ]


크론 표현식은 Job 스케쥴을 관리하거나 스케쥴러 개발을 할 때 필요한 순간마다 검색해서 사용하곤 했다. 사실 크론 표현식을 생성해주는 cronMaker와 같은 사이트에서 편하게 만들 수 있지만, 표현식을 읽을 수 있는것도 매우 중요하기 때문에 한번 정리해 두려고 한다.



Cron Expression


Cron 표현식은 7개로 구분된 단위 표현식으로 이루어진 String 문자열이다. 각각의 단위는 초/분/시 등으로 세분화되어 사용되며 각각의 단위는 공백(" ") 으로 구분된다. 아래 코드를 보면 한눈에 알 수 있다.


1. 가장 앞에 오는 단위는 초(Seconds)이다.

2. 두번째는 분(Minutes)을 나타낸다.

3. 세번째는 시(Hours)를 나타낸다.

4. 네번째는 일(Day-of-Month, DOM)을 나타낸다.

5. 다섯번째로 월(Month)에 대한 정보를 기술한다.

6. 여섯번째는 요일(Day of Week)을 나타낸다. 요일은 0~6의 숫자로 쓸 수도 있지만 "MON", "SUN"과 같이 요일의 약자로 사용할 수도 있다.

7. 마지막으로 일곱번째에는 연도(Year)가 온다. 연도는 optional이다.


- 와일드카드(*) 문자는 '매 번'을 의미한다. 

- 물음표(?) 는 '설정값 없음'을 나타낸다. 이는 일(DOM)과 요일(DOW)에만 사용할 수 있다.

- 슬래쉬(/) 는 값 증가 표현에 사용된다. 분(Minutes) 항목에 "10/15" 라고 쓴다면, "10분부터 시작해서 매 15분마다" 를 의미한다.

- 샾(#)은 k#N으로 사용되며, 이 달의 N번째 K요일을 의미한다. 요일(DOW) 항목에 "5#2" 라고 적는다면, "이 달의 두번째 목요일"을 뜻한다.

- 문자 "L" 은 마지막(Last)를 의미한다. L은 일(DOM)과 요일(DOW)에만 사용할 수 있다. 예를 들어 일(DOM)항목에 L이 사용된다면 단순하게 해당 월의 마지막 날을 의미한다. 조금 다른 방법으로도 사용되는데, 특정 값 뒤에 사용된다면 "이 달의 마지막 날"을 의미하게 된다. 예를들어 요일에 "6L"을 준다면, "이 달의 마지막 금요일" 을 의미하게 된다.

- 문자 "W"는 해당 날로부터 가장 가까운 평일(Weekday)을 의미한다. 예를 들어 일(DOM) 항목에 "10W"라고 준다면, "이 달의 10째 날로부터 가장 가까운 평일"을 의미한다.

- 각각의 단위는 범위나 목록으로 나타낼 수도 있다. 일(DOM)에 "1-15"라고 적는다면 1일부터 15일까지를 뜻한다.

- 각각의 항목은 항목에 유효한 값만이 들어올 수 있다. 예를 들어 일은 1 ~ 31 사이의 숫자만 허용되고, 시간은 0~23 사이의 시간만 허용한다.




Cron Expression Examples


위에 정리한 내용으로 만든 몇 가지 예제이다. 예제는 quart-scheduler.org의 tutorial-lesson에서 따왔다.


1. “0 0/5 * * * ?” : 매 시 5분마다 수행.

2. “10 0/5 * * * ?” : 10초 뒤 5분마다 수행.

3. “0 30 10-13 ? * WED,FRI” : 매 주 수요일과 금요일 10시~13시 30분에 수행.

4. “0 0/30 8-9 5,20 * ?” : 매 월 5일과 20일에 8시~9시대에 30분 간격으로 수행. (8:00, 8:30, 9:00, 9:30) 수행



사실 크론 표현식 자체가 어려운것은 아니지만 다소 혼동을 주는 표현들이 많다. 때문에 실제 업무에서 사용한다면, 직접 만들기 보다는 cronMaker와 같은 사이트를 사용해서 표현식을 만든 뒤에 검증하는 방법을 사용하는 것이 좋다.

반응형

 Other Contents