Search
Duplicate

1. 스프링 배치 소개

목차

1. 탄생 배경

자바 진영의 표준 기술(JSR)중에는 여러가지(ex: Thread, IO, Network, …)가 있었지만, 그 중 배치에 관련한 기술이 없었는데, 필요성이 대두되면서 자바 진영의 대표적인 프레임워크인 스프링 프레임워크와 맞물려서 이런 배치 기술에 대한 필요를 충족하기위해 스프링 배치가 탄생하게 되었다.
이 스프링 배치는 SpringSource와 Accenture 라는 두 회사의 합작품이라 할 수 있는데, Accenture에선 배치 아키텍처를 구현하며 쌓은 기술적인 경험이나 노하우를 제공하고 SpringSource(현 Pivotal)에선 기술적 기반과 스프링의 프로그래밍 모델을 제공했다.

2. 배치 핵심 패턴

스프링 배치에서 제공하는 스프링 배치의 핵심 패턴은 다음과 같은데 데이터 베이스의 ETL(Extract, Transform, Load)와 유사하다.
Read : Database, File Queue에서 다량의 데이터를 조회한다.
Process - 특정 방법으로 데이터를 가공한다.
Write - 데이터를 수정된 양식으로 다시 저장한다.

3. 언제 많이 사용하는가?

그럼 이런 배치 애플리케이션은 언제 많이 사용되는걸까?
대용량의 데이터를 복잡한 로직으로 처리해야 하는 경우
특정 시점에서 자동화된 작업이 필요한 경우
그 밖에 로깅/추적, 트랜잭션 관리, 작업 처리 통계, 작업 재시작, 건너뛰기, 리소스 관리와 같이 대용량 레코드 처리에 필수적인 기능이 필요한 경우
배치 프로세스의 주기적인 커밋
동시 다발적인 Job의 배치 처리 및 대용량 병렬 처리
실패 후 수동 또는 스케줄링에 의한 재시작
의존관계가 있는 Step들을 순차적으로 처리
조건적 Flow 구성을 통한 체계적이고 유연한 배치 모델 구성
반복, 재시도, 건너뛰기

4. 아키텍처

다음과 같은 스프링 배치의 계층 구조는 각각의 계층이 자신의 영역에 집중할 수 있도록 설계되어 있어서 Application은 비즈니스 로직, Batch Core는 배치의 동작에만 신경쓰면 된다.

Application

: 스프링 배치 프레임워크를 통해 개발자가 만든 모든 배치 Job과 커스텀 코드를 포함하며, 개발자는 업무 로직에만 집중하고 그 외의 공통 부분에 대한 기술은 프레임워크가 담당하도록 할 수 있게 된다.

Batch Core

: 배치작업(Job)에 대한 관리(실행, 모니터링, 등)에 필요한 핵심 API를 가지고 있으며, JobLauncher, Job, Step, Flow등이 이에 속한다.

Batch Infrastructure

: Application과 Core 모두 공통 Infrastructure위에서 빌드한다.
Job실행의 흐름과 처리를 위한 틀을 제공하며 개발자와 애플리케이션이 사용하는 일반적인 Reader, Process Writer, Skip, Retry등이 속한다.

참고: 스프링 배치 아키텍처 좀 더 자세히

Components
Roles
Job
배치 처리 과정을 하나의 단위로 표현한 객체로 여러 Step을 포함하는 컨테이너이기도 한다. 반드시 하나 이상의 Step으로 구성해야 하고, Job이 실행될 경우 스프링 배치의 컴포넌트들은 탄력성을 위해 서로 상호작용을 한다.
Step
Batch Job을 구성하는 독립적인 하나의 단계로 스프링 배치에서 가장 일반적인 상태 단위이다. 모든 Job은 하나 이상의 Step으로 구성되며, 배치 작업을 어떻게 구성하고 실행할 것인지 Job의 세부 작업을 Task 기반으로 설정하고 명세해놓은 객체이다.
JobLauncher
배치 Job을 실행시키는 역할을 하며, Job과 Job Parameter를 인자로 받으며 요청된 배치 작업 수행 후 최종 client에게 JobExecution을 반환한다. 그렇기에 Job의 재실행 가능 여부나 실행 방법, 파라미터 유효성 검증등도 같이 수행한다. 일반적으로 직접 다룰 필요가 없다.
ItemReader ItemProcessor ItemWriter
청크 모델을 구현하면서 데이터의 입력/처리/출력 3가지 프로세스로 분할하기 위한 인터페이스로 데이터 IO를 담당하는 ItemReader와 ItemWriter는 데이터 베이스와 파일을 Java객체 컨버팅을 제공하기에 Spring Batch를 사용하는 것으로 충분히 컨버팅이 가능하다. ItemProcessor는 입력 확인 및 비즈니스 로직을 구현한다.
JobRepository
배치 작업 중의 정보를 저장하는 저장소 역할을 한다. 저장 정보는 다양한 배치 수행과 관련된 수치 데이터와 잡의 상태이다.

다음으로