작성
·
798
0
안녕하세요 강사님..
아래의 경우 spring batch 구성의 best practice 가 궁금합니다.
- 배치 로딩 시간 > 스케줄 재실행 시간
- 외부 트리거(DB 데이터 insert 등) 에 의해 바로바로 배치가 실행되어야 하는 경우
감사합니다.
답변 1
1
스케줄과 관련해서는 스프링 배치가 되었던 다른 배치 어플리케이션이 되었던 배치가 할 수 있는 것은 거의 없습니다.
배치에는 시간을 제어할 수 있는 기능이 없기 때문입니다.
배치는 정해진 시간에 실행하는 것이 전부입니다.
물론 배치를 중단할 수 있고 재 시작할 수 있는 기능은 가능하지만 이것 역시 시간 자체를 컨트롤 할 수는 없습니다.
스케줄링은 스프링 자체에서 내장된 기능을 사용하거나 별도의 모듈인 쿼츠를 사용하거나 아니면 젠킨스 같은 서버를 사용하기도 합니다.
배치 로딩시간이 스케줄 재실행 시간 보다 클 경우 문제가 될 수 있다면 스케줄 재실행 시간을 배치 로딩이 끝나기 전에 실행하지 않도록 하는 것이 중요합니다
쿼츠 같은 모듈에는 이전의 Job 이 종료될 경우에만 새로운 Job 을 스케줄하는 기능이 포함되어 있기도 합니다.
이런 부분들은 로직으로 풀어야 하고 스프링 배치 구성과는 별개의 문제라 보시면 됩니다.
그리고 외부 트리거가 발생할 경우 바로 배치가 실행되어야 하는 경우도 스프링 배치와는 별개의 문제입니다.
외부에서 어떤 이벤트가 발생할 경우 배치가 실시간으로 실행되도록 구성하는 것은 여러 환경적인 요건들을 고려해야 합니다.
가령 이벤트를 주기적으로 계속 감시하는 별도의 데몬을 띄워서 이벤트 발생을 캐치하면 배치를 실행하게끔 할 수 있는데 이벤트 발생이 어떤 시간 간격으로 발생하는지에 따라서 배치가 중복으로 실행될 수 있기 때문에 이에 대한 장치가 필요하는 등.. 정교한 설계가 뒷받침 되어야 합니다.
저는 주로 스케줄링 관련해서는 쿼츠를 사용하고 있으며 젠킨스도 괜찮다고 생각합니다.
배치는 실행환경이나 인프라 환경, 규모 등의 조건들이 다양하기 때문에 상황에 따른 적절한 설계와 구현이 되어야 합니다.
네 자세한 설명 감사합니다.