2024.03.12 - [Spring/Batch Programming] - Spring Batch 도메인 용어, 실전
이전 글에서는 Spring에서 실제로 어떻게 Batch를 구현했는지 사용되는 용어와 전체적인 구조를 학습했다.
이번 글에서는 Job에 대해서 말하고자 한다.
전체 배치 프로세스를 캡슐화한 도메인
우선 기본적으로 Job은 Job의 이름, Step의 정의 및 순서, 작업을 다시 시작할 수 있는지 여부로 구성되어있다.
여기서 나는 SimpleJob에 대해서 자세히 다룰 예정이다.
근데 뭔가 구조도가 익숙하다,,, 저번에 직접 Batch를 만들어보며 봤던 Template Pattern이다,,!
직접 만들어보고, Spring에서 만들어져 있는 코드들을 보니 반가운 마음이 앞선다.
가장 기본적인 Job의 형태이다.
Step을 돌면서 execute하는 코드가 보인다.
이것도 직접 Batch 프로그램을 만들때 구현했던 함수들이다.
JobRepository와 Step들을 DI받고 있고, restart를 방지하고, listener를 추가하고, Validater, Incrementer까지 다루는 것을 볼 수 있다. 이제 전체적인 Job에 대한 이야기는 어느정도 한 것같다. 이제부턴 세부적인 부분을 짚어보고자 한다.
Default설정으론 Job은 재시작할 수 있지만, 사용자 설정으로 이를 설정할 수 있다.
☞ 비즈니스에 맞게 내가 수정할 수 있다는 말이다!
SimpleJobBuilder에서 #preventRestart를 설정하면 재시작 할 수 없게 바꿀수 있다.
그리고 JobPar ametersIncrementer 인터페이스는 다음 JobParameters객체를 얻기 위한 인터페이스이다.
쉽게 말하면 그냥 파라미터 없이 Job을 반복해서 실행하기 위해서 사용하는 것이다.
개발 단계에서 많은 테스트를 할 것인데 이때 활용하는 것이 가장 적절한 것 같다.
Spring 에서는 RunIdIncrementer 클래스에 getNext라는 구현체를 제공하고있다.
그리고 개발자라면 코드를 짰으면 그에 따른 테스트를 할 것이다. 이에 JobParameterValidator 라는 클래스가 존재한다. 여기서는 입력 받은 Job Parameter를 손쉽게 검증해준다. 간단하게 JobParameterValidator 를 구현하는 클래스를 우리의 조건에 맞게 구현해주기만 하면 된다! 근데 이것까지 고려해서 DefaultJobParametersV alidator이라는 클래스를 Spring에서는 제공 하고있다. Spring의 한계는 어디까지인가,,,
다음으로는, JobExecutionListener이다. 스프링 배치 생명 주기 중 Job 실행 전/후 로직을 추가할 수 있는 기능이다. 알림/초기화/정리 를 할때 자주 쓰인다. 여기서도 내가 직접 구현했던 beforeJob, afterJob이 구현되어 있어 매우 반가웠다. 그냥 기능이 있으면 이것을 구현해주기만 하면 된다.
※ 주의점 : 성공여부와 상관없이, JobExecutionListener가 실행되기때문에 성공/실패 어떤 경우에 알림을 받고싶은지 직접로직을 구현해주는 것이 중요하다.
다음글에서는 Step에 대해 알아본다.
'Spring > Batch Programming' 카테고리의 다른 글
Spring Batch 3 - Items(Reader) (0) | 2024.03.20 |
---|---|
Spring Batch Step (0) | 2024.03.13 |
Spring Batch 도메인 용어, 실전 (3) | 2024.03.12 |
Spring Batch 실습(4) (0) | 2024.03.10 |
Spring Batch 실습(3) (0) | 2024.03.09 |