SpringBoot 를 배워보자/9. 추가 기능

스케줄링 (Spring Scheduling)

_Blue_Sky_ 2024. 9. 29. 19:01
728x90
728x90

스프링 부트 스케줄링: 자세한 가이드

서론

스프링 부트는 개발 생산성을 높여주는 강력한 프레임워크입니다. 이 중 스케줄링 기능은 특정 시간이나 주기적으로 특정 작업을 수행해야 할 때 매우 유용하게 활용됩니다. 예를 들어, 배치 작업, 데이터 백업, 캐시 초기화 등 다양한 작업을 자동화할 수 있습니다. 이 글에서는 스프링 부트 스케줄링의 기본 개념부터 심화 내용까지 상세하게 다루어, 여러분이 스케줄링 기능을 효과적으로 활용할 수 있도록 돕겠습니다.

1. 스프링 부트 스케줄링 개요

스프링 부트 스케줄링은 @Scheduled 애노테이션을 사용하여 메서드를 특정 시간이나 주기적으로 실행하도록 설정하는 기능입니다. 이를 통해 개발자는 복잡한 스케줄링 로직 없이 간단하게 배치 작업을 구현할 수 있습니다.

2. @Scheduled 애노테이션

  • cron: Cron 표현식을 사용하여 복잡한 스케줄링을 설정할 수 있습니다. 매일 새벽 2시에 실행하고 싶다면 cron = "0 2 * * *" 와 같이 설정합니다.
  • fixedDelay: 이전 실행이 끝난 후 지정된 시간이 지나면 다음 실행이 시작됩니다.
  • fixedRate: 고정된 시간 간격으로 실행됩니다. 이전 실행이 완료되지 않았더라도 다음 실행이 예약된 시간에 시작됩니다.
  • initialDelay: 첫 번째 실행까지 기다릴 시간을 설정합니다.

3. 스케줄링 설정

  • @EnableScheduling: 해당 클래스에 @EnableScheduling 애노테이션을 추가하여 스케줄링 기능을 활성화합니다.
  • @Scheduled: 스케줄링할 메서드 위에 @Scheduled 애노테이션과 함께 cron 표현식이나 fixedDelay, fixedRate 등을 설정합니다.
728x90

4. 스케줄링 예시

@Configuration
@EnableScheduling
public class SchedulingConfig {

    @Scheduled(cron = "0 0 * * * ?") // 매일 자정 실행
    public void scheduleTaskWithFixedRate() {
        System.out.println("Schedule tasks using fixed rate, 60 seconds");
    }
}

5. 스케줄링 고급 기능

  • Async: @Async 애노테이션을 추가하여 비동기로 작업을 실행할 수 있습니다.
  • TaskExecutor: TaskExecutor를 커스터마이징하여 스레드 풀을 관리할 수 있습니다.
  • Cron 표현식: 다양한 Cron 표현식을 사용하여 복잡한 스케줄링을 구현할 수 있습니다.
  • Dynamic Scheduling: 설정 파일이나 데이터베이스를 통해 동적으로 스케줄링 정보를 변경할 수 있습니다.

6. 스케줄링 주의사항

  • 시간대: 서버의 시간대를 정확히 설정해야 합니다.
  • 오버헤드: 너무 많은 스케줄링 작업은 시스템 성능에 영향을 줄 수 있습니다.
  • 에러 처리: 예외 발생 시 적절한 에러 처리를 해야 합니다.
  • 테스트: 스케줄링 작업을 테스트하기 위한 방법을 마련해야 합니다.

7. 스프링 부트 스케줄링 활용 사례

  • 배치 작업: 대량의 데이터 처리, 보고서 생성 등
  • 캐시 초기화: 캐시 데이터 주기적 갱신
  • 로그 회전: 로그 파일 관리
  • 데이터 백업: 데이터베이스 백업
  • 시스템 모니터링: 시스템 상태 주기적 확인

결론

스프링 부트 스케줄링은 간단한 설정으로 다양한 배치 작업을 자동화할 수 있는 강력한 기능입니다. 이 글에서 소개된 내용을 바탕으로 여러분의 프로젝트에 스케줄링 기능을 적용하여 개발 생산성을 향상시키시기 바랍니다.

728x90
728x90

'SpringBoot 를 배워보자 > 9. 추가 기능' 카테고리의 다른 글

테스트 (JUnit, Mockito)  (0) 2024.09.29
캐싱 (Spring Cache)  (0) 2024.09.29
AOP (Aspect Oriented Programming)  (0) 2024.09.29