프레임워크(Framework)/Spring

[Spring Batch] 스프링 배치란 무엇인가? - 개념, 아키텍처, 구성요소

잇트루 2023. 2. 24. 22:54
반응형
본 내용은 온라인 강의 사이트 인프런의 정수원 님의 강의 내용이 포함되어 있습니다.
스프링 배치 - Spring Boot 기반으로 개발하는 Spring Batch
 

스프링 배치 - Spring Boot 기반으로 개발하는 Spring Batch - 인프런 | 강의

초급에서 중~고급에 이르기까지 스프링 배치의 기본 개념부터 API 사용법과 내부 아키텍처 구조를 심도있게 다룹니다. 그리고 스프링 배치 각 기능의 흐름과 원리를 학습하게 되고 이를 바탕으

www.inflearn.com

 

 

일괄 처리(또는 배치 처리, Batch processing)

Batch Processing(일괄 처리)은 데이터를 실시간으로 처리하는 것이 아닌 일괄적으로 처리하는 작업(Job)을 의미한다.

초기의 Batch Processing은 사용자와 상호작용하는 것이 불가능 했지만, 최근 운영 체제의 발전으로 프로그램 입출력을 통해 상호작용하는 것이 가능해졌다.

 

Batch Processing의 장점

  • 사용자의 개입을 최소화하고 반복적인 작업을 보다 효율적으로 처리할 수 있다.
  • 컴퓨터 리소스의 사용이 적은 원하는 시간대에 일괄 처리를 할 수 있다.
  • 분 단위 사용자 응답 대기와 더불어 리소스의 유휴 사용을 피할 수 있다.
  • 컴퓨터 자원의 이용률과 효율을 높여 비용 낭비를 줄일 수 있다.
  • 정해진 규칙에 따라 자동으로 수행할 수 있다.

 

Batch Processing 사용 예시

  • 대용량 데이터 처리
  • 일괄 이미지 처리
  • 데이터 변환

가장 대표적인 예시로 은행 업무의 정산 처리가 있다. 일괄 처리 기법은 데이터를 일괄적으로 처리하는 것으로 특정 시간대에 처리하기 위해 스케줄러와 함께 사용하는 것이 일반적이다.

 

 

스프링 배치(Spring Batch)

스프링 배치는 Java 기반의 표준 배치 기술의 부재로 스프링 프레임워크 2.x 버전을 개발할 때 스프링 프레임워크를 통해 일괄 처리 필요성이 대두되면서 등장했다.

  • 당시 I/O, 네트워크, 스레드, DB 등 자바 기반의 기술 표준이 있었지만 일괄 처리(Batch Processing)에 대한 기술 표준은 존재하지 않았다.

스프링 배치는 스프링 프레임워크(Spring Framework)를 기반으로 구현되어 있어 스프링의 특성(IoC/DI, AOP, PSA)을 그대로 사용할 수 있다. 즉, POJO 기반의 개발이 가능하다.

 

스프링 배치는 Accenture와 SpringSource(현재 Pivotal)의 합작품이다.

  • Accenture의 기술적인 경험과 노하우(배치 처리 아키텍처 프레임워크를 Spring Batch 프로젝트에 기증)
  • SpringSource의 깊이 있는 기술적 기반과 스프링의 프로그래밍 모델

 

배치 핵심 패턴

  • Read - 데이터베이스, 파일, 큐 등에서 다량의 데이터를 조회한다.
  • Process - 특정 방법으로 데이터를 가공한다.
  • Write - 데이터를 수정된 양식으로 다시 저장한다.

배치의 핵심 패턴은 데이터베이스의 ETL(추출: Extract, 변환: Transform, 로드: Load)과 유사하다.

 

일반적인 배치 시나리오

  • 배치 프로세스를 주기적으로 커밋
    • 특정 단위로 데이터를 쪼개어 커밋(최소한의 자원으로 최대 효율)
  • 동시 다발적인 Job의 배치 처리, 대용량 병렬 처리
    • Job 간의 독립성 보장 필요, 멀티 스레드를 통한 대용량 데이터 처리
  • 실패 후 수동 또는 스케줄링에 의한 재시작
  • 의존관계가 있는 step 여러 개를 순차적으로 처리
    • 1개의 Job에는 여러 개의 step이 존재, step은 순차적으로 처리
  • 조건적 Flow 구성을 통한 체계적이고 유연한 배치 모델 구성
    • 경우에 따라 조건을 통해 step의 단계를 유연하게 처리
  • 반복, 재시도, Skip 처리

 

 

 

