WEB/Spring Batch 13

실전! 스프링 배치 어플리케이션 개발

애플리케이션 예제 Job-1 기능 파일로부터 데이터를 읽어서 DB에 적재한다. 세부내용 파일은 매일 새롭게 생성된다. 매일 정해진 시간에 파일을 로드하고 데이터를 DB에 업데이트 한다. 이미 처리한 파일은 다시 읽지 않도록 한다. Job-2 기능 DB 로부터 데이터를 일어서 API 서버와 통신한다 내용 Partitioning 기능을 통한 멀티 스레드 구조로 Chunk 기반 프로세스를 구현한다 제품의 유형에 따라서 서로 다른 API 통신을 하도록 구성한다(ClassifierCompositerItemWriter) API 서버는 3개로 구성하여 요청을 처리한다 제품내용과 API 통신 결과를 각 파일로 저장한다. (FlatFileWriter 상속) Scheduler 기능 시간을 설정하면 프로그램을 가동시킨다. ..

WEB/Spring Batch 2023.04.11

스프링 배치 이벤트 리스너 & 스프링 배치 테스트 및 운영

Spring Batch Listener 기본개념 Listener는 배치 흐름 중에 Job , Step , Chunk 단계의 실행 전후에 발생하는 이벤트를 받아 용도에 맞게 활용할 수 있도록 제공하는 인터셉터 개념의 클래스. 각 단계별로 로그기록을 남기거나 소요된 시간을 계산하거나 실행상태 정보들을 참조 및 조회 할 수 있다. 이벤트를 받기 위해서는 Listener 를 등록해야 하며 등록은 API 설정에서 각 단계별로 지정 할 수 있다. Job JobExecutionListener – Job 실행 전후 Step StepExecutionListener – Step 실행 전후 ChunkListener – Chunk 실행 전후 (Tasklet 실행 전후) , 오류 시점 ItemReadListener – Item..

WEB/Spring Batch 2023.04.04

스프링 배치 멀티 스레드 프로세싱

기본 개념 RestTempate가 실제로 실행할 로직이 들어있는 RepeatCallback 각 스레드마다 실행시키게 된다. RepeatCallback안에서 일어나는 Chunk process도 각 스레드마다 일어나게 된다. 스프링 배치 스레드 모델 기본적으로는 단일 스레드 방식으로 작업 성능 향상과 대규모 데이터 작업을 위한 비동기 처리 및 Scale out 기능을 제공한다. Local 과 Remote 처리를 지원한다. AsyncItem Processor / Writer = 별도의 스레드가 할당되어 작업을 처리하는 방식 Multi-threaded step = Step 내 Chunk 구조인 ItemReader, Processor, Writer 마다 여러 스레드가 할당되어 실행하는 방법 Remote Chunk..

WEB/Spring Batch 2023.03.30

스프링 배치 반복 및 오류 제어

Repeat Spring Batch는 얼마나 작업을 반복해야 하는지 알려 줄수 있는 기능을 제공한다. 특정 조건이 충족 될 때까지 (또는 특정 조건이 아직 충족되지 않을 때까지) Job 또는 Step 을 반복하도록 배치 애플리케이션을 구성 할 수 있다. 스프링 배치에서는 Step 의 반복과 Chunk 반복을 RepeatOperation 을 사용해서 처리하고 있다 기본 구현체로 RepeatTemplate 를 제공한다 반복 종료를 결정하는 3가지 항목 RepeatStatus 스프링 배치의 처리가 끝났는지 판별하기 위한 열거형(enum) CONTINUABLE - 작업이 남아 있음 FINISHED - 더 이상의 반복 없음 CompletionPolicy RepeatTemplate 의 iterate 메소드 안에서 ..

WEB/Spring Batch 2023.03.25

스프링 배치 청크 프로세스 활용 - ItemWriter , ItemProcessor

FlatFileItemWriter - 개념 및 API 소개 2차원 데이터(표)로 표현된 유형의 파일을 처리하는 ItemWriter 고정 위치로 정의된 데이터 필드나 특수 문자에 의해 구별된 데이터의 행을 기록한다 Resource 와 LineAggregator 두 가지가 요소가 필요하다 LineAggregator Item 을 받아서 String 으로 변환하여 리턴한다 FieldExtractor를 사용해서 처리할 수 있다 구현체 PassThroughLineAggregator, DelimitedLineAggregator, FormatterLineAggregator Reader에서 봤던 Tokenizer(comma기준으로 쪼개는것처럼) comma 기준으로 다시 합(aggregate) 해준다. FieldExtra..

