by-nc-sa     개발자, DBA가 함께 만들어가는 구루비 지식창고!

Spring Batch란




Spring Batch란?

스프링 배치

1. 스프링 배치 개요

Q: 왜 SpringBatch를 써야하죠? , 그냥 짰을 때보다 어떤 장점이 있는가? "
A: "대용량 배치에 맞는 읽기방식과 Transaction처리를 간단히 구현할 수 있다."

Q: 그런데 스프링배치의 구조가 너무 복잡해서 간단한 배치까지 그것을 써야하는지 모르겠다
A: 다른 프레임워크에 비해 구조가 복잡하지 않다. 모르기 때문에 사용 못하는 것 뿐이다.

1.1 스프링 배치 기능

  • Job Repository 를 통한 배치 모니터링
  • 배치에 적합한 트랜잭션 처리를 위해 주기적인 commit방식 지원.
  • 배치작업의 재시도, 재시작, 건너뛰기 등의 정책을 설정으로 적용할 수 있다.
  • Commit 개수, Rollback 개수, 재시도 횟수 등 배치실행 통계 정보를 제공한다.
  • 다양한 실행 방법 지원 - Quartz, CommandLine, JMX콘솔, OSGi, 동기/비동기-병렬 실행 ...

2. 스프링 배치 아키텍처와 구성요소

2.1 스프링 배치 구조

  • Run Tier
    • Application의 scheduling, 실행을 담당.
    • 스프링배치는 따로 Scheduling의 기능은 제공하지 않음
    • Quartz나 Cron을 이용하도록 권고.
  • Job Tier
    • 전체적인 Job의 수행을 책임진다
    • Job내의 각 Step들을 정책에 따라 순차적으로 수행한다
  • Application tier : Job을 수행하는데 필요한 component
  • Data tier : Database, File등 물리적 데이터소스

2.2 스프링 배치 구성요소

  • JobLauncher
    • JobLauncher는 배치 Job을 실행시키는 역할을 한다.
    • Job과 Parameter를 받아서 실행. JobExecution를 반환 함.
JobLauncher.java
 
public interface JobLauncher {
  public JobExecution run(Job job, JobParameters jobParameters) throws JobExecutionAlreadyRunningException,
			JobRestartException, JobInstanceAlreadyCompleteException;
}
  • Job
    • 실행시킬 작업을 의미, 논리적인 잡 실행의 개념, job configuration과 대응되는 단위.
Job.java
 
public interface Job {
	String getName();   //작업의 이름	
	boolean isRestartable();  //재시작 가능여부
	void execute(JobExecution execution);   //작업을 실행
}
  • JobParameter
    • 배치잡을 시작하는데 사용하는 파라미터의 집합으로 잡이 실행되는 동안에 잡을 식별하거나 잡에서 참조하는 데이터로 사용.
  • JobInstance
    • 논리적인 Job 실행
    • JobInstance=Job+JobParameter
  • JobExecution
    • 단 한 번 시도되는 Job 실행을 의미하는 기술적인 개념
    • 시작시간, 종료시간 ,상태(시작됨,완료,실패),종료상태의 속성을 가짐
  • JobRepository
    • 수행되는 Job에 대한 정보를 담고 있는 저장소.
    • 어떠한 Job이 언제 수행되었고, 언제 끝났으며, 몇 번이 실행되었고 실행에 대한 결과가 어떤지 등의 Batch수행과 관련된 모든 meta data가 저장되어 있다.
  • Step
    • Batch job을 구성하는 독립적인 하나의 단계
    • Job은 하나이상의 step으로 구성
    • 실제 배치 처리 과정을 정의하고, 제어하는데 필요한 모든 정보를 포함
    • Step의 내용은 전적으로 개발자의 선택에 따라 구성됨.
  • Step Execution
    • 하나의 step을 실행하는 한번의 시도.
    • 시작시간, 종료시간,상태, 종료상태, commitCount, itemCount 의 속성을 가진다.
  • Item
    • 처리할 데이터의 가장 작은 구성 요소.
    • (예)파일의 한 줄, DB의 한 Row, Xml의 특정 element )
  • ItemReader
    • Step안에서 File 또는 DB등에서 Item을 읽어 들인다
    • 더 이상 읽어올 Item이 없을 때에는 read()메소드에서 null값을 반환. 그 전까지는 순차적인 값을 리턴
  • ItemWriter
    • Step안에서 File 또는 DB등으로 Item을 저장한다.
  • Item Processor
    • Item reader에서 읽어 들인 Item에 대하여 필요한 로직처리 작업을 수행한다.
  • Chunk
    • 하나의 Transaction안에서 처리할 Item의 덩어리.
    • chunk size가 10이라면 하나의 transaction안에서 10개의 item에 대한 처리를 하고 commit을 하게 되는 것이다.

3. 스프링 배치 예제

4. 참고 URL

문서정보

Enter labels to add to this page:
Please wait 
Looking for a label? Just start typing.