티스토리 뷰
반응형
최근에 개발자의 편의성이 스프링 부트의 탄생에 따라 많이 좋아졌다. 이전에는 제공하지 않았던 배치를 스프링 부트에서 제공하기 때문이다. 이번 글에서는 배치에서 사용하고 있는 것 중 스케줄링을 할 수 있는 Cron 표현식에 대해서 작성해보려고 한다.
Cron 표현식의 유래는 유닉스 계열의 잡 스케줄러에서부터 자주 사용하였다. 스프링 부트도 이와 마찬가지 방식을 채용하여 문자열 방식으로 서술하여 표현이 가능하다. 가장 기본적인 어노테이션은 @Scheduled으로 시작하는 것이다.
@Scheduled(cron = "0 0/5 * * * ?") // 5분마다 작동하는 배치 |
기본적인 포맷은 위와 같이 7개의 필드로 구성되어 있다. 앞에서부터 '초/분/시/일/월/요일/연도'의 순서이며 자세한 설명은 아래와 같다.
필드명 | 값의 허용 범위 | 허용된 특수문자 |
초(Seconds) | 0 ~ 59 | , - * / |
분(Minutes) | 0 ~ 59 | , - * / |
시(Hours) | 0 ~ 23 | , - * / |
일(Day) | 1 ~ 31 | , - * ? / L W |
월(Month) | 1 ~ 12 or JAN ~ DEC | , - * / |
요일(Week) | 1 ~ 7 or SUN ~ SAT | , - * ? / L W |
연도(Year) | empty or 1970 ~ 2099 | , - * / |
특수문자의 의미는 아래와 같다.
- * : 모든 값
- ? : 특정한 값이 없음
- - : 범위 (예를 들어, MON-THU는 월요일부터 목요일까지를 뜻한다.)
- , : 특별한 시점 (예를 들어, TUE,WED,FRI는 화/수/금마다 수행하겠다는 것을 뜻함)
- / : 시작시간 (예를 들어, 0/6은 0분부터 시작해서 매 6분마다 수행한다. 즉, 분 단위에 들어가면 6분/12분/18분/24분... 과 같이 6의 배수로 작동한다.)
- L : 일에서 사용하면 마지막 일을 뜻하며, 요일에서는 마지막 요일을 뜻한다(토요일)
- W : 가장 가까운 평일 (예를 들어, 15일에서 가장 가까운 평일을 찾는다면 15W로 표기한다.)
- # : 몇째주의 무슨 요일을 표현 (예를 들어, 4#3은 3번째주 목요일을 뜻하며, 6#1은 1번째주 토요일을 뜻한다.)
아래는 사용 예제이다.
크론 표현식 | 빈도 |
0 0/5 * * * ? | 5분마다 |
0 0 12 * * ? | 매일 낮 12시 |
0 15 10 ? * * | 매일 오전 10시 15분 0초 |
0 15 10/20 * * * | 매일 오전 10시 15분 0초, 오후 8시 15분 0초 |
0/30 * * * * * | 30초마다 |
0 30 10 * * ? 2019 | 2019년 매일 오전 10시 30분 |
0 * 12 * * ? | 매일 12시 정오에 시작하여 매분마다 실행하고 12시 59분에 종료 |
0 15 14 ? 3 THU | 3월 매주 목요일 오후 2시 15분 |
0 20 10 L * ? | 매월 말일 오전 10시 20분 |
그리고 크론 표현식을 생성해주는 사이트도 있으니 명확히 떠오르지 않는다면 사용하는 것도 좋을 듯하다.
링크 : http://www.cronmaker.com/
배치를 사용하는 이유는 매 시간마다 개발자가 등록하고 수행할 수 없는 일을 대신 처리해주기 때문이다.
쉽게 말해 자동화시스템의 기본 원리이고, 개발자가 지시한 시간에 맞추어 컴퓨터가 자동으로 작동하는 것이기 때문에
Cron 표현식을 사용해서 스케줄링을 하는 것이 최선이라고 생각한다.
참고 : https://en.wikipedia.org/wiki/Cron#CRON_expression
반응형
'Server' 카테고리의 다른 글
Firebase 알아보기 (0) | 2020.04.07 |
---|---|
[Java] Model과 Lombok(Builder) (0) | 2020.02.12 |
[Java] MultipartFile 를 이용하여 파일 업로드하기 (0) | 2020.01.28 |
SQL에 대해 알아보자 (0) | 2019.12.15 |
[Java] 날짜 생성/변환 (0) | 2019.12.06 |
[Java] 엑셀 변환 (0) | 2019.12.03 |
댓글
공지사항