본문 바로가기

java

Spring Batch란 ?

  • Spring Batch에 대해 알아보기 전에 먼저 Batch란 무엇인지부터 알아보도록 하자 

Batch Program

  • 미리 정해진 작업들을 순서에 따라 일괄적으로 처리하는 것
  • 필수 요소
    • 대용량 데이터 
    • 자동화 
    • 견고성 : 중단되는 일 없이 수행되어야 한다 
    • 안정성/신뢰성 : 오류의 발생 위치, 시간 등을 추척할 수 있어야 한다
    • 성능 : 다른 응용 프로그램의 수행을 방해하지 않아야 하고 지정된 시간 내에 처리 완료되어야함

Batch Scheduler / Job Scheduler 

  • Scheduler : Job을 특정 시간마다 실행하도록 도와주는 프로그램 
  • 종류 
    • Spring Scheduler
    • Quartz Scheduler
    • Cron

Spring Batch

  • Spring에서 대용량 데이터를 일괄적으로 처리하는 기능
  • Job과 Step을 기준으로 배치 단위를 실행 
  • 보통 별도의 배치 서버를 두고 배치 작업만 수행하도록 작성  
  • ex) 로깅, 추적, 트랜잭션 관리, 통계 작업, 작업 재시작, 건너뛰기, 리소스 관리 등 대용량 데이터 처리에 필수적인 기능 제공 
Spring Batch와 Scheduler의 차이는?

Job을 유발하는 트리거가 Scheduler이고 Job을 실행시키는 주체가 Spring Batch이다
즉, Scheduler를 통해 Spring Batch를 주기적으로 동작시킨다  

Spring Batch 용어 

Job / Flow

  • 배치 작업을 나타내는 객체
  • 최소 하나의 Step을 가져야 한다 

JobInstance

  • Job의 실행 단위 (1개의 Job 실행 = 1개의 JobInstance 생성)
  • 예를들어 세개의 Job을 실행하면 3개의 JobInstance가 생성되고 만약 두 번째 작업이 실패해 다시 실행 되면 2번 작업에 대한 Job만 처리한다 

JobParameters

  • JobInstance를 구별하는 객체, JobInstance에 전달되는 매개변수 역할
  • String, Double, Long, Date 4가지 형식 지원

JobExecution 

  • JobInstance에 대한 실행 시도에 대한 객체 
  • JobInstance 실행에 대한 상태, 시작시간, 종료시간, 생성시간 등의 정보를 가진다
  • 작업 중 실패해 재실행 하면 동인한 JobInstace를 실행시키지만 JobExecution은 개별로 생긴다

Step

  • Job의 실행 단위
  • 하나의 트랜잭션과 유사하다
  • 처리 방식
    • Tasklet : 하나의 메서드로 구성 되어있는 간단한 인터페이스  
    • Chunk : commit row 수. Chunk 단위로 Transaction을 수행하기 때문에 실패시 Chunk 단위 만큼 rollback

StepExecution 

  • JobExecution과 동일하게 Step 실행 시도에 대한 객체
  • Job이 여러개의 Step으로 구성되어 있고 중간에 실패된다면 실패 이후의 StepExecution은 생성되지 않는다
  • Step이 시작이 될 때만 생성되고 JobExecution에 저장되는 정보 외에 read, write, commit, skip 수 등의 정보들이 저장된다 

ExecutionContext

  • Job에서 데이터를 공유 할 수 있는 데이터 저장소
  • Step간 데이터 공유가 가능하며 Job 실패시 ExecutionContext를 통한 마지막 실행 값을 재구성 할 수 있다 
  • 종류 
    • JobExecutionContext : commit 시점에 저장 
    • StepExecutionContext : 실행 사이에 저장

JobRepository

  • 모든 배치 정보를 담고 있는 매커니즘 
  • Job이 실행 되면 JobExecution과 StepExecution을 생성 후 JobRepository에서 Execution 정보들을 저장하고 조회하며 사용하게 된다 

JobLauncher 

  • Job과 JobParameters를 사용해 Job을 실행하는 객체 

ItemReader

  • Step에서 Item을 읽어오는 인터페이스
  • 읽어오는 데이터를 반환하며 null을 반환할 경우 총 데이터의 마지막임을 나타낸다 
  • 다양한 인터페이스가 존재하며 다양한 방법으로 Item을 읽어 올 수 있다 

ItemWriter

  • 처리 된 Data를 Write 할 때 사용되는 인터페이스
  • ItemReader/ItemProcessor로부터 전달 받은 데이터가 (step안에 chunk에 정의한)commit-interval 프로퍼티에 정의된 개수만큼 모이면 write메소드를 실행한다 
  • 처리 결과물에 따라 Insert,Update,Send(Queue 사용 시)가 될 수 있다 
  • 기본적으로 Item을 Chunk로 묶어 처리한다

ItemProcessor

  • ItemReader에서 읽어 온 item을 처리 후 ItemWriter에게 넘겨준다 
  • 한 번에 하나의 아이템을 처리한다 
  • 배치를 처리하는데 필수요소는 아니다. 데이터를 가공할 필요가 없으면 ItemReader에서 ItemWriter로 넘겨준다

'java' 카테고리의 다른 글

JDK JRE JVM  (0) 2022.02.18
HashTable | HashMap | ConcurrentHashMap 개념 정리  (0) 2021.12.07