일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 백준
- 기본
- 함수
- Scanner
- java프로그래밍
- 자바
- IFELSE
- 알고리즘
- 데이터
- java
- MySQL
- Spring
- 파이썬프로그래밍기초
- 1차원배열
- 스캐너
- FOR문
- for
- error
- IF
- 변수
- 배열
- IF문
- C언어
- Scanner class
- 백준알고리즘
- 하드웨어
- 반복문
- 스캐너클래스
- 자료구조
- 유비쿼터스
- Today
- Total
정리하고기록하자
Spring Boot Batch 본문
Spring Boot Batch 란
Spring Batch는 대량의 데이터 처리를 위한 프레임워크이다. 반복적인 작업을 수행하는 일괄 처리 (Batch Processing) 작업을 효율적으로 처리 할 수 있는 기능을 제공한다.
대용량 데이터 처리나 주기적인 업무 처리 등을 효율적으로 처리 할 수 있고, 대용량 데이터 처리에 적합한 분산 방식의 처리를 지원한다.
- 대량의 정보에 대해서 자동화되고 복잡한 처리가 가능하다. 이러한 작업으로는 시간 기반 이벤트 ( ex : 월말 계산 등..)
- 큰 데이터를 걸쳐 반복적으로 처리되는 복잡한 규칙을 주기적으로 적용한다 ( ex : 보험혜택 등.. )
- 일반적으로 검증 및 트랜잭션 방식으로 처리가 필요한 내부 및 외부 시스템에서 수신한 정보를 기록 시스템에 통합한다.
Spring Batch의 특징
Spring Batch는 많은 양의 데이터를 효율적으로 처리할 수 있고, 다양한 기능을 제공한다.
대용량 데이터 처리, 트랜잭션 관리, 재시도 기능 등이 해당된다.
- 대용량 데이터 처리 : Spring Batch는 방대한 양의 데이터를 처리 할 수 있다. 데이터 처리 작업을 분산 처리 할 수 있어서, 대용량 데이터 처리에 적합하다.
- 트랜잭션 관리 : Spring Batch는 트랜잭션 관리를 지원한다. 데이터 처리 중 실패한 작업은 롤백하여 데이터 일관성을 유지할 수 있다.
- 재시도 가능 : Spring Batch는 작업 중 실패한 경우, 작업을 재시도할 수 있는 기능을 제공한다. 또한, 재시도 횟수를 설정할 수 있다.
스케줄러(Scheduler)
스케줄러(Scheduler)란 일정한 시간 간격으로 반복적으로 수행되거나 특정 시간에 수행되도록 예약해 놓는 작업을 자동으로 실행해 주는 시스템이다.
스케줄러를 이용하면 주기적으로 반복되는 일일 업무나 특정 시간에 실행해야 하는 작업 등을 자동으로 처리 할 수 있다.
배치 프로그램 / 스케줄러
비슷한 기능을 가지고 있지만 동일한 것은 아니다. 실행방법과 목적에 큰 차이 점이 있다.
- 배치 프로그램은 일괄 처리를 위한 프로그램이며 '정해진 시간에 실행되지 않고 사용자의 명령이 있을 때 실행' 한다.
- 스케줄러는 '정해진 시간에 자동으로 실행' 되는 프로그램이며 '주기적으로 실행되는 작업'을 설정 할 수 있다.
배치 사용 목적
대량 데이터 처리 - 대규모 데이터베이스, 로그 파일, CSV 파일 등에서 '데이터 추출 및 처리'를 위해 사용한다.
자동화된 작업 처리 - 스케줄러를 이용하여 주기적으로 '반복되는 작업' 자동 처리를 위해 사용한다.
분산 처리 - 여러 서버에서 대량의 '데이터 처리 가능'을 위해 사용한다.
재시도 및 로깅 - 데이터 처리 중 오류 발생 시 '자동 재시도 및 로깅 기능' 지원을 위해 사용된다.
데이터 분석 - 데이터 마이그레이션, 백업 및 복원, 데이터 분석 등 다양한 용도로 사용된다.
배치 주요 기능
Job과 Step을 이용한 배치 프로세스 구현
- 배치 처리의 단위 작업(Job)과 작은 단위 작업(Step)을 이용하여 배치 프로세스를 구현하는 기능을 제공한다.
1)Chunk 지향 처리 방식을 통한 대용량 데이터 처리
- Chunk 단위로 데이터를 처리하여 대용량 데이터 처리 기능을 제공한다.
2)Quartz, 3)Cron 등의 스케줄러를 이용한 배치 작업 스케줄링
- 스케줄러를 이용하여 배치 작업을 주기적으로 실행하도록 스케줄링을 제공한다.
Batch 작업에 대한 로깅과 예외 처리 기능 제공
- Batch 작업 수행 중 로깅과 예외 처리를 지원하여 안정적인 배치 작업을 제공한다.
1) Chunk 지향 처리 방식
- 대용량 데이터를 처리하는 데 있어서 '메모리 사용량을 최소화' 하고 ' 대용량 데이터를 작은 Chunk 단위로 나누어 처리' 하는 방식이다.
2) Quartz
- Java 기반의 오픈 소스 '스케줄링 라이브러리' 이며 특정 시간에 작업을 자동으로 실행하도록 예약을 할 수 있도록 기능을 제공한다.
3) Cron
- Cron은 리눅스와 유닉스 계열 운영체제에서 사용되는 예약 작업 '스케줄링 시스템' 입니다. 특정 시간에 실행되어야 하는 작업을 정의하는 데 사용된다.
Spring Batch 전체 프로세스
1. Job Launcher로 Job을 실행한다. ( Job Launcher > Job )
2. Job은 Step을 통해 실제 배치처리를 수행한다. ( Job > Step )
3. Step에서는 읽어오고 ( Item Reader ) > 처리하고 ( Item Processor ) > 저장 ( Item Writer ) 을 수행 한다.
( Step > Item Reader, Item Processor, Item Writer )
Job
Job란 하나 이상의 Step으로 구성이 되며 '배치 처리의 최상위 단위'를 의미한다.
- 실행 시점에 파라미터를 전달받을 수 있으며 실행 결과를 반환할 수 있다.
- 1개의 Job은 1개 이상의 Step으로 구성되어 있다.
- Job 수행과정
@Bean
public Job footballJob(JobRepository jobRepository) {
return new JobBuilder("footballJob", jobRepository)
.start(playerLoad())
.next(gameLoad())
.next(playerSummarization())
.build();
}
- JobParameters 수행과정
- 용어 설명
Job | 배치 처리의 '단위 작업'을 의미한다. |
JobInstance | 하나의 Job 실행을 나타내는 '인스턴스'를 의미한다. |
JobParameters | Job 실행 시 필요한 '파라미터'를 의미한다. |
JobRepository | Job 실행 정보를 저장하고 관리하는 '저장소'를 의미한다. |
JobLauncher | Job 을 실행 하는 인터페이스를 의미한다. |
JobExecution | Job 실행 정보를 나타내는 인스턴스를 의미한다. |
JobExecutionListener | Job 실행 전후로 수행할 작업을 정의하는 인터페이스를 의미한다. |
Step
Step 이란 실제로 배치 처리를 '수행' 하는 단위를 의미한다. Spring Batch Job안에는 한개 이상의 Step으로 구성되어 있다.
- Step에서는 하나의 작업만 처리를 수행하는 'Tasklet'방식 또는 Reader-Processor-Writer 묶음으로 여러 작업을 처리를 하는 'Chunk' 방식이 있다.
- 용어 설명
Step | Job을 구성하는 작은 단위 작업을 의미한다. |
ItemReader | 데이터를 읽어오는 인터페이스를 의미한다. |
ItemProcessor | 읽어온 데이터를 처리하는 인터페이스를 의미한다. |
ItemWriter | 처리한 데이터를 출력하는 인터페이스를 의미한다. |
ExecutionContext | Step 실행 중 필요한 컨텍스트 정보를 의미한다. |
StepExecution | Step 실행 정보를 나타내는 인스턴스를 의미한다. |
StepExecutionListener | Step 실행 전후로 수행할 작업을 정의하는 인터페이스를 의미한다. |
'Spring' 카테고리의 다른 글
DB 생성하기 (0) | 2023.11.28 |
---|---|
Spring-boot 신규 프로젝트 만들기 (2) (0) | 2023.11.28 |
Spring-boot 신규 프로젝트 만들기 (1) (2) | 2023.11.28 |
Redis (0) | 2023.09.22 |
@RequiredArgsConstructor (0) | 2023.09.18 |