배치란? 스프링 배치란?
- 배치 는 일정 시간마다 또는 특정 조건에 따라 대규모 데이터를 일괄 처리하는 방식을 의미한다.
- 스프링 배치(Spring Batch)는 이러한 배치 작업을 보다 쉽게 구현하고 관리할 수 있도록 돕는 프레임워크이다.
- 스프링 배치는 스프링 생태계의 일환으로, 스프링의 강력한 기능을 활용하여 배치 작업을 안정적이고 효율적으로 수행할 수 있도록 지원한다.
- 이를 통해 개발자는 복잡한 배치 처리 로직을 간결하게 구현하고 모니터링 기능을 통해 배치 작업을 효과적으로 관리할 수 있다.
스프링 배치와 스프링 스케줄러 차이
- 많은 개발자들이 이 두 가지를 혼동하곤 하지만, 스프링 배치(Spring Batch)와 스프링 스케줄러(Spring Scheduler)는 서로 다른 목적과 기능을 가지고 있다.
스프링 배치
- 대량의 데이터를 효율적으로 처리하기 위해 설계된 프레임워크
- 복잡한 배치 작업을 구성하고 실행하기 위한 다양한 도구와 기능을 제공
- 배치 프로세스를 주기적으로 커밋: 막강한 커밋 전략을 제공
- 동시 다발적인 job 의 배치 처리, 대용량 병렬 처리
- 실패 후 수동 또는 스케줄링에 의한 재시작: 오류에 대한 대처 옵션을 제공
- 반복, 재시도, skip 처리 : 실패한 배치 작업을 중단된 지점부터 다시 시작하거나 skip 할 수 있다.
- 모니터링: 배치 작업의 진행 상태와 소요 시간 등의 정보를 제공
- 트랜잭션 관리: 트랜잭션 관리를 지원하여 데이터의 일관성 유지
스프링 배치는 주로 금융, 전자상거래, 건강관리 등 대량의 데이터 처리가 필요한 도메인에서 널리 사용된다.
배치(batch)는 데이터를 실시간으로 처리하는게 아니라, 일괄적으로 모아서 한번에 처리하는 작업을 의미한다.
스프링 스케줄러
- 스프링 스케줄러는 특정 시간에 작업을 실행하기 위해 설계된 도구이다.
- 반복적인 작업을 자동화하고, 시간 기반의 작업을 쉽게 설정할 수 있다.
- 시간 기반 작업 실행: 특정 시간 또는 주기적으로 작업을 실행할 수 있다.
- 다양한 스케줄링 방식: 크론 표현식(Cron Expression) 또는 Fixed Delay 를 통해 작업 스케줄을 설정할 수 있다.
- 비동기 처리: 스케줄된 작업을 비동기적으로 실행하여 애플리케이션의 성능을 유지할 수 있다.
- 유연한 구성: XML 설정 또는 애노테이션을 통해 쉽게 설정할 수 있다.
스프링 스케줄러는 주로 정기적인 백업, 이메일 알림, 데이터 동기화 등의 작업을 자동화하는 데 사용된다.
특징
스프링 배치 (Spring Batch) 스프링 스케줄러 (Spring Scheduler)
목적 | 대량 데이터 일괄 처리 | 시간 기반 작업 실행 |
주요 기능 | 트랜잭션 관리, 재시작 및 중단, 데이터 검증 및 오류 처리 | 크론 표현식, 고정된 지연, 비동기 처리 |
사용 사례 | 금융 데이터 처리, 대량 파일 처리, 시스템 통합 | 정기 백업, 이메일 알림, 데이터 동기화 |
구성 방식 | 주로 XML 설정 또는 Java Config | 애노테이션 또는 XML 설정 |
스프링 배치 구조
- 스프링 배치 (Spring Batch):
- 스프링 배치는 대규모 데이터 처리 작업을 자바 기반의 배치 처리 어플리케이션을 만들기 위한 프레임워크
- 대용량 데이터를 처리하는 경우나 주기적인 업무 일괄 처리 등에 사용
- 스프링 배치는 배치 작업을 트랜잭션 처리와 함께 관리하고, 실패한 작업을 복구하고 재시작할 수 있는 기능을 제공
- 잡(Job), 스텝(Step), 리더(Reader), 프로세서(Processor), 라이터(Writer) 등의 개념을 이용하여 배치 처리를 설계하고 실행한다.
- job은 여러개의 step 으로 구성되고 step은 taskelt(기능) 으로 구성된다.
- 나는 tasklet으로 구현하였다.!!
- 쿼츠 (Quartz):
- 쿼츠는 자바 기반의 오픈 소스 스케줄링 라이브러리
- 스케줄링 작업을 관리하고 실행할 수 있는 기능을 제공
- 주기적으로 실행되어야 하는 작업이나 예약된 작업을 관리하고 실행하는 데 사용
- 쿼츠는 크론 표현식을 사용하여 실행 스케줄을 설정하고, 다양한 트리거(trigger)를 통해 작업을 실행할 수 있음
- 분산 환경에서도 사용할 수 있는 확장 가능한 아키텍처를 가지고 있어, 대규모 시스템에서도 유연하게 활용됨
요약하자면, 스프링 배치는 대규모 데이터 처리를 위한 일괄 처리 프레임워크이고, 쿼츠는 예약된 작업을 스케줄링하고 실행하는 데 사용되는 라이브러리
-> 함께 사용되어 시스템에서 정기적인 작업 처리와 스케줄링을 효과적으로 관리할 수 있음
Job : 전체 배치 프로세스를 캡슐화한 엔티티, 배치 처리 과정을 하나의 단위로 만들어 놓은 객체
JobInstance : Job 실행의 단위(job이 각각 실행할 때마다 따로 추적할 수 있도록 매 실행마다 생성되며 특정 job과 식별 가능한 JobParameters에 상응하는 JobInstance는 단 한 개뿐이다.)
JobParameters : JobInstance에 전달되는 매개변수 역할, JobInstance를 구분하는 식별자 역할
JobExecution : Job에 대한 실행 시도 정보를 담은 객체.
Step : 배치 Job의 배치처리를 정의하고 순차적인 단계를 캡슐화 한 도메인 객체. Job은 하나 이상의 Step을 가져야 한다.
StepExecution : Step에 대한 실행 시도 정보를 담은 객체.
ExecutionContext : 프레임워크에서 유지/관리하는 key-value의 컬렉션. StepExecution객체 또는 JobExecution객체에 속하는 상태를 저장
JobExecutionContext : Commit 시점에 저장
StepExecutionContext : 실행 사이에 저장
JobRepository : 위에 업근된 모든 저장(Persistence)매커니즘을 담당.(JobLauncher, Job, Step 구현체에 CRUD 기능을 제공)
JobLauncher : 주어진 JobParameters로 Job을 실행하는 간단한 인터페이스.
- Step에서 아이템을 한 번에 하나씩 읽어오는 작업을 추상화한 개념
Tasklet
or
Item Reader
Item Writer : Step에서 배치나 청크 단위로 아이템을 출력하는 작업을 추상화한다.
Item Processor : 아이템을 처리하는 비즈니스 로직을 나타내는 추상화 개념
https://github.com/spring-projects/spring-batch/wiki/Spring-Batch-5.0-Migration-Guide
스프링배치5부터는 매인 애플리케이션에 @EnableBatchProcessing 어노테이션을 사용할 필요가 없다.
자세한 내용은 마이그레이션 가이드부터 읽어 보길 권장한다!!
'Spring > Spring Boot' 카테고리의 다른 글
배치 트리거링(Batch Triggering)이란? (0) | 2024.09.19 |
---|---|
스프링 배치(Spring Batch) 사용하기 - 2편 (0) | 2024.09.11 |
Spring : N+1 문제 해결 2편 - 문제 원인 분석과 해결 방법 (0) | 2024.09.09 |
Spring : N+1 문제 해결 1편 - 즉시 로딩(Eager Loading)과 지연 로딩(Lazy Loading) (1) | 2024.09.09 |
Spring : @Builder 사용 하여 객체의 정보를 수정할 때 값이..?? (0) | 2024.08.30 |