WEB/Spring Batch 2023.03.24

스프링 배치 청크 프로세스 활용 - ItemReader

FlatFileItemReader - 개념 및 API 소개 기본개념 2차원 데이터로 표현된 유형의 파일을 처리하는 ItemReader 일반적으로 고정 위치로 정의된 데이터 필드나 특수 문자에 의해 구별된 데이터의 행을 읽는다. Resource 와 LineMapper 2가지 요소가 필요하다. Resource = 스프링에서 제공하는 인터페이스로 FileSystemResource , ClassPathResource 구현체가 있다. LineMapper 파일의 라인 한줄을 Object로 변환해서 FlatFileItemReader 로 리턴한다. 단순히 문자열을 받기 때문에 문자열을 토큰화 해서 객체로 매핑하는 과정이 필요하다. LineTokenizer와 FieldSetMapper 를 사용해서 처리한다. FieldS..

WEB/Spring Batch 2023.03.23

스프링 배치 청크 프로세스 이해

Chunk 기본개념 Chunk란 여러 개의 아이템을 묶은 하나의 덩어리 , 블록을 의미함 한번에 하나씩 아이템을 입력 받아 Chunk 단위의 덩어리로 만든 후 Chunk 단위로 트랜잭션을 처리함 , 즉 Chunk 단위의 Commit 과 Rollback 이 이루어짐 일반적으로 대용량 데이터를 한번에 처리하는 것이 아닌 청크 단위로 쪼개어서 더 이상 처리할 데이터가 없을 때까지 반복해서 입출력하는데 사용됨 Chunk = ItemReader 로 읽은 하나의 아이템을 Chunk에서 정한 개수만큼 반복해서 저장하는 타입 Chunk = ItemReader로부터 전달받은 Chunk 를 참조해서 ItemProcessor에서 가공 , 필터링 한후에 ItemWriter에게 전달하는 타입 하나의 chunk가 읽고 ,가공,쓰..

WEB/Spring Batch 2023.03.22

스프링 배치 실행 - Flow

FlowJob - 개념 및 API 소개 1. 기본개념 - Step을 순차적으로만 구성하는 것이 아닌 특정한 상태에 따라 흐름을 전환하도록 구성할 수 있으며 FlowJobBuilder에 의해 생성된다. Step이 실패하더라도 Job은 실패로 끝나지 않도록 해야하는 경우 Step이 성공했을 때 다음에 실행해야할 Step을 구분해서 실행 해야하는 경우 특정 Step은 전혀 실행되지 않게 구성 해야하는 경우 Flow 와 Job은 흐름을 구성하는데만 관여하고 실제 비지니스 로직은 Step에서 이루어진다. 내부적으로 SimpleFlow 객체를 포함하고 있으며 Job 실행시 호출한다. @Bean public Job batchJob() { return jobBuilderFactory.get("batchJob") .st..

WEB/Spring Batch 2023.03.03

스프링 배치 실행 - Step

StepBuilderFactory 1. StepBuilderFactory - StepBuilder를 생성하는 팩토리 클래스로서 get(String name) 메서드 제공 - StepBuilderFactory.get("stepName")으로 Step을 생성함 2. StepBuilder - Step을 구성하는 설정 조건에 따라 다섯 개의 하위 빌더 클래스를 생성하고 실제 Step 생성을 위임한다. - TaskletStepBuilder = TaskletStep을 생성하는 기본 빌더 클래스 - SimpleStepBuilder = TaskletStep을 생성하며 내부 저긍로 청크기반의 작업을 처리하는 ChunkOrientedTasklet 클래스를 생성 - PartitionStepBuilder = Partition..

WEB/Spring Batch 2023.02.28

스프링 배치 실행 - Job

배치초기화 설정 1. JobLauncherApplicationRunner - Spring Batch 작업을 시작하는 ApplicationRunner로서 BatchAutoConfiguration에서 생성 - ApplicationRunner의 구현체임으로 spring boot가 정상적으로 구동되자마자 실행됨 - 기본적으로 빈으로 등록된 모든 Job들을 실행시킨다. 2. BatchProperties - Spring Batch의 환경설정 클래스 - Job 이름 , 스키 초기화 설정, 테이블의 prefix 등을 설정할 수 있다. - application.properties or application.yml 파일에 설정함 spring batch: jdbc: initialize-schema: always 3. Job..

WEB/Spring Batch 2023.02.23