해당 글은 <처음 배우는 스프링 부트 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
설명: 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 단위)
'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 |