먼저 지금 회사에 배치서비스를 만드는데 corontab에 등록을 시켜서 java main을 실행 그것을 통해서 배치 서비스를 실행 시킨다 해당 코드는 전체 백엔드와 통합이 되어 실행이 되며 그것으로 인해 의존성 라이브러리등 값을 vm 옵션을 통해서 주고 있다.
위에 방법을 하니 매번 배포나 서비스가 환경을 바뀔때 마다 재배포를 해야 되는 문제점이 있다.
그래서 12factor를 준수하고 di를 할수있는 프레임워크로 바꿀려고 한다. 전반적으로 한국 자바 개발자들은 Spring에 익숙하기 때문에 Spring batch 프레임워크를 적용하여 배치를 실행 하려고 하고 있다. 스프링 배치는 JSR352(Spring Batch 에서 영감을 받음)를 준수 하고 있다. 이것은 배치 어플리게이션에 대한 자바에 표준입니다.
스프링 배치 프레임워크를 적용하기 위해서는 여러 설정이 있는데 설정보다 관례(CoC; Convention over Configuration) 패러다임에 맞춘 spring boot 프레임워크를 사용하려 한다.
JSR 352는 일괄 처리 비즈니스 로직을 구현할 수있는 수많은 일괄 프로그래밍 API를 정의합니다. 이 중에서 일반적으로 사용되는 ItemReader, ItemProcessor 및 ItemWriter는 배치 단계의 데이터 항목을 읽고, 처리하고, 쓰는 기본 런타임 계약을 정의합니다.
Reader-Processor-Writer 패턴은 기본 패턴 이며 청크 지향 처리 라고 합니다.
job에는 작업의 논리적 이름 을 정의하고 식별 목적으로 사용되는 “id”속성이 있습니다.
각 job은 여러 step 할 수 있습니다. 각 step은 작업 단계와 특성을 나타냅니다. 각 step에는 작업 의 논리적 이름 을 정의하고 식별 목적으로 사용되는 “id”속성이 있습니다.
step은 chunk 또는 tasklet 요소를 가질 수 있습니다 .이 step에는 chunk가 있습니다. chunk 는 chunk type step을 식별하고 reader-processor-writer pattern을 구현합니다 .
위에 내용을 기반으로 reader-processor-writer pattern을 구현한 간단한 어플리케이션을 구현하겠습니다.
ItemReader의 구현체의 방식이 2가지 있는데 Cursor기반과 Paging기반이 있습니다.
저는 기본구현된 reader와 writer를 사용하지 않았습니다. 저희 회사에서 사용하고 있는 mybatis에 익숙한 개발자들이 많아서 예제를 MyBatisReader를 사용해서 구현하려고 합니다.
전체를 구현한 소스는 아래의 예제 코드가 있고 reader-processor-writer pattern이 보이는 코드를 보여주겠습니다.