오늘은 정리를 해놓지 않은 Spring Batch에 대해 기록해 두려고 한다.
Scheduler와 함께 일련의 작업을 정해진 로직을 수행하기 위해 많이 사용하며, 대용량 데이터를 핸들링할때 주로 사용된다.
스프링 배치가 제공할 수 있는 상황들을 한번 알아보자.
- 로깅/추적
- 트랜잭션 관리
- 작업의 처리와 통계관리
- 작업의 실패 후 수동 or 예약 된 재시작
등등 고급스러운 작업을 도와주는 아이이다.
가장 좋은 기능이라고 생각되는것은 작업진행중에 일부 작업이 실패했을때 그 실패 시점을 기록해놓고 다음 재시작을 했을때 실패한 시점부터 다시 실행할 수 있는점..!
그렇다면 배치에 대해 간단한 용어부터 알아보도록 하자
[ 1. Job ]
Job : 배치처리 과정 객체. 배치 프로세스 상에서 전체 계층 최상단이다.
JobInstance : Job의 실행의 단위. Job 실행시 하나의 JobInstance가 생성된다. 예를 들어 10일~20일치 작업과 20~30일치 작업을 각각 실행시키면, 각각 Instance가 별도로 생성된다. 이때 10일~20일치 작업이 실패한뒤, 다시 해당 Job을 실행시키면 실패한 10일~20일치 작업만 실행된다.
JobParameters : JonInstance를 구별하게 도와주는 JobParameters 객체.
JobInstacne에 매개변수로도 사용된다. (String, Double, Long, Date 4가지 형식만을 지원)
JobExecution : jobInstance의 실행 객체. JobInstance 실행에 대한 상태,시작시간, 종료시간, 생성시간 등의 정보를 내포한다.
JobLauncher : 이름과 같이 Job을 실행하는 객체.
JobRepository : 모든 배치 처리 정보를 담고있는 매커니즘. Job이 실행시 JobRepository에 JobExecution과 StepExecution을 생성하고, JobRepository에 Execution 정보들을 저장하고 조회하여 사용한다.
[ 2. Step ]
Step : Job의 순차적인 단계. Job은 최소 1개 이상의 Step이 필수.
StepExecution : 각 Step의 실행 객체. 기본적으로는 이전 단계의 Step이 실패하게 되면 다음 단계가 실행되지 않는다. JobExecution에 저장되는 정보와 함께 read, write, commit, skip 의 각각의 횟수 정보들도 저장된다.
[ 3. Item ]
순서대로, Read -> Processor -> Writer로 진행된다고 보자.
ItemReader : Step에서 Item을 읽어오는 인터페이스. 데이터를 읽어놓는..? 아이라고 생각하면 쉽다.
ItemProcessor : ItemReader에서 읽어놓은 데이터를 처리. 배치의 필수 요소가 아니다. Reader, Writer, Processor 처리를 분리하여 단지 역할만 나눠사용한다고 봐도 무방하다.
ItemWriter : 처리 된 Data를 Writer 할 때 사용. 데이터 가공 이후 Item을 Chunk로 처리한다. 원하는 인터페이스를 사용할수있는데, 예를들어 DB Insert/Update or HttpRequest 등도 상관없다.
ExecutionContext : Job에서 데이터를 공유 할 수 있는 데이터 저장소. 기본적으로 Batch의 JobExecutionContext은 Commit 시점에 정보가 저장되지만, StepExecutionContext는 실행 중간에 저장이 된다. 우리는 Step간 Data 공유가 필요할때 ExecutionContext를 통해 데이터를 사용할 수 있다. 추가적으로 Job 실패시 ExecutionContext를 통한 마지막 실행 값을 재구성 할 수 있다.
배치를 사용할떄 주의해야 할 점도 있다.
- 기본적으로 배치는 기존 서비스와 배치간에 미칠 수 있는 영향을 최소화 해야한다. 쉽게 말해 서비스와는 별도로 백그라운드로 작업하여 기존 서비스는 잘 모르도록 설계하는것이 필요하다.
- 대용량 데이터를 컨트롤하기 좋기 때문에, 데이터 베이스 I/O, 네트워크 I/O, 파일 I/O 등의 시스템 리소스의 사용을 최소화하고 한번에 최대한 많은 데이터를 메모리 위에서 처리하도록 사용해야한다.
- 데이터 무결성을 위한 대비도 필요하다. (아직 제대로 고려해본적이없다....)
[ Spring Batch의 메타 Table ]
Spring Batch가 관리해주는 실행 결과 및 상태 등 작업에 대한 정보를 대신 저장해 주는데, 이때 사용되는 테이블이다.
필수로 넣어두고, 실패한 작업에 대한 정보도 포함하기 때문에 실패후 재시작시 해당 실패 작업만 진행할수있게 하는것이다.
Batch의 Job을 구성하는 Step , 그 Step을 구성하는 ItemReader, ItemProcessor, ItemWriter 외에도 Tasklet이라는 아이가 있다.
다음글에서 예제와 함께 알아보도록 하자.
오늘도 화이팅!
'SpringBoot' 카테고리의 다른 글
[Spring-boot] Spring cache란? 사용방법 및 기본 (0) | 2022.08.14 |
---|---|
[SpringBoot] DI 주입하는 방법 + 롬복 이용 (0) | 2021.08.24 |
[SpringBoot] Spring boot에서 간단한 Redis 설정 및 사용 예제 (0) | 2021.08.06 |
[SpringBoot] Filter 설정 및 개념 (0) | 2021.07.13 |
[SpringBoot] Driver 오류 Failed to configure a DataSource (0) | 2021.05.31 |