스프링 배치 아키텍처

스프링 배치의 아키텍처는 Application Layer, Batch Core Layer, Batch Infrastructure Layer 세 가지로 구성되어 각각 독립적으로 동작하면서 배치 작업(Job)을 실행한다.

 

Application

Application 계층은 스프링 배치를 사용하는 개발자가 구현하는 Job, Step, ItemReader, ItemProcessor, ItemWriter, Tasklet 등과 같은 배치 작업(Job)을 구현하는데 필요한 인터페이스와 구현체가 포함되어 있는 계층이다.

Application 계층에서 개발자는 비즈니스 로직에만 집중하고 공통적인 기술은 프레임워크가 담당하게 한다.

 

Batch Core

Batch Core 계층은 배치 작업을 시작하고 제어하는 데 필요한 핵심 기능을 제공하는 계층이다. Batch Core 계층에서는 Job과 Step을 실행하는 데 필요한 인터페이스와 구현체, 데이터 처리와 관련된 기능을 제공하는 ItemReader, ItemProcessor, ItemWriter 등을 포함하고 있다.

 

Batch Infrastructure

Batch Infrastructure 계층은 Batch Core에서 사용하는 인프라를 제공하는 계층이다. 데이터베이스 접근과 같은 공통적인 인프라 기능을 제공하며, JobRepository와 같은 Batch Core에서 사용하는 인터페이스와 구현체들을 포함하고 있다.

 

스프링 배치 구성요소

Job

스프링 배치의 여러 가지 처리과정을 하나의 단위로 만들어 놓은 가장 큰 실행 단위이다. 하나의 Job은 여러 개의 Step으로 이루어지며, 이 Step들을 순차적으로 실행한다.

 

Step

Job의 실행 단계를 나타내는 것으로, Tasklet 또는 Chunk 지향 처리 방식으로 구성되어 있다.

 

Tasklet

Step에서 실행되는 최소 실행 단위이다. 스프링에서 제공하는 Tasklet 인터페이스를 구현하여 실행시킬 수 있다. Tasklet이 실행되면 Job의 다음 Step으로 넘어가게 된다.

 

Chunk 지향 처리(Chunk-oriented Processing)

대용량 데이터를 처리할 때 사용되는 방식으로, 지정된 chunk size 만큼 데이터를 처리하고 다음 chunk를 처리하는 방식이다. 이 방식은 데이터 처리의 속도를 높이고, 메모리를 효율적으로 사용할 수 있다.

Chunk 지향 처리 방식의 Step은 ItemReader, ItemProcessor, ItemWriter로 구성되어 있다.

 

ItemReader

데이터베이스의 데이터 또는 파일 등을 읽어서 반환하는 역할을 수행한다. ItemReader는 첫 번째 데이터부터 하나씩 읽어 ItemProcessor에게 전달한다. 모든 데이터를 읽어 들이면 null을 반환하고 처리가 종료된다.

 

ItemProcessor

ItemReader로부터 읽어온 데이터를 가공하거나 필터링하는 역할을 수행한다. 가공된 데이터는 ItemWriter에 전달한다.

 

ItemWriter

가공된 데이터를 저장하거나 파일, 데이터베이스 등의 외부 저장소에 출력하는 역할을 수행한다. 만약, 예외가 발생하면 롤백이 가능하다.

 

JobRepository

스프링 배치에서 Job의 실행 정보를 저장하고 관리하는 데이터베이스로 JobLauncher에 의해 사용된다. 스프링에서는 기본적으로 메모리 기반의 JobRepository를 제공한다.

 

JobExecution

Job의 실행 정보를 저장하며 JobInstance와 연관된다.

 

JobInstance

Job의 논리적 실행 단위를 의미한다.

 

StepExecution

Job의 실행 과정에서 Step의 실행 정보를 저장하며, JobExecution과 연관된다. 한 개의 JobExecution은 여러 개의 StepExecution을 가질 수 있다.

 

ExecutionContext

Job 또는 Step 실행 중에 사용자가 저장하고자 하는 임시 데이터를 저장한다.

 

JobLauncher

Job을 실행하는 인터페이스이다. JobRepository에서 Job의 실행 정보를 읽어 Job을 실행하고 결과를 JobRepository에 저장한다.

 

JobOperator

Job의 실행, 중지, 재시작 등의 작업을 수행하는 인터페이스이다. 스프링 배치에서는 JobOperator 인터페이스를 구현하는 SimpleJobOperator를 제공하고 있다.

반응형