-
Spring Batch (정리)Tech/SpringBoot 2019. 4. 6. 14:25반응형
해당 글은 <처음 배우는 스프링 부트 2.0> 과 기타 를 참고하여 정리한 내용 입니다.
-
Spring Boot Batch 장점
- 대용량 데이터 처리에 최적화
- 효과적인 통계처리와 같은 재사용 가능한 필수 기능 지원
- 자동화 처리
- 예외사항과 비정상 동작에 대한 방어 기능
-
Spring Boot Batch 주의 사항
- 복잡한 구조와 로직을 피할것
- 데이터 무결성을 유지하는 유효성 검사 등의 방어책 필요
- 잦은 I/O 사용 최소화를 위한 개발 필요
- Batch 처리시 다른 프로젝트에 영향을 주는지 확인 할것
- Spring boot batch 는 스케줄러를 제공 하지 않음
해결책: Quartz Framework, Jenkins
장점: Quartz 사용시 클러스터링 및 다양한 스케줄링, 실행 이력 관리가능
비추천: 리눅스의 crontab 사용
-
배치 처리 절차
1. Read : data 읽기
2. Processing: 데이터 처리
3. Write: 가공 처리된 데이터 저장
-
배치 처리 관련 객체들 관계
-
Job
- Batch 처리 과정을 하나의 단위로 만들어 표현한 객체
- 전체 배치 처리에 있어 최상단 계층에 위치함
- 여러개의 Step 인스턴스를 포함하는 컨테이너
- JobBuilderFactory 사용한 Job 객체 생성
> JobBuilder: Job 생성 방식에 따라 아래 구체적인 빌더 사용
- SimpleJobBuilder —start(step)
- JobFlowBuilder —start(flow)
- JobFlowBuilder — flow(step)
- Job 생성 sample
Job 생성 sample 설명: instagram_crawler 이름을 가진 Job 을 생성할수 있는 JobBuilder 객체 인스턴스 반환하며, SimpleJobBuilder 로 Job 생성.
- JobInstance:
Job 이 실행될 때 하나의 Job 실행 단위
JobInstance 는 실행 결과에 따라 JobExecution을 1개 이상 가질수 있다.
(예: 실패시 성공할때까지의 JobInstance는 여러개의 JobExecution 을 가짐)
- JobExecution:
JobInstance 에 대한 한 번의 실행을 나타내는 객체
JobExecution 인터페이스는 배치 실행 상태, 시작시간, 종료 시간, JobParam, 상태 등에 대한 정보를 포함하고 있음.
- JobPrameers
Job 실행시 필요한 파라미터를 Map 형식으로 저장하는 객체
JobInstance 를 구분하는 기준으로 사용
타입: String, Long, Date, Double
-
Step
Job 을 처리하는 실질적인 단위, Job 과 1:M 관계
- StepExecution
Step 실행 시마다 StepExecution 생성
Step 실행 상태, Step 이름, Step 시작 및 종료 시간 등 에 대한 Step 실행정보를 포함하고 있음.
-
JobRepository
배치 처리 정보를 담고 있는 메커니즘
JobExecution 생성, StepExecution 저장, 전체 메타데이터 저장/관리하는 역할
-
JobLauncher
Job, JobParameters 와 함게 배치를 실행하는 인터페이스
Job, JobParameters 가 이력에 있고, JobExecution 이 중단한 경우 동일한 JobExecution을 반환
-
ItemReader
Step 의 대상이 되는 배치 데이터를 읽어오는 인터페이스
Step 인터페이스의 read 메서드의 Return Type 은 Generic
-
ItemProcessor
ItemReader 로 읽어온 배치 데이터 처리 역할
Input/Output 타입은 Generic type
-
ItemWriter
배치 데이터를 저장 하는 역할
Generic Type의 List 자료구조를 사용함 (List 의 size 는 설정한 chunk 단위)
반응형'Tech > SpringBoot' 카테고리의 다른 글
Java 8 Stream range (0) 2019.08.24 usage spring data jpa with query dsl (0) 2019.07.14 json array convert to object list in java (0) 2019.01.30 Object List groupping and sorted by fields (0) 2019.01.09 자바 - 시작_종료 시간 사이 체크 (0) 2018.10.08 -