[SPRINGBOOT] 스케줄링

728x90

1. 스케줄링의 의미

 

스케줄링이란 작업이 특정 시간 또는 주기에 따라 자동으로 실행되도록 예약하는 기술입니다. 이를 통해 애플리케이션은 정기적인 작업이나 배치 프로세스를 관리하거나, 특정 시간에 이벤트를 자동으로 트리거할 수 있습니다.

 

2. 애노테이션 입력하기

프로젝트application 자바파일에 @EnableScheduling을 추가합니다.

 

스케줄링을 사용할 자바파일에 @Component을 추가합니다.

 

사용할 메서드에 @Scheduled을 추가합니다.

 

3. 속성

1) fixedDelay

 fixedDelay 속성은 밀리초 단위의 값을 받으며, 이전 작업이 종료된 후 지정된 시간만큼 딜레이된 후 다음 작업이 실행됩니다. 예를 들어, @Scheduled(fixedDelay = 5000)으로 설정하면 현재 작업이 끝난 후 5초 후에 다음 작업이 실행됩니다.

 

2) fixedRate

fixedRate 속성의 값은 밀리초 단위로 작업 간격을 나타냅니다. 예를 들어, @Scheduled(fixedRate = 5000)으로 설정하면 5초마다 작업이 실행됩니다.fixedDelay 와의 차이는 이전 작업의 시작 시간과 상관없이 5초마다 작업이 실행된다는 것입니다. 따라서 이전 작업이 아직 끝나지 않아도 주기적으로 실행되므로, 작업의 수행 시간이 길어지면 작업이 겹칠 수 있는 점에 주의해야 합니다.

 

3) initialDelay

initialDelay 속성의 값은 밀리초 단위로, 작업을 시작하기 전에 기다리는 시간을 나타냅니다. 예를 들어, @Scheduled(initialDelay = 3000,fixedRate = 5000)으로 설정하면 처음 작업이 실행되기 전에 3초 동안 대기하고, 그 후에는 5초마다 작업이 실행됩니다

 

4) timeUnit

timeUnit 속성은 java.util.concurrent.TimeUnit 열거형 상수를 사용하여 지정하며, 다양한 시간 단위를 제공합니다. 주로 사용되는 값은 다음과 같습니다:

  • TimeUnit.MILLISECONDS: 밀리초
  • TimeUnit.SECONDS: 초
  • TimeUnit.MINUTES: 분
  • TimeUnit.HOURS: 시간

예를 들면 @Scheduled(fixedRate = 5, timeUnit = TimeUnit.SECONDS) 으로 설정하면 5초마다 실행됩니다.

 

5) Zone

zone 속성은 java.util.TimeZone나 타임존 ID 문자열을 사용하여 지정할 수 있습니다. TimeZone 객체를 직접 지정하거나 타임존 ID 문자열을 사용하여 작업을 해당 시간대에서 실행할 수 있습니다.

예를 들어 @Scheduled(fixedRate = 5000, zone = "America/New_York") 으로 설정하면 뉴욕 시간대로 5초마다 실행됩니다.

 

 

6) cron

 

cron @Scheduled 어노테이션에서 사용되는 속성 중 하나로, 크론 표현식을 사용하여 주기적인 작업을 스케줄링하는 데 사용됩니다. 크론 표현식은 시간 기반 작업 스케줄링을 정밀하게 제어하는 방법 중 하나로, 특정 시간, 요일, 월 등을 지정하여 작업을 실행할 시간을 설정할 수 있습니다.

 

크론 표현식은 다음과 같은 형식으로 구성됩니다:

//    0-59  0-59  0-23  1-31  1-12 요일 1-7 년(옵션) 1970-2099
//   * : 모든 
//   ? : 특정  없음
//   - : 범위 지정에 사용
//   , : 여러  지정 구분에 사용
//   / : 초기값과 증가치 설정에 사용
//   L : 지정할  있는 범위의 마지막 
//   W : 월~금요일 또는 가장 가까운 월/금요일
//   # : 몇 번째 무슨 요일 2#1 => 첫 번째 월요일

초 (0-59) 분 (0-59) 시 (0-23) 일 (1-31) 월 (1-12 또는 JAN-DEC) 요일 (0-6 또는 SUN-SAT)

 

예를 들어 @Scheduled(cron = "0 0 * * * *")으로 설정하면 매 시간 정각에 실행합니다.