JAVA · SPRING-BATCH
스프링 배치 레퍼런스 문서와, 강의를 통해 학습 후 Spring Batch의 기본 개념과 실전에 대해서 정리해보고자 합니다.
@StepScope — Step 실행마다 새로운 빈을 만드는 이유
Spring의 빈 스코프는 기본이 singleton이다. 애플리케이션이 시작될 때 한 번 생성되고, 이후로는 같은 인스턴스를 계속 재사용한다. Spring Batch에는 @StepScope라는 커스텀 스코프가 있다. 이 스코프가 붙은 빈은 Step이 실행될 때마다 새로운 인스턴스가 생성된다. Step이 끝나면 인스턴스도 함께 소멸한다. java @Bean...
1.1-type-of-steps
1장은 Spring Batch Step의 두 가지 유형을 소개하면서 시작하려고 한다. 0장에서 배치 처리의 일반적인 패턴이 읽고-처리하고-쓰기라고 말했다. 하지만 모든 배치가 꼭 데이터를 이렇게 다루는 건 아니다. 이 차이가 바로 Step의 유형을 나누는 기준이 된다. Spring Batch의 Step은 다음과 같이 크게 두 가지 처리 모델로 나뉜다 - 태...
1.2-job-parameters
JobParameters. 이름만 들으면 그저 '매개변수' 따위로 들리겠지만, 그 실체는 다르다. 이것은 배치의 운명을 결정짓는 통제 변수다 JobParameters는 배치 작업에 전달되는 입력 값이다. 이 값은 배치가 어떤 조건에서, 어떤 데이터를 다룰지를 결정하는 데 핵심적인 역할을 한다. 예를 들어, 매일 실행되는 배치 작업에서 날짜는 매번 바뀐다....
5장. 1절 : Job과 메타데이터 저장소
"배치가 도중에 죽어버리면 어떻게 할 것인가?" 현실의 배치 시스템은 완벽하지 않다. 네트워크 장애, 데이터베이스 연결 오류, 디스크 공간 부족 등 수많은 이유로 작업이 중단될 수 있다. 특히 대용량 데이터를 다룰 때는 이런 문제가 치명상이 된다. 이런 문제를 해결하려면 다음 기능들이 필요하다. 1. 어떤 작업이 실행되었는지 추적할 수 있어야 한다. 2....
AsyncItemProcessor
이 구조의 핵심은 읽기는 동기, 처리는 비동기, 쓰기는 동기(Future Unwrapping)이다. - 1. ItemReader(Main Thread): - 단일 스레드에서 Chunk Size만큼 데이터를 순차적으로 읽는다. - 따라서 Reader에는 Executor가 필요 없다. - 2. AsyncItemProcessor(Main Thread -> Wor...
FaultTolerant (작성 중..)
배치 작업에서 실패는 피할 수 없는 현실이다. 파일에 일부 잘못된 데이터가 저장되었을 수도 있고, 데이터베이스와의 통신이 일시적으로 실패할 수도이 있다. 그렇다고 해서 배치 작업이 중단되어도 괜찮을까? 스텝 실행 중 단 하나의 예외라도 발생하면? ItemReader에서 읽는 중이든, ItemProcessor에서 처리 중이든, ItemWriter에서 쓰는 중...
FlatFileItemReader
- 파일 기반 배치 처리 - 많은 시스템에서 여전히 파일 기반 데이터 처리가 중요한 역할을 한다 - 예를 들어, 금융 거래 내역이 담긴 CSV 파일이나, 고객 데이터 파일(XML/JSON) 같은 것들이 있다. - 이런 데이터는 주기적으로 처리되어 시스템에 통합되거나 보고서로 만들어진다. - 파일 처리의 실체 - 직접 구현 하면 이런 고통을 맛...
FlatFileItemWriter
- 데이터를 플랫 파일 형식으로 쓰는 작업을 담당 - 데이터를 파일에 쓸 때 흔히 발생하는 복잡한 저수준 작업들, 파일 포맷 맞추기, 데이터를 한 줄씩 작성, 내부적으로 버퍼링을 활용한 최적화 등의 귀찮은 일들을 직접 구현할 필요가 없음 - 선언적인 설정만으로 대량의 파일 쓰기 작업을 효율적으로 처리할 수 있음 <br /> - 어떻게 도메인 객체를 파일에...
ItemProcessor
우리의 비즈니스 로직이 살아 숨쉬는 전장으로 진입해보자. <br> 이제부터 ItemProcessor를 올바르게 다루는 방법을 파헤쳐보자. ItemProcessor의 process() 메서드가 null을 반환하면 해당 item은 ItemWriter로 전달되는 Chunk에서 완전히 제외된다. - Spring Batch는 먼저 지정된 청크 사이즈만큼 read()...
Spring Batch Listener
- 리스너는 배치 처리의 주요 순간들을 관찰하고, 각 시점에 필요한 동작을 정의할 수 있는 도구 - 배치 처리 중 발생하는 특정 이벤트를 감지하고 원하는 로직을 실행 할 수 있게 해줌 - Job 시작 전후, Step 실행 전후는 물론, 청크 단위 또는 아이템 단위 처리 시점까지 모든 과정에 개입할 수 있음 - 이를 통해 로깅, 모니터링, 에러 처리등 우리가...
드디어 정체를 드러낸 ItemStream
지난 장에서 우리는 ItemStream 이라는 인터페이스가 반복적으로 등장하는 것을 확인했다. <br> 실제로 ItemStream은 Spring Batch의 핵심 인터페이스로 Spring Batch의 대부분의 ItemReader와 일부 ItemWriter 구현체에서 이 ItemStream이라는 인터페이스를 공통적으로 구현하고 있다. java public i...
죽음의 스프링 배치
들어가기에 앞서서 배치란 무엇인지부터 살펴보자. 배치(Batch) 처리는 대량의 데이터를 정해진 시간에 자동으로 일괄 처리하고 결과를 출력하는 작업을 말한다. 실제 예시를 들어보자면, 매일 새벽 4시, 서버 점검 시간이 되면 전날의 유저 로그를 분석하고, 랭킹을 업데이트하고, 불법 프로그램 사용자를 검출하는 작업 등이 있을 수 있다. 이걸 사람이 직접 처리...
첫 번째 Batch Job을 작성해보자
Spring Initializer를 사용해 프로젝트를 생성해보자. Spring Initializer는 Spring Boot 프로젝트를 빠르게 생성할 수 있는 공식 도구다. > https://start.spring.io 웹사이트나 IntelliJ IDEA의 내장 Spring Initializer 기능으로도 생성할 수 있다. > > 하지만 CLI 방식이 가장...