Spring 숙련 (스케줄링)

KimGwangmin·2026년 9월 14일

스케줄링

정해진 간격이나 시각에 자동으로 로직을 실행

아래와 같은 설정 클래스를 만들어 스케줄링을 활성화할 수 있다.

@Configuration
@EnableScheduling
public class SchedulingConfig {
}

사용 예시

필요할 때 그때그때 찾아서 쓰기

  • 5초마다 실행되는 로직
// 매 5초마다
@Scheduled(cron = "*/5 * * * * *")
public void task() {
}
  • 특정 시각에 실행되는 로직
// 매일 오전 9시
@Scheduled(cron = "0 0 9 * * *")
public void task() {
}

// 평일 오전 9시
@Scheduled(cron = "0 0 9 * * MON-FRI")
public void task() {
}

cron 표현식 몇 가지 규칙 정리

  • 6개 자리를 공백으로 구분, 실행 시점 지정
초(0~59)  분(0~59)  시(0~23)  일(1~31)  월(1~12)  요일(0~7 또는 SUN-SAT)
  • *: 모든 값 (매 초, 매 분, 매 시 등)
  • */n*: 주기, 간격 (n 단위마다 반복)
  • ,: 지정 나열 (예: 1, 15, 30: 1, 15, 30에 실행)
  • -: 범위 (예: MON-FRI: 월요일부터 금요일까지)

스케줄링 시 유의 사항

서버는 한 대가 아닐 수 있다. 스케줄링 시 여러 서버에서 같은 로직이 호출된다면?

  • 트래픽 분산을 위해 서버 애플리케이션을 여러 대에 띄워둘 수 있음
  • @Scheduled는 애플리케이션 인스턴스 내부의 메모리 타이머로 동작
    • 개별 서버에서 각자의 내부 시계에 맞춰 동작
  • 데이터 중복 처리가 발생할 수 있음 (예: 포인트 지급이 여러 번 이루어짐)
  • 동시성 충돌, 락 문제도 발생할 수 있음 (데드락 등)

0개의 댓글