스프링배치 Multi-thread Step 내에서 멀티 스레드로 Chunk 기반 처리가 이루어지는 구조다. TaskExecutorRepeatTemplate이 반복자로 사용된다. 설정한 개수만큼의 스레드를 생성하여 수행한다. ItemReader는 Thread-safe 인지 반드시 확인해야 한다. 데이터를 소스로부터 읽어오는 역할이기 때문에 스레드마다 중복해서 데이터를 읽어오지 않도록 동기화가 보장되어야한다. 스레드마다 새로운 Chunk가 할당되어 데이터 동기화가 보장된다. 스레드끼리 Chunk를 서로 공유하지 않는다. 예제코드 MultiThreadCustomer.java package com.project.springbatch._43_multiThread; import lombok.AllArgsConstr..
단일스레드 vs 멀티스레드 단일 스레드 : 프로세스 내 특정 작업을 처리하는 스레드가 하나인 경우 멀티 스레드 : 프로세스 내 특정 작업을 처리하는 스레드가 여러개인 경우 작업 처리에 있어서 단일 스레드와 멀티 스레드의 선택 기준은 "어떤 방식이 자원을 효율적으로 사용하고 성능 처리에 유연한가" 이다. 일반적으로 복잡한 처리나 대용량 데이터를 다루는 작업일 경우 전체 소요 시간 및 성능상의 이점을 가져오기 위해 멀티 스레드 방식을 선택한다. 멀티 스레드 처리 방식은 데이터 동기화 이슈가 존재하기 때문에 최대한 고려해서 결정해야한다. 스프링 배치 스레드 모델 스프링 배치는 기본적으로 단일 스레드 방식으로 작업을 처리한다. 성능 향상과 대규모 데이터 작업을 위한 비동기 처리 및 Scale out 기능을 제공..
ItemReaderAdapter SpringBatch에서 Job 안에 이미 있는 DAO나 다른 서비스를 ItemReader 안에서 사용하고자 할 때 위임 역할을 한다. Adapter 패턴을 도입하여 지정한 서비스를 호출하도록 한다. Job 생성 ItemReaderAdapterConfiguration.java package com.project.springbatch._57_readerAdapter; import lombok.RequiredArgsConstructor; import org.springframework.batch.core.Job; import org.springframework.batch.core.Step; import org.springframework.batch.core.configurat..
Paging 방식 페이징 단위로 데이터를 조회하는 방식으로 Page Size만큼 한번에 메모리로 가지고 온 다음 한개씩 읽는다. 한 페이지를 읽을때마다 Connection을 맺고 끊기 때문에 대량의 데이터를 처리하더라도 SocketTimeout 예외가 거의 발생하지 않는다. 시작 행 번호를 지정하고 페이지에 반환시키고자 하는 행의 수를 지정한 후 사용한다. (offset-limit) 페이징 단위의 결괌나 메모리에 할당하기 때문에 메모리 사용량이 적다. Connection 연결 유지 기간이 길지 않고 메모리 공간을 효율적으로 새용해야하는 데이터 처리에 적합하다. JdbcPagingItemReader Paging 기반의 JDBC 구현체로써, 쿼리에 시작 행 번호(offset)와 페이지에서 반환할 행수(lim..
Job 생성 ItemStreamConfiguration.java package com.project.springbatch._41_itemStream; import com.project.springbatch._41_itemStream.custom.CustomItemStreamReader; import com.project.springbatch._41_itemStream.custom.CustomItemStreamWriter; import lombok.RequiredArgsConstructor; import org.springframework.batch.core.Job; import org.springframework.batch.core.Step; import org.springframework.batch.c..
SpringBatch 사용을 위한 스프링 설정 (1) 의존성 추가 org.springframework.boot spring-boot-starter-batch (2) 스프링부트 Application 파일에 어노테이션 추가 @EnableBatchProcessing // 배치 사용을 위한 선언 @SpringBootApplication public class BatchApplication { public static void main(String[] args) { SpringApplication.run(BatchApplication.class, args); } } SpringBatch 의 Job 등록 import com.backend.batch.day01.dto.TempLibraryDto; import com...