BE/Spring & Spring Boot

[Spring Boot] @Scheduled

baek-dev 2025. 2. 5. 19:10

@ScheduleSpring Framework에서 제공하는 애노테이션으로, 정기적으로 특정 작업을 실행하는 데 사용됩니다. 주로 백그라운드 작업이나 일정 작업(예: 데이터 정리, 이메일 전송, 로그 정리)을 자동화하기 위해 사용됩니다.

 

1. @Scheduled 애노테이션이란?

  • 정의: 스프링에서 메서드를 스케줄링 작업으로 등록하고, 지정된 주기에 따라 실행되도록 설정하는 애노테이션.
  • 주요 특징:
    • 특정 시간 간격이나 일정에 따라 자동으로 메서드를 실행.
    • 작업이 비동기적으로 실행되도록 설정 가능.
    • 다양한 표현식(고정 시간, 크론 표현식 등)을 지원.

2. @Scheduled의 주요 속성

 

@Scheduled에서 사용할 수 있는 속성은 크게 세 가지로 나뉩니다:

 

1. fixedRate

  • 설명: 메서드 실행 간격을 밀리초 단위로 설정. 이전 작업이 끝나기를 기다리지 않고 고정된 간격으로 실행.
  • 형식: @Scheduled(fixedRate = 밀리초)
  • 예제:
@Scheduled(fixedRate = 5000) // 5초마다 실행
public void fixedRateTask() {
    System.out.println("5초 간격으로 실행");
}

 

 

2. fixedDelay

  • 설명: 이전 작업이 끝난 후 지연 시간을 두고 다음 작업을 실행.
  • 형식: @Scheduled(fixedDelay = 밀리초)
  • 예제:
@Scheduled(fixedDelay = 3000) // 작업 완료 후 3초 지연 후 실행
public void fixedDelayTask() {
    System.out.println("3초 지연 후 실행");
}

 

 

3. cron

  • 설명: 크론 표현식을 사용하여 일정을 상세히 설정.
  • 크론 표현식은 초, 분, 시, 일, 월, 요일을 조합하여 원하는 스케줄을 정함.
  • 형식: @Scheduled(cron = "크론 표현식")
  • 예제:
@Scheduled(cron = "0 0/1 * * * ?") // 매 1분마다 실행
public void cronTask() {
    System.out.println("매 1분마다 실행");
}
  • 크론 표현식 구조: 초 분 시 일 월 요일 [년도(선택)]
  • 예: 0 0 12 * * ? → 매일 12시에 실행.

3. @Scheduled 애노테이션 설정 방법

 

1. 스케줄러 활성화

  • @Scheduled를 사용하려면 스프링 애플리케이션에서 스케줄러를 활성화해야 함.
  • 활성화 방법:
@Configuration
@EnableScheduling // 스케줄링 활성화
public class SchedulerConfig {
}

 

 

2. 메서드에 @Scheduled 추가

  • 스케줄링 작업으로 실행할 메서드에 @Scheduled 애노테이션을 추가.
@Scheduled(fixedRate = 5000)
public void scheduledTask() {
    System.out.println("작업 실행: " + LocalDateTime.now());
}

 

 

3. 비동기 스케줄링 (선택 사항)

  • 스케줄링 작업이 오래 걸리는 경우, 비동기적으로 실행해야 다른 작업에 영향을 주지 않음.
  • 비동기 설정 방법:

1. @EnableAsync 활성화:

@Configuration
@EnableAsync
public class AsyncConfig {
}

 

2. 메서드에 @Async 추가:

@Scheduled(fixedRate = 10000)
@Async
public void asyncScheduledTask() {
    System.out.println("비동기 작업 실행");
}

4. Cron 표현식의 예시

표현식 설명
0 0 12 * * ? 매일 12시 정각에 실행
0 15 10 * * ? 매일 10시 15분에 실행
0 0/5 * * * ? 매 5분마다 실행
0 0 12 1 * ? 매월 1일 12시에 실행
0 0 12 ? * MON-FRI 매주 월~금 12시에 실행
0 0 12 1 1 ? 매년 1월 1일 12시에 실행

5. 사용 시 주의사항

1. 동시 실행 문제

  • 기본적으로 같은 작업이 동시에 실행되지 않음.
  • 만약 동시 실행을 허용하려면 별도로 비동기 설정을 해야 함.

2. 시간 단위

  • fixedRate와 fixedDelay는 밀리초 단위로 설정해야 함.

3. 비동기 작업 성능

  • 스케줄링 작업이 무거운 경우 비동기 설정(@Async)과 작업 분산(멀티 스레드) 사용을 고려.

4. 트랜잭션 관리

  • @Scheduled 메서드는 기본적으로 트랜잭션 범위 밖에서 실행되므로, 트랜잭션이 필요한 경우 추가 설정이 필요.

 

요약

  • @Scheduled는 정기 작업을 자동화하는 데 사용되며, fixedRate, fixedDelay, cron을 통해 다양한 주기와 일정을 설정할 수 있음.
  • 스케줄러 활성화와 필요에 따른 비동기 작업 설정이 중요.
  • 크론 표현식을 사용하면 복잡한 일정도 유연하게 정의 가능.

 

 

 

 

출처 : ChatGPT

'BE > Spring & Spring Boot' 카테고리의 다른 글

[Spring Boot] @Slf4j  (1) 2025.02.09
[Spring Boot] QueryDSL  (1) 2025.02.07
[Spring Boot] SpringDoc  (0) 2025.01.28
[Spring Boot] SpringSecurity UserDetails, User  (0) 2025.01.24
[Spring Boot] OSIV  (0) 2025.01.23