티스토리 뷰

Server

[Java] Cron 표현식

니용 2019. 12. 19. 11:49
반응형

최근에 개발자의 편의성이 스프링 부트의 탄생에 따라 많이 좋아졌다. 이전에는 제공하지 않았던 배치를 스프링 부트에서 제공하기 때문이다. 이번 글에서는 배치에서 사용하고 있는 것 중 스케줄링을 할 수 있는 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/

 

CronMaker

 

www.cronmaker.com


배치를 사용하는 이유는 매 시간마다 개발자가 등록하고 수행할 수 없는 일을 대신 처리해주기 때문이다.

쉽게 말해 자동화시스템의 기본 원리이고, 개발자가 지시한 시간에 맞추어 컴퓨터가 자동으로 작동하는 것이기 때문에 

Cron 표현식을 사용해서 스케줄링을 하는 것이 최선이라고 생각한다.  

 

 

참고 : https://en.wikipedia.org/wiki/Cron#CRON_expression 

 

cron - Wikipedia

From Wikipedia, the free encyclopedia Job scheduler for Unix-like operating systems The cron command-line utility is a job scheduler on Unix-like operating systems. Users who set up and maintain software environments use cron to schedule jobs[1] (commands

en.wikipedia.org

 

반응형

'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
댓글
공지사항