정리하고기록하자

Spring Boot Batch 본문

Spring

Spring Boot Batch

정리하고기록하자 2024. 7. 29. 14:32
반응형

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 LauncherJob을 실행한다. ( Job Launcher > Job

2. JobStep을 통해 실제 배치처리를 수행한다. ( Job > Step )

3. Step에서는 읽어오고 ( Item Reader ) > 처리하고 ( Item Processor ) > 저장 ( Item Writer ) 을 수행 한다.

( Step > Item Reader, Item Processor, Item Writer )


Job

Job란 하나 이상의 Step으로 구성이 되며 '배치 처리의 최상위 단위'를 의미한다.

  • 실행 시점에 파라미터를 전달받을 수 있으며 실행 결과를 반환할 수 있다.
  • 1개의 Job1개 이상의 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