Common Batch Patterns
·
Book/Spring Batch docs
일부 배치 작업은 Spring Batch에서 제공하는 기성(ready-made) 컴포넌트만으로도 구성할 수 있다.예를 들어, ItemReader와 ItemWriter 구현체들은 매우 다양한 시나리오를 커버할 수 있다.하지만 실무에서는 완벽히 일치하지 않는 요구사항이 많기 때문에, 일부 구간(특히 쓰기/처리)은 직접 구현해야 할 수도 있다.이 장에서는 커스텀 비즈니스 로직에서 자주 사용되는 몇 가지 공통 패턴의 예시를 제공한다.이러한 예시들은 주로 Listener 인터페이스를 활용한 것들이다. 또한, 필요하다면 ItemReader나 ItemWriter도 Listener 인터페이스를 직접 구현해야 할 수도 있다. ❐ 1. Logging Item Processing and Failures🧩 Step 내에..
Retry
·
Book/Spring Batch docs
❐ RetryRetryBatch 처리에서 일시적인 오류(transient error) 때문에 전체 작업이 실패하는 걸 방지하기 위해, 자동 재시도(retry) 메커니즘을 제공한다.예를 들어 이런 경우에 유용하다.네트워크 일시 장애로 API 호출 실패DB Deadlock 발생 (DeadlockLoserDataAccessException)외부 시스템 응답 지연실패 시 바로 중단하지 않고 일정 횟수까지 재시도 하는 방식으로 안정성을 높인다. Retry 기능의 분리Spring Batch 2.2.0 이후, Retry 기능은 별도의 라이브러리로 분리됐다.예전엔 RepeatTemplate 내부에서 Retry 로직을 직접 포함했지만지금은 Spring Retry가 RetryTemplate, BackOff, Po..
Scaling and Parallel Processing
·
Book/Spring Batch docs
❐ 1. Multi-thread Step앞에서 봄 ❐ 2. Parallel Steps앞에서 봄 ❐ 3. Remote ChunkRemote Chunk란?Reader/Processor와 Writer를 서로 다른 프로세스(노드)로 분리해서 실행하는 구조마스터 노드: 데이터를 읽고 나누어(Chunk 단위로) 전송워커 노드: 전달받은 Chunk를 실제로 Write (DB 저장 등) 언제 효과적일까?Manager 컴포넌트는 하나의 프로세스로 동작하고, worker는 여러 개의 원격 프로세스로 동작함이 패턴은 Manager가 병목(bottleneck)이 되지 않을 때 가장 효율적따라서, 아이템을 읽는 작업보다 처리 작업이 더 비싼 경우에 특히 효과적 ManagerManager는 Spring Batch의..
Item processing
·
Book/Spring Batch docs
❐ 1. Chaining itemProcessorItemProcessor로 부가적인 로직을 짤 수 있음.근데 ItemProcessor를 체이닝을 걸어서 쓰고 싶다면?@Configurationclass BatchConfig { @Bean fun ioSampleJob(jobRepository: JobRepository, step1: Step): Job = JobBuilder("ioSampleJob", jobRepository) .start(step1) .build() @Bean fun step1( jobRepository: JobRepository, transactionManager: PlatformTransa..
ItemReaders and ItemWriters
·
Book/Spring Batch docs
❐ 1. ItemReaderitemReader란?ItemReader는 여러 종류의 입력 데이터 소스로부터 데이터를 읽어오는 역할을 하는 인터페이스대표적인 구현 예시Flat FileCSV, TSV 같은 평문 파일에서 한 줄씩 데이터를 읽어옵니다.각 라인은 하나의 레코드이며, 필드는 쉼표(,) 등 구분자로 나뉩니다.XMLXML 파일에서 데이터를 읽습니다.XML의 각 요소를 파싱하고 매핑하거나, XSD 스키마로 유효성 검사를 수행할 수도 있습니다.Database데이터베이스에서 ResultSet을 읽어와 객체로 매핑합니다. 인터페이스 정의public interface ItemReader { T read() throws Exception, UnexpectedInputException, ParseExcept..
Configuring a Step
·
Book/Spring Batch docs
❐ 1. Chunk-oriented processing🌀 1-1. Configuring a Step 🌀 1-2. Inheriting from a Parent Step 🌀 1-3. The Commit Interval 🌀 1-4. Configuring a Step for Restart 🌀 1-5. Configuring Skip Logic 🌀 1-6. Configuring Retry Logic읽기 작업에서 발생하는 치명적인 오류는 재시도를 해도 항상 실패함.반면, 락 경합·일시적 네트워크 오류 같은 비결정적 예외는 대기 후 재시도하면 성공할 수 있음.retryLimit과 retry 대상 예외를 지정해 처리ex. DeadlockLoserDataAccessException@Beanfu..
Configuring and Running a Job
·
Book/Spring Batch docs
❐ DescriptionJob 객체는 단순히 여러 Step을 담는 컨테이너처럼 보일 수 있지만, 사실 많은 설정 옵션들을 알고 있어야 함Job을 어떻게 실행할지, 실행 중에 메타데이터를 어떻게 저장할지도 여러 가지를 고려해야 함이 장에서는 Job의 다양한 설정 방법과 실행 시 고려해야 할 사항들을 설명함 ❐ 1. Configuring a Job@Beanpublic Job footballJob(JobRepository jobRepository) { return new JobBuilder("footballJob", jobRepository) .start(playerLoad()) .next(gameLoad()) ..
The Domain Language of Batch
·
Book/Spring Batch docs
The Domain Language of BatchSpring Batch의 장점명확한 책임 분리(Separation of Concerns)아키텍처 계층 구조의 명확한 인터페이스화빠른 도입과 쉬운 사용이 가능한 기본 구현 제공확장성 강화 주요 구성 요소 및 관계 구성요소JobLauncher: Job을 시작하는 역할Job: 하나 이상의 Step을 가짐Step: 각 Step은 다음 세 가지 구성 요소(DI 기반으로 테스트와 교체가 쉬움)를 가짐ItemReader: 데이터를 읽음 (ex: DB, 파일 등)ItemProcessor: 읽은 데이터를 가공ItemWriter: 처리된 데이터를 출력JobRepository: Job의 실행 상태, 메타데이터 등을 저장DB에 저장되기 때문에 실패한 Job 재실행, 상태 추..