목록Spring/Spring Batch (25)
개발놀이터
스프링 부트가 5.0에 들어오면서 기존 Job과 Step을 작성할 때 사용하던 JobBuilderFactory, StepBuilderFactory가 Deprecated 되었습니다. 때문에 기존 방법 대신 아래와 같은 방법으로 사용해야합니다. @Configuration @RequiredArgsConstructor @Slf4j public class MonthClickToZeroBatch { private final EntityManagerFactory emf; private final JobRepository jobRepository; private final PlatformTransactionManager platformTransactionManager; private static final int PA..
본 포스팅은 인프런의 정수원님의 스프링 배치 강의를 듣고 정리한 포스팅입니다. 더 자세한 내용은 강의를 참고해주세요. Parallel Steps 기본 개념 SplitState 를 사용해서 여러 개의 Flow 들을 병렬적으로 실행하는 구조 실행이 다 완료된 후 FlowExecutionStatus 결과들을 취합해서 다음 단계를 결정한다. 구조 Job이 Flow를 통해 SplitState를 만들어서 TaskExecutor를 통해 스레드를 생성하고 각각의 FutureTask를 통해 멀티테스킹을 유도합니다. 앞선 포스팅에서 AsyncItemProcessor, AsyncItemWriter와 Multi-threaded Step 처럼 Step을 멀티스레드로 처리하는 것이 아닌 Flow를 멀티스레드로 처리하고 싶을 때 ..
본 포스팅은 인프런의 정수원님의 스프링 배치 강의를 듣고 정리한 포스팅입니다. 더 자세한 내용은 강의를 참고해주세요. Multi-threaded Step 기본 개념 Step내에서 멀티 스레드로 Chunk 기반 처리가 이루어지는 구조 TaskExecutorRepeatTemplate이 반복자로 사용되며 설정한 개수 만큼의 스레드를 생성하여 수행한다. 이를 그림으로 알아보면 다음과 같습니다. 기존에는 TaskletStep이 RepeatCallback을 수행하고 이 때 ChunkOrientedTasklet이 수행됩니다. 하지만 Multi-threaded Step 에서는 TaskExecutorRepeatTemplate이 Runnable을 실행하고 그 안에서 RepeatCallback이 수행됩니다. 이 부분이 원래..
본 포스팅은 인프런의 정수원님의 스프링 배치 강의를 듣고 정리한 포스팅입니다. 더 자세한 내용은 강의를 참고해주세요. AsyncItemProcessor/AsyncItemWriter 기본 개념 Step 안에서 ItemProcessor 가 비동기적으로 동작하는 구조 AsyncItemProcessor와 AsyncItemWriter가 함께 구성이 되어야 함 AsyncItemProcessor 로부터 AsyncItemWriter 가 받는 최종 결괏값은 List 타입이며 비동기 실행이 완료될 때까지 대기한다. spring-batch-integration 의존성이 필요하다. AsyncItemProcessor는 작업 처리를 ItemProcessor에게 맡기고 ItemProcessor는 Async한 작업과정을 거치는 것입..
본 포스팅은 인프런의 정수원님의 스프링 배치 강의를 듣고 정리한 포스팅입니다. 더 자세한 내용은 강의를 참고해주세요. 기본 개념 단일 스레드 vs 멀티 스레드 프로레스 내 특정 작업을 처리하는 스레드가 하나일 경우 단일 스레드, 여러 개 일 경우 멀티 스레드로 정의할 수 있다. 작업 처리에 있어서 단일 스레드와 멀티 스레드의 선택 기준은 어떤 방식이 자원을 효율적으로 사용하고 성능 처리에 유리한가 하는 점이다. 일반적으로 복잡한 처리나 대용량 데이터를 다루는 작업일 경우 전체 소요 시간 및 성능상의 이점을 가져오기 위해 멀티 스레드 방식을 선호한다. 멀티 스레드 처리 방식은 데이터 동기화 이슈가 존재하기 때문에 최대한 고려해서 결정해야 한다. 스프링 배치 스레드 모델 스프링 배치는 기본적으로 단일 스레드..
본 포스팅은 인프런의 정수원님의 스프링 배치 강의를 듣고 정리한 포스팅입니다. 더 자세한 내용은 강의를 참고해주세요. ItemReader와 마찬가지로 ItemWriter 또한 Flat File이나 XML, json과 같이 데이터를 저장할 수 있지만 분량 관계상 DB와 관련된 JdbcItemWriter, JpaItemWriter 이 두가지에 대해서만 포스팅 할 예정입니다. 이 부분 참고해서 봐주시면 감사하겠습니다. JdbcBatchItemWriter 기본 개념 JdbcCursorItemReader 설정과 마찬가지로 DataSource 를 지정하고 SQL 속성에 실행할 쿼리를 설정 JDBC의 Batch 기능을 사용하여 bulk insert/update/delete 방식으로 처리 단건 처리가 아닌 일괄 처리이..
본 포스팅은 인프런의 정수원님의 스프링 배치 강의를 듣고 정리한 포스팅입니다. 더 자세한 내용은 강의를 참고해주세요. ItemReader에는 다양한 구현체가 존재합니다. Flat File에 대한 구현체도 있고, XML을 읽는 구현체, json에서 읽는 구현체 다양한 구현체가 있습니다. 우리는 그 중에서 DB와 관련된 ItemReader에 대해 본격적으로 공부해볼 것입니다. 그 이유는 기본적으로 Flat File이나 XML이나 json을 읽는 것은 흔하지 않기 때문입니다. 따라서 우리는 이번 포스팅에서 ItemReader의 구현체 중 JbdcCursorItemReader, JpaCursorItemReader, JdbcPagingItemReader, JpaPagingItemReader 이 네가지 구현체에 대..
본 포스팅은 인프런의 정수원님의 스프링 배치 강의를 듣고 정리한 포스팅입니다. 더 자세한 내용은 강의를 참고해주세요. ItemReader 기본 개념 다양한 입력으로부터 데이터를 읽어서 제공하는 인터페이스 플랫(Flat) 파일 - csv, txt (고정 위치로 정의된 데이터 필드나 특수문자로 구별된 데이터의 행) XML, Json Database JMS, RabbitMQ 와 같은 Message Queuing 서비스 Custom Reader - 구현 시 멀티 스레드 환경에서 스레드에 안전하게 구현할 필요가 있음 ChunkOrientedTasklet 실행 시 필수적인 요소로 설정해야 한다. 구조 T read() 입력 데이터를 읽고 다음 데이터로 이동한다. 아이템 하나를 리턴하며 더 이상 아이템이 없는 경우 n..
이제까지 올렸던 키워드들을 바탕으로 정리해보는 시간을 가져보도록 하겠습니다. 스프링 배치 키워드 Job Job의 최상위 단위 여러개의 Step을 포함하는 컨테이너 JobBuilderFactory를 이용해 생성 가능 여러개의 Job 구현체가 있지만 우리는 그 중 SimpleJob을 메인으로 사용 Step tasklet, ItemReader, ItemProcessor, ItemWriter를 포함하는 Job 하나하나의 실행 단위 StepBuilderFactory를 이용해 생성 가능 여러개의 Step 구현체가 있지만 기본적으로 사용되는 것은 tasklet을 사용할 때 생성되는 TaskletStep이 있고 TaskletStep을 상속한 Chunk 지향 처리를 사용할 때 생성되는 ChunkOrientedTaskle..
본 포스팅은 인프런의 정수원님의 스프링 배치 강의를 듣고 정리한 포스팅입니다. 더 자세한 내용은 강의를 참고해주세요. Chunk 기본 개념 Chunk 란 여러 개의 아이템을 묶은 하나의 덩어리, 블록을 의미 한번에 하나씩 아이템을 입력 받아 Chunk 단위의 덩어리로 만든 후 Chunk 단위로 트랜잭션을 처리함, 즉, Chunk 단위의 Commit 과 Rollback 이 이루어짐 일반적으로 대용량 데이터를 한번에 처리하는 것이 아닌 청크 단위로 쪼개어서 더 이상 처리할 데이터가 없을 때까지 반복해서 입출력하는데 사용됨 Chunk vs Chunk Chunk는 ItemReader로 읽은 하나의 아이템을 Chunk 에서 정한 개수만큼 반복해서 저장하는 타입 Chunk는 ItemReader로부터 전달받은 Chu..