ssung_항해일지/항해99_실전 프로젝트

실전 프로젝트 - 22일차

ssungcohol 2023. 4. 1. 22:36

Spring batch

 

batch = 일괄처리 라는 뜻을 지니고 있음

집계기능을 가지고 있고 이것은 하루에 한 번 수행된다.

단발성으로 대용량 데이터를 처리하는 어플리케이션을 배치 어플리케이션이라고 한다

 

Spring 진영에서는 Spring Batch가 존재한다.

 

배치 어플리케이션은 만족해야하는 조건이 있다.

  1. 대용량 데이터 - 대량의 데이터를 가져오거나, 전달, 계산 등의 처리를 할 수 있어야한다.
  2. 자동화 - 심각한 문제 해결을 제외하고는 사용자 개입 없이 실행되어야 한다.
  3. 견고성 - 잘못된 데이터를 충돌/중단 없이 처리할 수 있어야 한다.
  4. 신뢰성 - 무엇이 잘못되었는지를 추적할 수 있어야 한다. (로깅, 알림)
  5. 성능 - 지정한 시간 안에 처리를 완료하거나 동시에 실행되는 다른 어플리케이션을 방해하지 않도록 수행되야 한다.

Batch 사용 사례

  • 일 매출 집계 - 새벽에 전날의 매출 집계 데이터를 만들어 외부 요청이 올 경우 미리 만들어둔 데이터를 전달
  • ERP 연동 - 자원관리 시스템

Spring Batch 용어

 

Job

Job은 배치처리 과정을 하나의 단위로 만들어 놓은 객체.

배치처리 과정에 있어 전체 계층의 최상단에 위치

 

JobInstace

JobInstance는 Job의 실행 단위를 나타냄.

Job을 실행하면 하나의 JobInstance가 생성된다.

Ex_) Test1 실행, Test2 실행하게 되면 각각의 JobInstance가 생성되고, Test1을 실행한 JobInstance가 실패하여 다시 실행을 하더라도 JobInstance는 Test1에 대한 데이터만 처리

 

JobParameters

JobParameters는 Job의 실행 단위이다.

JobInstance는 어떻게 구별할까? => JobParameters 객체로 구분하게 된다. JobParameters는 JobInstance 구별 외에도

개발자 JobInstance에 전달되는 매개변수 역할도 한다.

Parameters는 String, Double, Long, Date 4가지 형식만을 지원

 

JobExecution

Execution은 JobInstance에 대한 실행 시도에 대한 객체이다.

Test1에 실행한 JobInstance가 실패하여 재실행을 하여도 동일한 JobInstance를 실행시키지만 두 번쨰 실행에 대한

JobExecution은 개별로 생기게된다.

JobExecution은 이러한 JobInstance 실행에 대한 상태, 시작시간, 종료시간, 생성시간 등의 정보를 담고 있다.

 

Step

Step은 Job의 배치처리를 정의하고 순차적인 단계를 캡슐화한다.

Job은 최소한 1개 이상의 Step을 가져야 하며 Job의 실제 일괄 처리를 제어하는 모든 정보가 들어있다.

 

StepExecution

StepExecution은 JobExecution과 동일하게 Step 실행 시도에 대한 객체를 나타낸다.

하지만 Job이 여러개의 Step으로 구성되어 있을 경우 이전 단계의 Step이 실행하게 되면 다음 단계가 실행되지 않음으로 실패 이후 StepExecution은 생성되지 않는다.

StepExecution 또한 JobExecution과 동일하게 실제 시작이 될 때만 생성된다.

StepExecution에는 JobExecution에 저장되는 정보 외에 read 수, write 수, commit 수, skip 수 등의 정보를 저장한다.

 

Execution Context

Execution Context란 Job에서 데이터를 공유 할 수 있는 데이터 저장소이다.

Spring Batch에서 제공하는 Execution Context는 JobExecutionContext, StepExecutionContext 두 가지 종류가 있으나

이 두 가지는 지정되는 범위가 다르다.

JobExecutionContext의 경우 Commit 시점에 저장되는 반면, StepExecutionContext는 실행 사이에 저장된다.

Execution Context를 통해 Step간 Data 공유가 가능하며 Job 실패시 ExecutionContext를 통한 마지막 실행 값을 재구성

할 수 있다.

 

JobRepository

JobRepository는 위에서 말한 모든 배치 처리 정보를 담고있는 매커니즘이다.

Job이 실행되면 JobRepository에 JobExecution과 StepExecution을 생성하게 되며 JobRepository에서 Execution 정보들을 저장하고 조회하며 사용하게 된다.

 

JobLauncher

JobLauncher는 Step에서 Item을 읽어오는 인터페이스이다.

ItemReader에 대한 다양한 인터페이스가 존재하며 다양한 방법으로 Item을 읽어 올 수 있다.

 

ItemWriter

ItemWriter는 처리된 Data를 Writer 할 때 사용한다.

Writer는 처리 결과물에 따라 Insert가 될 수도 Update가 될 수도 Queue를 사용한다면 Send가 될 수도 있다.

Writer또한 Read와 동일하게 다양한 인터페이스가 존재하고, Writer는 기본적으로 Item을 Chunk로 묶어 처리한다.

 

ItemProcessor

ItemProcessor는 Reader에서 읽어온 Item 데이터를 처리하는 역할을 한다.

Processor는 배치를 처리하는데 필수 요소는 아니며 Reader, Writer, Processor 처리를 분리하여 각각의 역할을 명확하게 구분한다.

728x90