Spring Batch
Spring Batch는 로깅/추척, 트랜잭션 관리, 작업 처리 통계, 작업 재시작, 건너뛰기, 리소스 관리등 대용양 레코드 처리에 필수적인 기능을 제공한다. 또한 최적화 및 파티셔닝 기술을 통해 대용량 및 고성능 배치 작업을 가능하게 하는 고급 기술 서비스 및 기능을 제공한다. Spring Batch에서 배치가 실패하여 작업 재시작을 하게 된다면 처음부터가 아닌 실패한 지점부터 실행을 하게 된다. 또한 중복 실행을 막기 위해 성공한 이력이 있는 Batch는 동일한 Parameters로 실행 시 Exception이 발생하게 된다.
Spring Batch vs Quartz? Scheduler?
Spring Batch는 Scheduler가 아니기에 비교 대상이 아닙니다.
Spring Batch는 Batch Job을 관리하지만 Job을 구동하거나 실행시키는 기능은 지원하고 있지 않습니다. Spring에서 Batch Job을 실행시키기 위해서는 Quartz, Scheduler, Jenkins 등 전용 Scheduler를 사용하여야 한다.
Spring Batch 용어
Job
Job은 배치 처리 과정을 하나의 단위로 만들어 놓은 객체 입니다. 또한 배치처리 과정에 있어 전체 계층 최상단에 위치하고 있다.
JobInstance
JobInstance는 Job의 실행 단위입니다. Job을 실행시키게 되면 하나의 JobInstance 생성된다,
예를들어 1월 1일에 실행, 1월 2일에 실행하게 되면 각각의 JobInstance 가 생성되며 1월 1일 실행한 JobInstance 가 실패하여 다시 실행을 시키더라도 이 JobInstance는 1월 1일에 대한 데이터만 처리하게 된다.
JobParameters
JobInstance 를 구분하기 위해서 JobParameters 객체로 구분된다. 또한 개발자 JobInstance에 전달되는 매개변수 역할도 하고 있다. JobParameters는 String, Double, Long, Date 4가지 형식만을 지원하고 있다.
JobExecution
JobInstance에 대한 실행 시도에 대한 객체.
같은 날 실패하고 또 실행 됐을 경우 동일한 JobInstance를 실행시키지만, JobExecution는 개별로 생기게 된다.
JobExecution는 이러한 JobInstance 실행에 대한 상태, 시작시간, 종료시간, 생성시간 등의 정보를 담고 있다.
Step
Job의 배치처리를 정의하고 순차적인 단계를 캡슐화 한다. Job은 최소 1개 이상의 Step을 가져야 하며 Job의 실제 일괄 처리를 제어하는 모든 정보가 들어있다.
StepExecution
Step의 실행시도에 대한 객체. Job이 여러개의 Step으로 구성되어 있을 경우 이전 단계의 Step이 실패하게 되면 다음 단계가 실행되지 않음으로 실패 이후 StepExecution은 생성되지 않는다. StepExecution 또한 JobExecution과 동일하게 실제 시작이 될 때만 생성된다. StepExecution에는 JobExecution에 저장되는 정보 외에 read 수, write 수, commit 수, skip 수 등의 정보들도 저장된다.
ExecutionContext
Job에서 데이터를 공유할 수 있는 데이터 저장소. Spring Batch에서 제공하는 ExecutionContext는 JobExecutionContext, StepExecutionContext 2가지 종류가 있으나 이 두 가지는 지정되는 범위가 다른다.
JobExecutionContext의 경우 Commit 시점에 저장되는 반면 StepExecutionContext는 실행 사이에 저장된다.
ExecutionContext를 통해 Step간 Data 공유가 가능하며 Job 실패 시 ExecutionContext를 통한 마지막 실행 값을 재구성할 수 있다.
JobRepository
모든 배치 처리 정보를 담고 있는 매커니즘. Job이 실행되게 되면 JobRepository에 JobExecution과 StepExecution을 생성하게 되며 JobRepository에서 Execution 정보들을 저장하고 조회하며 사용하게 된다.
JobLauncher
JobLauncher는 Job과 JobParameters를 사용하여 Job을 실행하는 객체.
ItemReader
ItemReader는 Step에서 Item을 읽어오는 인터페이스. ItemReader에 대한 다양한 인터페이스가 존재하며 다양한 방법으로 Item을 읽어 올 수 있다.
ItemWriter
ItemWriter는 처리 된 Data를 Writer 할 때 사용. Writer는 처리 결과물에 따라 Insert가 될 수도 Update가 될 수도 Queue를 사용한다면 Send가 될 수도 있다. Writer 또한 Read와 동일하게 다양한 인터페이스가 존재한다. Writer는 기본적으로 Item을 Chunk로 묶어 처리하고 있다.
ItemProcessor
Item Processor는 Reader에서 읽어온 Item을 데이터를 처리하는 역할을 하고 있다. Processor는 배치를 처리하는데 필수 요소는 아니며 Reader, Writer, Processor 처리를 분리하여 각각의 역할을 명확하게 구분하고 있다.
Spring Batch 사용하기
Spring Batch에서의 Job은 여러 가지 Step의 모음으로 구성되어 있으며 Job은 순차적인 Step을 수행하며 Batch를 수행하게 됩니다. Step은 Tasklet 처리 방식과 Chunk 지향 처리 방식을 지원하고 있다.
스키마 생성
Spring Batch Meta-Data 테이블은 Java에서 이를 나타내는 Domain 객체와 매우 밀접하게 일치합니다. 예를 들어, JobInstance, JobExecution, JobParameters, 는 StepExecution각각 BATCH_JOB_INSTANCE, BATCH_JOB_EXECUTION, BATCH_JOB_EXECUTION_PARAMS 및 BATCH_STEP_EXECUTION에 매핑됩니다.
ExecutionContext는 BATCH_JOB_EXECUTION_CONTEXT와 BATCH_STEP_EXECUTION_CONTEXT에 모두 매핑됩니다. 는JobRepository각 Java 객체를 올바른 테이블에 저장하고 보관하는 역할을 합니다. 다음 부록에서는 메타데이터 테이블과 이를 만들 때 내린 많은 디자인 결정에 대해 자세히 설명합니다. 아래의 다양한 테이블 생성 명령문을 볼 때 사용되는 데이터 유형이 가능한 한 일반적이라는 것을 깨닫는 것이 중요합니다. Spring Batch는 많은 스키마를 예로 제공하는데, 이는 모두 개별 데이터베이스 공급업체의 데이터 유형 처리 방식 차이로 인해 다양한 데이터 유형을 갖습니다. 아래는 6개 테이블 모두와 서로 간의 관계에 대한 ERD 모델입니다.
'프로젝트 > Springboot-MSA- PreOrder' 카테고리의 다른 글
[Project] 서비스 장애 대응 Circuit Breaker 구현 (1) | 2024.08.26 |
---|---|
[Project] API Gateway (0) | 2024.08.18 |
[Project] Service Discovery (0) | 2024.08.18 |
[Project] MSA란? (1) | 2024.08.18 |
[Project] Google SMTP (0) | 2024.08.11 |