이전 글에서 스프링 배치를 처음 접하고 간단하게 정리한 적이 있습니다.
최근에 스프링배치 장애해결을 위해 강의를 들었는데 이를 간략하게 주로 사용한 부분 위주로 정리하고자 합니다.
(이전 글들과 중복된 내용이 있을 수 있습니다.)
1. Spring Batch 소개
- Spring Batch(스프링배치)는 엔터프라이즈 시스템의 일상적인 운영에 필수적인 강력한 Batch Application 개발을 가능하게 하도록 설계된 경량급 포괄적인 배치 프레임워크.
- Spring Batch 는 로깅/추적, 트랜잭션 관리, Job 처리 전략, Job Restart, Skip, Retry, 리소스 관리 등 대용량 데이터 처리에 필수적인 재사용 가능한 기능을 제공.
- 최적화 및 파티셔닝 기술을 통해 대용량 및 고성능 배치 작업이 가능.
- 배치가 실패하여 작업 재시작을 하게 되면 처음부터가 아닌 실패한 지점부터 재실행.
- But, 중복 실행을 막기 위해 성공한 이력이 있는 Batch 는 동일한 Parameters 로 실행 시 Exception 이 발생하며 중복 실행 불가능.
1-1) Spring Batch VS Quartz, Scheduler
- Spring Batch 는 Scheduler 가 아니다.
- Spring Batch 는 Batch Job 을 제공하고 관리하지만, 실질적으로 이 Job 을 구동하거나 실행시키는 기능은 지원하지 않는다.
- 해당 Batch Job 을 실행시키기 위해 Quartz, Scheduler 등 전용 Scheduler 를 사용한다.
// 스케줄 사용 유무 및 실행 인스턴스 확인
@Scheduled(cron="0 0 5 0 0 *")
public void allScheduled() {
...
}
2. Spring Batch 사용 시나리오
2-1) 배치 핵심 패턴
- Spring Batch 는 아래와 같은 기본 배치 반복을 자동화하여 사용자의 상호 작용 없이 오프라인 환경에서 유사한 트랜잭션을 처리할 수 있는 기능을 제공한다.
- Read : 데이터베이서, 파일, 큐 등에서 다량의 데이터 조회
- Process : 특정 방법으로 데이터를 가공
- Write : 데이터를 수정된 양식으로 다시 저장
2-2) 배치 비지니스 시나리오
- 배치 프로세스를 주기적으로 커밋
- 동시 다발적인 Job 의 배치 처리, 대용량 병렬 처리
- 실패 후 수동 또는 스케줄링에 의한 재시작
- 의존관계가 있는 Step 여러 개를 순차적으로 처리
- 조건적 FLow 구성을 통한 체계적이고 유연한 배치 모델 구성
- 반복, 재시도, Skip 처리
2-3) Spring Batch Architecture
- 기본 구조
- 배치 수행 구조
- 조금 더 쉽게 이해하기 위해 controller, service, dao 3-tier를 빗대어 생각해 보았습니다.(주관적입니다!!!)
- Run Tier
- Application 의 Scheduling.
- 실행을 담당.
- Spring Batch 는 따로 Scheduling 기능을 제공하지 않고, Quartz 나 Cron 을 이용하도록 권고. - Job Tier
- 전체적인 Job 의 수행을 책임.
- Job 내의 각 Step 을 정책에 따라 순차적으로 수행.
- 3-tier 중 Controller(요청을 전달받아 Job 호출). - Applictaion Tier
- Job 을 수행하는데 필요한 Component.
- 3-tier 중 Service(Job을 실행하여 요청 처리). - Data Tier
- Database, Queue 등 물리적 데이터 소스.
- 3-tier 중 Dao(Job 실행 중 데이터 관련 처리).
- 스프링 배치 구성 요소
- JobLauncher
- JobLauncher 는 배치 Job 을 실행시키는 역할.
- Job 과 JobParameter 를 받아 실행하고, JobExcution 을 반환.
public interface JobLauncher {
public JobExecution run(Job job, JobParameters jobParameters) throws JobExecutionAlreadyRunningException,
JobRestartException, JobInstanceAlreadyCompleteException, JobParametersInvalidException;
}
- Job
- 배치에서 실행하고자 하는 작업
- 전체 배치 프로세스를 캡슐화한 도메인
- 논리적인 Job 실행의 개념
- Job Configuration 과 대용되는 단위
- Step 의 순서 정의
- Batch 작업을 실행할 때 필요한 데이터를 파라미터(JobParameters) 로 받아 수행(Optional)
public interface Job {
// Job 의 이름
String getName();
// 재시작 가능 여부
boolean isRestartable();
// Job 실행
void execute(JobExecution execution);
@Nullable
JobParametersIncrementer getJobParametersIncrementer();
JobParametersValidator getJobParametersValidator();
}
- Step
- Job 을 구성하는 독립적인 하나의 단계
- Job 과 Step 은 1:N 관계
- 배치 작업의 독립적이고 순차적인 단계를 캡슐화하고, 실제 배치 처리에 대한 정의 및 제어하는데 필요한 모든 정보를 포함하는 도메인 객체
- Chunk-Oriented / Tasklet 처리 방식이 존재
public interface Step {
String getName();
boolean isAllowStartIfComplete();
int getStartLimit();
void execute(StepExecution stepExecution) throws JobInterruptedException;
}
JobRepository
- 수행되는 Job에 대한 정보를 담고 있는 저장소.
- 특정 Job 에 대한 수행 시간, 횟수, 결과 등 Batch 수행과 관련된 Meta Data 가 저장.
참고
- https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EB%B0%B0%EC%B9%98/dashboard
'BackEnd > Spring Batch' 카테고리의 다른 글
[Spring Batch 정리하기] 3. 도메인 (1) | 2024.07.25 |
---|---|
[Spring Batch 정리하기] 2. DB Schema (0) | 2024.07.22 |
[Spring] Spring Batch 장애 회고(Feat. ChunkListner 사용하기) (0) | 2024.07.12 |
[Spring] Spring Batch JobParameter 활용 하기(With. Custom 하기, 공통 관리하기) (1) | 2023.10.27 |
[Spring] Spring Batch 사용해보기(3) - step(tasklet, chunk) (0) | 2022.09.18 |