Spring 애플리케이션에서는 종종 정해진 시간에 자동으로 실행되는 작업이 필요합니다. 예를 들어, 매일 자정에 로그를 정리하거나, 10분마다 외부 API에서 데이터를 수집하는 작업이 있을 수 있죠. 이럴 때 유용하게 사용할 수 있는 기능이 바로 @Scheduled 애노테이션입니다.
이번 글에서는 Spring 스케줄링 작업 처리 방법과 @Scheduled를 활용한 다양한 예제를 중심으로 알아보겠습니다.
<h2>Spring에서 스케줄링을 사용하려면?</h2>
Spring에서는 @Scheduled 애노테이션을 통해 간단하게 스케줄링 작업을 정의할 수 있습니다.
다만, 사용 전 반드시 설정해야 할 사항이 있습니다.
1. @EnableScheduling 활성화
스케줄링 기능은 기본적으로 비활성화되어 있으므로, 설정 클래스에 @EnableScheduling 애노테이션을 추가해야 합니다.
@Configuration
@EnableScheduling
public class SchedulingConfig {
}
@Scheduled 기본 사용법
이제 스케줄링 작업을 등록할 수 있습니다. 아래처럼 메소드에 @Scheduled 애노테이션을 붙이면, 해당 메소드가 일정 주기마다 자동 실행됩니다.
@Component
public class ScheduledTask {
@Scheduled(fixedRate = 5000)
public void reportCurrentTime() {
System.out.println("5초마다 실행되는 작업: " + new Date());
}
}
주요 속성 정리
속성 | 설명 |
fixedRate | 이전 작업 시작 시점 기준으로 일정 시간마다 실행 |
fixedDelay | 이전 작업 종료 시점 기준으로 일정 시간마다 실행 |
initialDelay | 애플리케이션 시작 후 첫 실행까지 대기 시간 |
cron | 크론 표현식으로 정교한 시간 제어 가능 |
cron 표현식으로 정밀한 스케줄링
@Scheduled는 cron 속성을 통해 특정 요일, 시각, 분 단위로 정밀한 예약 작업도 가능합니다.
@Scheduled(cron = "0 0 1 * * *")
public void executeAt1AM() {
System.out.println("매일 새벽 1시에 실행");
}
크론 표현식 구성: 초 분 시 일 월 요일
예시:
- 0 */10 * * * *: 10분마다
- 0 0 0 * * *: 매일 자정
- 0 0 9 * * MON: 매주 월요일 오전 9시
주의할 점
스케줄링 기능을 사용할 때 다음 사항에 유의하세요.
1. @Scheduled는 기본적으로 싱글 스레드로 실행됩니다.
동시에 여러 작업을 처리하고 싶다면 SchedulingConfigurer를 활용해 스레드풀 기반의 TaskScheduler를 설정할 수 있습니다.
@Configuration
@EnableScheduling
public class SchedulerConfig implements SchedulingConfigurer {
@Override
public void configureTasks(ScheduledTaskRegistrar registrar) {
registrar.setScheduler(Executors.newScheduledThreadPool(5));
}
}
2. 예외가 발생하면 다음 실행이 중단될 수 있습니다.
예외 처리를 해주지 않으면 해당 메소드가 더 이상 실행되지 않을 수 있으므로 반드시 try-catch 블럭으로 감싸는 것이 좋습니다.
@Scheduled는 복잡한 설정 없이도 정기적인 작업을 자동 실행할 수 있는 매우 유용한 기능입니다.
초기 설정만 잘 해두면, 시간 기반으로 필요한 모든 자동화를 간편하게 구현할 수 있습니다.
특히, 로그 정리, 백업, 외부 데이터 수집, 이메일 발송 등 반복 작업을 코드로 자동화하고자 할 때 꼭 활용해보세요.
'개발' 카테고리의 다른 글
Spring에서 예외 처리하기 – @ControllerAdvice의 활용 (2) | 2025.04.22 |
---|---|
@Controller와 @RestController 차이점 – 웹 개발에서 자주 헷갈리는 포인 (1) | 2025.04.21 |
Spring AOP 개념 정리 – 로그 출력과 트랜잭션 처리에 왜 필요한가? (0) | 2025.04.21 |
스프링 프레임워크 순환 참조 문제 (2) | 2025.04.16 |
Mysql mmm 설치 및 설정 실습 (0) | 2025.04.16 |