일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- javamailsender
- map
- embededid
- 객체지향
- check()
- 토큰
- jpa repository
- 스프링 부트
- 코틀린
- JPA
- 자바
- 티스토리챌린지
- Spring
- Stream
- ispresent
- string.repeat()
- 스프링
- devpi
- Spring Boot
- mutablemap
- 복합 키
- email api 구현
- 이메일 본인인증
- Token
- java
- 오블완
- entity
- kotlin
- JPQL
- @embededid
- Today
- Total
DeveloPiano
[Spring] Spring Boot 에서 Scheduler 사용하기 본문
Scheduler(스케줄러)는 애플리케이션에서 특정 작업을 정해진 시간, 간격, 주기로 자동 실행되도록 설정하는 기능입니다. Spring Boot에서는 스케줄러를 사용하여 배치 작업, 정기 보고서 생성, 데이터 백업 등의 반복 작업을 손쉽게 구현할 수 있습니다.
Spring Boot에서는 @Scheduled 어노테이션을 활용하여 작업을 쉽게 예약할 수 있습니다. 다양한 표현식과 옵션을 통해 복잡한 스케줄링 요구사항을 간단하게 구현할 수 있습니다.
Scheduler의 주요 특징
- 간편한 설정 : @Scheduled 어노테이션을 사용해 간단하게 주기적인 작업을 설정할 수 있습니다.
- 다양한 주기 표현 : 고정된 간격, 특정 시간, cron 표현식 등을 사용하여 다양한 스케줄링이 가능합니다.
- 멀티 스레드 지원 : 멀티 스레드를 통해 여러 스케줄 작업을 동시에 처리할 수 있습니다.
- Spring과의 완벽한 통합 : Spring Boot에서 제공하는 스케줄러는 Spring의 다른 기능과 쉽게 통합됩니다.
Spring Boot에서 Scheduler 설정하기
Spring Boot에서 스케줄링을 사용하려면 다음 단계를 따라 설정할 수 있습니다.
1. 스케줄링 활성화
스케줄링을 사용하려면 애플리케이션에 @EnableScheduling 어노테이션을 추가해야 합니다. 일반적으로 메인 클래스에 추가합니다.
// DemoApplication.java
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;
@SpringBootApplication
@EnableScheduling // 스케줄링 활성화
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
2. 스케줄러 구현하기
스케줄링 작업을 실행할 메서드에 @Scheduled 어노테이션을 추가하여 구현할 수 있습니다.
기본적인 스케줄링 예제
아래는 간단한 스케줄러 예제입니다. 메서드가 특정 간격으로 실행되도록 설정할 수 있습니다.
// TaskScheduler.java
package com.example.demo.scheduler;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
@Component
public class TaskScheduler {
// 5초마다 실행
@Scheduled(fixedRate = 5000)
public void fixedRateTask() {
System.out.println("Fixed Rate Task: " + LocalDateTime.now());
}
// 이전 작업이 끝난 후 5초 뒤에 실행
@Scheduled(fixedDelay = 5000)
public void fixedDelayTask() {
System.out.println("Fixed Delay Task: " + LocalDateTime.now());
}
// 처음에는 2초 후에 시작하고 이후에는 5초 간격으로 실행
@Scheduled(initialDelay = 2000, fixedRate = 5000)
public void initialDelayTask() {
System.out.println("Initial Delay Task: " + LocalDateTime.now());
}
// Cron 표현식을 사용한 스케줄링 (매 분마다 실행)
@Scheduled(cron = "0 * * * * *")
public void cronTask() {
System.out.println("Cron Task: " + LocalDateTime.now());
}
}
@Scheduled 어노테이션 속성 설명
- fixedRate : 이전 작업이 시작된 시점부터 설정된 시간 간격으로 작업을 실행합니다. 예를 들어, @Scheduled(fixedRate = 5000)은 5초마다 작업을 실행합니다.
- fixedDelay : 이전 작업이 종료된 후 설정된 시간 간격 후에 작업을 실행합니다. 예를 들어, @Scheduled(fixedDelay = 5000)은 이전 작업이 끝난 후 5초 뒤에 다음 작업을 실행합니다.
- initialDelay : 스케줄링 작업이 처음 시작할 때 지연 시간을 설정합니다. 이후에는 fixedRate 또는 fixedDelay에 따라 주기적으로 실행됩니다.
- cron : 복잡한 스케줄을 표현하기 위해 사용됩니다. Cron 표현식을 사용하여 작업이 언제 실행될지 상세히 정의할 수 있습니다. 예를 들어, @Scheduled(cron = "0 * * * * *")은 매 분의 0초에 작업을 실행합니다.
Cron 표현식 설명
Cron 표현식은 시간을 표현하기 위한 매우 유연한 방식으로, 6개의 필드로 구성됩니다:
- 초 (Seconds): 0-59
- 분 (Minutes): 0-59
- 시간 (Hours): 0-23
- 일 (Day of Month): 1-31
- 월 (Month): 1-12 또는 JAN-DEC
- 요일 (Day of Week): 0-7 (0 또는 7은 일요일) 또는 MON-SUN
예제
- "0 0 12 * * *": 매일 12시 0분 0초에 실행
- "0 0/5 * * * *": 매 5분마다 실행
- "0 0 8-10 * * *": 매일 오전 8시, 9시, 10시에 실행
Scheduler 사용 시 주의사항
- 작업 실행 시간 관리 : 스케줄링 작업이 너무 길어지면 다음 주기의 작업에 영향을 줄 수 있습니다. 가능한 한 비동기 처리나 별도의 작업 큐를 사용하는 것이 좋습니다.
- 멀티 스레드 환경 설정 : 스케줄링 작업이 동시에 여러 개 실행되거나 여러 작업을 관리해야 할 때는 TaskScheduler 또는 ThreadPoolTaskScheduler를 사용하여 스레드 풀을 관리할 수 있습니다.
- 성능 모니터링 : 스케줄링 작업이 시스템에 어떤 영향을 미치는지 모니터링하는 것이 중요합니다. 작업의 실행 시간을 측정하거나 로깅하여 문제를 사전에 파악하는 것이 좋습니다.
마무리
Spring Boot의 Scheduler는 애플리케이션에서 반복 작업을 간편하게 처리할 수 있는 강력한 도구입니다. @Scheduled 어노테이션과 함께 다양한 옵션을 활용하여 원하는 주기와 타이밍에 작업을 실행할 수 있습니다. 이를 통해 배치 작업, 알람 시스템, 데이터 동기화 등 다양한 기능을 쉽게 구현할 수 있습니다.
스케줄러를 처음 사용해 본다면 위의 간단한 예제부터 시작해 보세요. 더 복잡한 스케줄링이 필요하다면 Cron 표현식을 활용해 다양한 스케줄을 구현할 수 있습니다. 이 포스팅이 Spring Boot 스케줄러를 사용하는 데 도움이 되길 바랍니다.
'Develop > Spring' 카테고리의 다른 글
[Spring] @Bean, @Component, @Configuration 이란 (0) | 2024.11.07 |
---|---|
[Spring Boot] @EmbeddedId - JPA에서 복합 키를 사용하는 방법 (0) | 2024.10.24 |
[Spring] JPA Pageable로 페이징 구현하기 (0) | 2024.10.17 |
[Spring] JPQL, QueryDSL : 기본 개념과 사용 예시 (0) | 2024.09.20 |
[Spring] Spring Boot JPA와 JPA Repository 이해하기 (0) | 2024.09.19 |