[Spring] Spring Scheduler 적용

2025. 7. 6. 17:00·Spring
728x90

Spring Scheduler 란?

 

Spring Framework에서 제공하는 작업 스케줄링 기능으로, 일정 시간마다 또는 특정 시점에 어떤 작업을 자동으로 실행하도록 설정할 수 있음.
복잡한 설정 없이 간단한 주기적 작업을 구현할 수 있어 백그라운드 처리나 정기적인 작업에 자주 사용됨.

  • 주로 @Scheduled 어노테이션을 이용해 메서드를 주기적으로 실행함.
  • 내부적으로는 TaskScheduler와 ScheduledExecutorService를 사용하여 동작함.
  • 크론 표현식, fixedDelay, fixedRate, initialDelay 등을 통해 세부 설정 가능.

 

Spring Batch vs Spring Scheduler

목적 정기적인 간단한 작업 실행 대용량 배치 작업 처리에 특화
사용 사례 로그 정리, 정기 API 호출 정산, 데이터 마이그레이션, ETL
복잡도 매우 단순 구조적으로 복잡 (Job, Step 등 필요)
트랜잭션 처리 없음 (수동으로 해야 함) 트랜잭션 관리 내장
스케줄링 @Scheduled 기반 별도 스케줄링 설정 필요 (Quartz 등과 연동)
병렬 처리 ThreadPool 직접 설정 병렬 Step 및 Partition 처리 지원

 

➡ 간단한 주기적 작업이면 Spring Scheduler
➡ 대량의 데이터 처리가 필요한 경우 Spring Batch 사용

 

Spring Scheduler 주요 클래스 & 어노테이션

1. @EnableScheduling

Spring에서 스케줄링 기능을 활성화할 때 사용하는 어노테이션
@Scheduled가 붙은 메서드를 감지하고 실행할 수 있도록 한다.

해당 어노테이션이 없으면 스케줄이 동작하지 않으며 보통 @Configuration 과 같이 사용한다.

@Configuration
@EnableScheduling
class SchedulerConfig

2. @Scheduled

스케줄링할 메서드 위에 붙여 주기적 실행 조건을 명시하며 크론 표현식, 고정 지연 시간, 고정 속도 등을 지원한다.

// cron :  정해진 시간에 실행
@Scheduled(cron = "0 0 3 * * *")
fun cronScheduler() {
    println("매일 3시에 실행")
}

// fixedRate : 이전 작업 시작 후 일정 시간마다 실행
@Scheduled(fixedRate = 10_000)
fun fixedRateScheduler() {
    println("작업 시작 시점 기준으로 10초마다 반복")
}

// fixedDelay : 이전 작업 종료 후 일정 시간마다 실행
@Scheduled(fixedDelay = 10_000)
fun fixedDelayScheduler() {
    println("작업 종료 후 기준 10초마다 반복")
}

// initialDelay : 시작 대기 시간 설정
@Scheduled(initialDelay = 5_000, fixedRate = 10_000)
fun initialDelayScheduler() {
    println("앱 시작 후 5초 대기 → 10초 간격 실행")
}

3. SchedulingConfigurer

스케줄링 동작을 커스터마이징할 수 있는 인터페이스.
스케줄링 설정을 프로그래밍 방식으로 조절하고, ThreadPoolTaskScheduler와 연동 가능.

 

  • 스케줄링에 사용할 스레드 풀 지정 가능
  • 여러 작업이 동시에 실행되도록 설정 가능

4. ThreadPoolTaskScheduler

멀티 스레드 기반으로 작업을 병렬 실행할 수 있게 해주는 스케줄러 구현체.
스케줄러의 백그라운드 스레드 수, 이름 등을 설정할 수 있음.

@Bean
fun taskScheduler(): ThreadPoolTaskScheduler {
    return ThreadPoolTaskScheduler().apply {
        poolSize = 10
        threadNamePrefix = "MyScheduler-"
        initialize()
    }
}

 

  • SchedulingConfigurer에서 주로 사용
  • 병렬 실행, 지연 실행 등에 유용

5. ScheduledTaskRegistrar

스케줄링할 작업을 등록하고 실행을 관리하는 핵심 클래스.
SchedulingConfigurer.configureTasks()에서 전달받아 설정에 사용됨.

  • 내부적으로 Runnable, Trigger, TaskScheduler를 관리
  • 직접 사용할 일은 거의 없지만, 커스터마이징 시 중요한 역할을 함

 

Spring Scheduler 구현

1.  Scheduler Application

@SpringBootApplication(exclude = [DataSourceAutoConfiguration::class])
@ConfigurationPropertiesScan
@EnableWebFlux
class SchedulerApplication

fun main(args: Array<String>) {
    runApplication<SchedulerApplication>(*args)
}

2.  Scheduler Config

@Configuration
@EnableScheduling
class SchedulerConfig : SchedulingConfigurer {
    @Bean
    fun taskScheduler(): ThreadPoolTaskScheduler {
        return ThreadPoolTaskScheduler().apply {
            this.poolSize = 10
            this.setThreadNamePrefix("scheduled-task-")
        }
    }

    override fun configureTasks(taskRegistrar: ScheduledTaskRegistrar) {
        taskRegistrar.setScheduler(taskScheduler())
    }
}

3.  Scheduler

@Component
class MyScheduler(
    private val mySerivce: MyService,
) {
    @Scheduled(fixedDelayString = "5000")
    fun myScheduler() { 
        log.info("my scheduler start")
        myService.serve() 
        log.info("my scheduler end")
    }
}

 

 

728x90
저작자표시 (새창열림)

'Spring' 카테고리의 다른 글

[Spring] Shedlock 을 통한 Spring Scheduler 제어  (1) 2025.07.12
Spring Batch란?  (0) 2022.03.22
[Spring] Spring의 Event 처리 과정  (0) 2022.03.15
Spring 면접 질문 모음  (0) 2021.11.21
스프링 핵심 원리  (0) 2021.11.11
'Spring' 카테고리의 다른 글
  • [Spring] Shedlock 을 통한 Spring Scheduler 제어
  • Spring Batch란?
  • [Spring] Spring의 Event 처리 과정
  • Spring 면접 질문 모음
gudwnsgur
gudwnsgur
IT
    250x250
  • gudwnsgur
    gudwnsgur
    gudwnsgur
  • 전체
    오늘
    어제
    • 분류 전체보기 N
      • 개발이야기 N
      • Spring
        • 이슈 해결
      • JPA
        • spring data jpa
      • Java
        • Java의 정석
      • Kotlin
        • Kotlin In Action
        • Kotlin 정리
      • 대규모 시스템 설계 기초
      • JavaScript
        • JS ES6+
      • 면접
        • CS
      • SQLD
      • BE 개발
        • spring webflux
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    대규모 시스템 설계 기초
    session
    cookie
    HTTP
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
gudwnsgur
[Spring] Spring Scheduler 적용
상단으로

티스토리툴바