소개
이 블로그에서는 스프링 프레임워크에서 제공하는 org.springframework.scheduling.annotation을 이용한 스케줄러 Cron 사용법에 대해 자세히 알아보겠습니다. 스케줄러 Cron은 정기적으로 반복되는 작업을 자동으로 처리할 수 있는 강력한 도구로, 이를 통해 개발자들은 반복적이고 예약된 작업을 효율적으로 관리할 수 있습니다.
스케줄러 Cron이란?
스케줄러 Cron은 정기적인 작업을 예약하고 실행할 수 있는 방법 중 하나입니다. 특히, 특정 시간에 주기적으로 반복되는 작업이 필요한 경우에 유용하게 활용됩니다. 스프링에서는 이러한 스케줄링을 쉽게 구현할 수 있도록 @Scheduled
어노테이션을 제공하고 있습니다.
사용법
1. 의존성 추가
먼저, 스케줄러 Cron을 사용하기 위해서는 프로젝트에 스프링 스케줄링 모듈의 의존성을 추가해야 합니다. Maven을 사용하는 경우, 아래와 같이 의존성을 추가할 수 있습니다.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
2. @EnableScheduling 추가
@Scheduled
어노테이션을 사용하려면 스케줄링을 활성화하는 어노테이션인 @EnableScheduling
을 설정 클래스에 추가해야 합니다.
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;
@Configuration
@EnableScheduling
public class SchedulerConfig {
// 스케줄링 관련 설정
}
3. @Scheduled 어노테이션 사용
이제 스케줄링할 메서드에 @Scheduled
어노테이션을 추가합니다.
import org.springframework.scheduling.annotation.Scheduled;
public class MyScheduledTask {
@Scheduled(cron = "0 0 1 * * ?", zone = "Asia/Seoul") // 매일 1시에 실행, Asia/Seoul 시간대
public void performTask() {
// 스케줄링할 작업 내용
System.out.println("Scheduled task executed!");
}
}
위의 예시에서 사용된 @Scheduled(cron = "0 0 1 * * ?", zone = "Asia/Seoul")
부분은 cron 표현식과 함께 zone
옵션을 사용하여 특정 시간대에서 스케줄링되도록 설정되어 있습니다.
cron 표현식 설명
cron 표현식은 6개의 필드로 구성되며 각 필드는 해당 시간 단위의 정보를 나타냅니다.
- 초 (Seconds): 0부터 59까지의 값을 가집니다.
- 분 (Minutes): 0부터 59까지의 값을 가집니다.
- 시 (Hours): 0부터 23까지의 값을 가집니다.
- 일 (Day of month): 1부터 31까지의 값을 가집니다.
- 월 (Month): 1부터 12까지의 값을 가집니다.
- 요일 (Day of week): 0부터 6까지의 값을 가집니다. (0이 일요일, 1이 월요일, …, 6이 토요일)
위의 예시에서 0 0 1 * * ?
는 매월 1일 0시 0분에 실행하라는 의미입니다.
zone 옵션 설명
zone
옵션은 스케줄러가 실행될 때 사용할 타임존을 지정하는데 사용됩니다. 위의 예시에서는 zone = "Asia/Seoul"
로 설정하여 Asia/Seoul 시간대에서 스케줄링되도록 했습니다.
예시
이제 구체적인 예시를 통해 실제로 어떻게 사용하는지 살펴보겠습니다.
예시: 주기적인 데이터 정리 작업
가령, 매주 일요일 새벽 3시에 데이터베이스에서 오래된 데이터를 정리하는 작업을 스케줄링하고 싶다고 가정해봅시다.
import org.springframework.scheduling.annotation.Scheduled;
import java.util.Date;
public class DataCleanupTask {
@Scheduled(cron = "0 0 3 * * SUN", zone = "Asia/Seoul") // 매주 일요일 새벽 3시에 실행, Asia/Seoul 시간대
public void cleanUpOldData() {
// 데이터 정리 작업 수행
System.out.println("Cleaning up old data at " + new Date());
}
}
위의 코드에서는 @Scheduled
어노테이션을 이용하여 주기적으로 실행될 메서드를 정의하고, cron 표현식을 사용하여 매주 일요일 새벽 3시에 실행되도록 설정했습니다. 또한, zone
옵션을 이용하여 Asia/Seoul 시간대에서 동작하도록 했습니다.
마무리
이제 여러분은 스프링의 스케줄러 Cron을 사용하는 기본적인 방법과 실제 예시에 대해 알게 되었습니다. 이를 통해 주기적으로 실행되어야 하는 작업을 자동화하여 개발 생산성을 향상시킬 수 있습니다. 필요에 따라 다양한 cron 표현식과 타임존을 사용하여 자신의 스케줄링 요구사항에 맞게 설정해보세요!