티스토리 뷰

Spring Batch 를 통해 Batch Job을 만들었으면 이걸 주기적으로 돌려주는 무언가가 필요하다. 배치와 스케쥴러를 혼동하는 사람들이 종종 있는데 이것은 완전히 다른 개념이다. 배치는 실시간으로 처리를 하는것이 아닌 일괄 처리를 뜻하며 보통은 특정 시간에 행해진다. 이 특정 시간을 정의해 주는 것은 스케쥴러의 역할이다. 

 

내가 만든 Batch Job을 어느 스케쥴러를 통해서 동작시킬지 먼저 결정을 해야 한다. 선택을 할수 있는건 다음과 같았다. 

  • 상용으로 나온 배치 전문 솔루션 Control-M
  • Jenkins의 Schedule(Build Periodically)를 사용하는 방법
  • Quartz 를 사용해서 자체 제작하는 방법 
  • 배치 어플리케이션이 올라갈 서버(linux)의 crontab 을 사용하는 방법

각각의 장단이 있지만 무난한 Jenkins의 Schedule(Build Periodically)를 사용하기로 했고 이에 대해 알아보자. (매우간단)

 

일단 배치를 구동시킬 Jenkins를 하나 설치하고 (있다면 별도의 tab에 만들어도 무관하다.) 새로운 ITEM을 누른다. 그리고 FreeStyle Project 로 새 Jenkins Job을 생성을 해준다. 

 

 

그다음 빌드 유발에서 Build periodically 를 선택하고 Schedule 을 넣어준다. 여기서 Schedule은 Cron Expression으로 넣어준다. Cron Expression 은 다음에서 참고한다. 

 

 

Shell Script와 Crontab으로 오래된 로그, 백업파일 자동 지우기

logback이라던지 log4j2 등 비교적 최근에 나온 logging framework을 사용하면 appender를 이용해 시간이 오래 된 로그를 삭제할 수 있지만 그 전에 나온 log4j 등의 logging framework은 이런 기능이 없다. 따라..

oingdaddy.tistory.com

 

위와 같이 설정했다면 이건 매일 낮 12시 5분에 이 Jenkins Job을 실행시킨다는 것이다.

스케쥴링의 요소인 "언제 무엇을" 중에 '언제'에 해당하는건 세팅이 끝난것이다.

 

'무엇을'에 해당하는 부분은 다음과 같다. 

 

 

이런식으로 Build 에서 무엇을에 해당하는 부분을 기술해준다. 이곳 Command에서는 미리 정의해놓은 sh 파일이 있다면 그걸 실행시켜 주면 되고 아니라면 위처럼 직접 실행 명령을 기술해주면 된다. 실행 명령을 기술하는건 다음 포스팅을 참고하면 된다. 

 

 

Spring Batch 초간단 환경 구성하기 (xml config)

spring batch는 여러 회사가 제각기 만들던 batch framework을 통합시켰을만큼 잘 만들어진 batch framework이다. 많은 사람들이 사용을 하고 또 표준이 되었다는건 그만큼 강력한 기능과 누구나 쉽게 다룰��

oingdaddy.tistory.com

즉 위처럼 구성을 했을 경우에는 tasklet-job이라는 job을 매일 오후 12시 5분에 실행한다는 뜻이다. 

배치 Job 별로 Jenkins의 Job도 각각 만들어 주는것을 추천한다. (배치 돌리는 시간이 다 다를것이기 때문에..)

Jenkins의 Job을 각각 다 만든다 하더라도 Job의 이름과 Build > Command에서 export JOB_ID 부분만 해당 Batch Job ID로 바꿔주면 되기 때문에 큰 어려움은 없다. 

 

이렇게 만들었다면 직접 실행해볼수도 있고 시간이 되기를 기다렸다가 실행되는걸 볼수도 있다. 

 

실행 결과는 Jenkins의 Console Log를 통해서 볼수 있고 정상수행 했으면 Success 가 된걸 확인할 수 있다.

 

 

별도의 배치 관리 프로그램을 만들지 않더라도 간단하게 이력조회를 할수도 있고 배치가 실패하면 설정해놓은 slack이나 email로 즉시 알람을 받아 볼수도 있어서 Jenkins를 통한 배치 스케쥴링은 매우 편리하다. 

 

끝!

댓글
최근에 올라온 글
최근에 달린 댓글
«   2024/05   »
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 29 30 31