Batch application 의 필요성
Spring Batch
를 살펴보기 전에 “Batch application 은 왜 필요할까?” 를 당연 먼저 생각해볼 필요가 있다.
Batch application 은 아래와 같은 조건의 상황을 개발할 때 효율적인 서비스라고 생각한다.
- 대용량 데이터 처리 : 1만건, 10만건 등 대용량의 데이터를 조회/전달/계산 등 처리가 필요한 경우
- 자동화 : 일정 주기적으로 동일한 작업이 필요한 경우
Spring Batch?
Spring Batch
는 Spring
의 특성을 가지고 있으면서 Batch
작업을 할 수 있도록 지원하는 Framework 이다. 그리고 다양한 라이브러리를 지원하면서 DB, 전문 파일 등 다양한 데이터 형식의 정보를 조회 및 가공 처리가 가능하다.
이번 Spring Batch
를 정리하면서는 아직도 현업에서 많이 사용중인 전문 형식의 데이터를 처리하는 방식을 살펴보고 기록할 예정이다.
Dependencies
- Spring Batch
- H2 Database
Database 의존성 필수? Spring Batch 는 Batch Job 에 대한 설정을 DB 에 Meta Table 을 생성하여 관리하고 있기 때문에 필수이다.
Overview
Spring Batch
의 간단한 구현 방식이다. (with Kotlin)
간단한 simpleJob
를 실행하여 simpleStep
에서 실행되는 아래와 같은 로그를 확인해볼 수 있다.
Job
Job
은 Batch 작업 하나의 단위이고, Job
안에서 여러 개의 Step
들이 구성되어 Batch 작업을 수행한다. Spring Batch
구조에서 제일 큰 개념은 Job
이라 할 수 있다.
JobInstance
JobInstance
는 논리적인 Job
를 의미한다. 실제 1일 1회 실행되는 Job
이 존재한다면, 매일 1회 실행되는 새로운 Job
이 생성이 될 것이고, 이를 관리하고자 논리적인 JobInstance
가 필요하다.
따라서 각 JobInstance
는 여러 개의 실행 결과인 JobExecution
를 가질 수 있고, 특정 Job
과 식별 가능한 JobParameters
를 가질 수 있다. (단, JobParameters
별 JobInstance
는 1개 뿐이다.)
JobParameters
JobParameters
는 다수의 Job
를 구분할 수도 있는 Job
이 실행될 때 사용하는 Parameter Set 객체이다. Job
의 식별값 또는 참조 데이터로 사용 가능하다.
JobExecution
JobExecution
는 Job
의 실행을 의미한다. 실행이 성공적으로 종료되기 전까지는 완료되지 않은 것으로 판단하고, 관리한다.
Step
Step
은 Job
의 독립적이고 순차적으로 단계를 처리하기 위한 도메인 객체이다. 모든 Job
은 하나 이상의 Step
으로 구성되며, Step
은 실제 Batch 에서 수행해야하는 처리를 정의하고 있다.
StepExecution
StepExecution
은 한 번의 Step
실행 시도를 의미한다. Step
를 실행할 때마다 생성되지만, 이전 단계의 Step
이 실패되면 다음 Step
를 실행하지 않고 StepExecution
도 저장하지 않는다.
Job & Step 구조
Job
은 항상 1개의 이상의 Step
으로 구성되어있다.
Step
를 구성할 수 있는 방법은 크게 2가지로 나눌 수가 있다.
Tasklet
: Batch 의 작업을 하나로 처리Reader & Processor & Writer
: 조회 / 처리 / 전달 기능을 나눠서 처리
기타 중요 기능
JobRepository
JobRepository
는 Spring Batch
에서의 모든 저장(persistence
) 메커니즘을 담당하고, JobLauncher
, Job
, Step
구현체에 CRUD
기능을 제공해준다.
Job
를 실행할 때 repository
에서 JobExecution
를 조회하고, 실행 중에는 StepExecution
과 JobExecution
구현체를 repository
에 전달/저장한다.
JobLauncher
JobLauncher
는 JobParameters
로 Job
을 실행시키는 인터페이스이다.
ItemReader
ItemReader
는 Step
에서 데이터를 조회하는 작업을 추상화한 개념이다.
ItemProcessor
ItemProcessor
는 ItemReader
에서 조회된 정보를 변환하거나 다른 비즈니스 처리를 담당한다.
ItemWriter
ItemWriter
는 Step
에서 Batch
또는 chunk
단위로 정보를 출력하는 작업을 추상화한 개념이다.
기본적인 Spring Batch
의 개념을 확인하였고, 세부적인 코드나 내용들은 계속 정리하면서 추가할 예정이다.
Spring Batch
는 앞서 설명한 것처럼 @Configuration
으로 Bean
등록하여 사용가능하지만, jar
가 실행될 때 수행하는 Batch 가 아닌 Spring Web
에서 특정 API 를 호출하여 Batch 의 Job
을 실행시키는 방법도 있다.
하지만, Spring Web
에서 실행시키는 방법은 권장하지 않는 방법이기에 일단 jar
로 실행시키는 방법을 정리할 예정이다.