Develop/spring-batch

Spring batch 스케줄 생성! [Jenkins]

에디개발자 2020. 11. 4. 02:00
반응형

이전글에서는 Spring Batch를 만들었습니다.

이번 글에서는 생성된 Spring Batch를 Jenkins로 스케줄 설정하여 실행시켜 보겠습니다.

 

이 글은 작성하기에 앞서 우아한 형제들 이동욱님의 티스토리를 참조하여 작성하였습니다.

다양한 방법

스케줄에도 다양한 방법이 있습니다.

  • Linux Cron
  • Quartz
  • Cloud Serverless
  • Spring Batch Admin
  • CI Tool

Choice

위처럼 다양한 방법이 있지만 CI Tool Jenkins를 사용하였습니다.

  • Linux Cron : 정상적으로 배포했는지 어떻게 알지?? 로그 다 열어봐야하나..
  • Quartz : 스케쥴링 시간 변경할때마다 소스 수정하고 재배포하고 또 테스트 하고 싶으면 다시 수정하고 배포하고 또 수정하려면 배포하고 수정하고….
  • Cloud Serverless : Amazon Lambda를 사용해야한다. 비용….
  • Spring Batch Admin : 더 이상 개선하지 않겠다고 한다. 그럼 나도 안쓴다.
  • CI Tool : Jenkins 스케줄을 이용하여 용이하게 관리해보자!

장점

  • Jenkins로 스케쥴 Item을 만들고 스케쥴을 돌리면 자연스럽게 배치 시작 이력이 남는다.

  • 배치 시작되면서 로그도 당연히 남는다.

  • 스케쥴 시간 변경 등 테스트를 할 때에도 소스 수정없이 사용가능

  • Pipeline을 사용하여 Step을 관리할 수 있음.
    • Job에 Step을 여러개 넣는 것 보다 Pipeline을 이용하여 Step을 관리하는게 용이하다. 여러개의 Step중 원하는 Step만 실행시키고 싶다면 소스 수정을 해야한다. 하지만 Pipeline을 이용한다면 소스는 수정하지 않고 Jenkins의 설정만 바꿔주면 된다.

 

사용방법

Jenkins에 Itemdmf 2가지 타입으로 생성한다.

  • Deploy
  • Scheduler

Deploy

일반적인 배포와 동일하게 생성한다.

 

Scheduler

java -jar \
-XX:+UseG1GC \
-Dspring.profiles.active=dev \
배치jar \
--job.name=스프링배치Job이름 \
파라미터1=파라미터값1 \
파라미터2=파라미터값2

로 작성한 후 Jenkins Schedule 을 적용하여 생성한다.

version 에 ${BUILD_NUMBER}을 넣는 이유는 배치 기동 시 동일한 파라미터가 입력 시 실행되지 않기 때문에 파라미터값에 유니크한 값을 설정한다.

아키텍쳐

반응형