HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
♥️
2기 최종 프로젝트 팀별 공간
/
[팀 08] 사이코
[팀 08] 사이코
/
🧑‍🎤
스프링 스케줄러 설정
🧑‍🎤

스프링 스케줄러 설정

 

개요

  • 특정 시간에 주기적으로 해야 하는 일이 있다. 예를 들어, 구독하고 있는 구독자들에게 뉴스레터와 같은 이메일 발송, 주기적으로 데이터베이스 동기화, 이용시간이 적은 시간에 대량 로그 전송 등의 일이다.
  • 비드마켓 애플리케이션 상에서도 주기적으로 해야 하는 일이 있다.
    • 경매 기간 자동 종료 → 낙찰자 선정
 

Spring Scheduler

  • SpringBoot에서는 위와 같은 작업을 @Schedule 어노테이션을 사용하면 쉽게 할 수 있다.
  • 스프링 스케줄러를 우리의 프로젝트에 적용하면 다음과 같은 흐름으로 동작한다.
      1. 스케줄러가 1분에 한 번씩 돌면서 경매 리스트를 조회를 한다.
        1. 경매가 현재 진행중인지, 종료 시간이 현재 시간과 일치하는 경매 리스트를 조회한다. (연도 월 일 시 분까지)
      1. 일치하는 경매가 있다면 상태 완료로 처리하고 경매 종료시 수행해야할 로직들을 수행한다.
 
💡
스케줄링 작업이 1분마다 동작해도 문제가 없는 이유는 웬만하면 조회의 결과가 없기 때문이다. 매 분마다 경매 리스트 조회 쿼리가 다 날라가고 일치하는지 확인하는데, 조회 쿼리가 분 단위로 넘어가지 않을 것이다.

우려되는 점

  • 기본적으로 스프링 스케줄러 작업을 한다면, 스프링은 스케줄링을 위해서 스레드가 하나만 있는 스레드 풀을 만든다.
    • 그러면 @Scheduled 작업은 대기열에 쌓이게 되며 단일 스레드에 의해서만 실행됩니다.
      스케줄링에 의해 관리되는 작업이 여러 개 있을 때, 여러 작업을 제시간에 맞추어서 실행하기 위해서는 스레드를 늘릴 필요가 있다.
      ⇒ SchedulingConfigurer 인터페이스를 구현하여 설정을 변경할 수 있다.