본문 바로가기
개발

Spring에서 스케줄링 작업 처리하기 – @Scheduled 활용 예제

by suwimi 2025. 4. 21.

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는 복잡한 설정 없이도 정기적인 작업을 자동 실행할 수 있는 매우 유용한 기능입니다.
초기 설정만 잘 해두면, 시간 기반으로 필요한 모든 자동화를 간편하게 구현할 수 있습니다.

특히, 로그 정리, 백업, 외부 데이터 수집, 이메일 발송 등 반복 작업을 코드로 자동화하고자 할 때 꼭 활용해보세요.

 

 

스프링 스케줄러