스프링 Batch와 Scheduler

웹서비스를 이용하는 프로젝트를 하게되어 배치와 스케줄러 개념을 공부하여 정리하고자 한다. 아직 개념을 이해하는 단계라 코드보다는 글 위주로 정리해보겠다.

1. 스프링 배치

처음 batch에 대해 접했을때 스케줄러와 비슷한 개념으로 이해했지만 아예 다른 개념이었다. 배치는 ‘일괄처리’ 라는 의미이다. 그리고 스프링에서 배치 작업 단위를 Job이라고 부른다. 스프링에서는 배치 작업이 원활하게 진행되도록 관련 기능을 제공한다. 대용량 배치와 트랜잭션 기능을 간단하게 구현할 수 있다.
(자세한 내용은 여기 )

또한 이러한 배치를 주기적으로 동작하게 해주는 Scheduler는 대표적으로 2가지가 있다.

  • Quartz 스케줄러
  • 스프링 스케줄러

2. Quartz 스케줄러

  1. quartz 스케줄러란?
    스케줄러란 단순히 잡을 특정 시간마다 실행되도록 도와주는 프로그램을 의미한다. Quartz 스케줄러는 크게 3가지로 이뤄져 있다.

    • 실행하고자 하는 Job
    • job의 실행 주기를 나타내는 trigger
    • 트리거들을 스케줄러로 만드는 scheduler
  1. 사용 방법

    1. pom.xml에 관련 dependency 추가
    2. job으로 batch 작업을 진행할 서비스 구현
    3. context.xml에 2)에서 만든 job을 정의할 jobDetailFactoryBean, jobDetail와 연결해 실행주기를 정의할 cronTriggerFactoryBean, 트리거를 스케줄러로 생성해줄 SchedulerFactoryBean 3가지를 설정한다.

3. 스프링 스케줄러

  1. 스프링 스케줄러란?
    스프링 3.1버전부터 스프링에서 제공해주는 스케줄러이다. Quartz보다 스케줄러를 디테일하게 사용하도록 하진 않지만 구현이 매우 간단하다.
    (Quartz의 상세한 장점은 여기서 자세히)

  2. 사용 방법 사용방법은 크게 2가지로 나눌 수 있다.
    job으로 사용될 서비스의 스케줄러을 appContext.xml에서 하느냐, 어노테이션으로 하느냐이다. 단 두 방법 모두 appContext.xml에서 <task:annotation-driven /><context-component-scan /> 설정이 필요하다.
    (물론 공통 appContext와 스케줄러 context를 분리할 경우, <context-component-scan>이 있는 appContext에 스케줄러 context를 import 해도 된다.)

    1. xml 파일에 스케줄러 설정

      • xml파일 상위에 xmlns 설정
      • <context-component-scan /> 설정
      • <task:scheduler id='스케줄러id' />설정 - job으로 작업할 서비스를 스케줄러로 설정
      • <task:scheduleㄷ ref='스케줄러id' /> 설정 - job 실행주기 설정
      • <task:annotation-driven scheduler ='스케줄러id' />
    2. 어노테이션 방법

      • xml파일 상위에 xmlns 설정
      • <context-component-scan /> 설정
      • xml 파일에 <task:annotation-driven /> 설정 추가
      • job으로 사용될 서비스 메소드명에@Scheduler(cron 설정) 추가

참고

Published 20 Apr 2019


jaegoon on github