본문 바로가기
개발/SpringBatch

[Spring Batch] 2. Spring Batch 용어

by 난중후니 2023. 1. 17.
728x90
반응형

Job

  • Job은 배치처리 과정을 하나의 단위로 만들어 놓은 객체입니다.
  • 여러 Step 인스턴스를 포함하는 컨테이너입니다.

JobInstance

  • Job의 실행 단위를 나타냅니다. Job을 실행시키면 하나의 JobInstance가 생성됩니다.
  • Job Parameter가 같은 경우 테이블에 기록되지 않습니다. -> 동일한 Job Parameter는 여러개 존재할 수 없습니다.
    예를 들어 일일 매출 통계를 구할 때 1월 1일에 실행시킨 일 매출 통계가 실패가 나서 다시 실행시키더라도 JobInstance는 1월 1일의 매출에 대한 데이터만 처리하게 됩니다.

JobParameters

  • Spring Batch가 실행될 때 외부에서 받을 수 있는 파라미터입니다.
  • Job Parameter를 사용하기 위해서는 Spring Batch 전용 Scope인 @StepScope와 @JobScope 선언으로 Bean을 생성해야 합니다.
  • String, Double, Long, Date 4가지 형식만을 지원합니다.
  • JobInstance를 구분하게 합니다.

JobExecution

  • JobInstance에 대한 실행 시도에 대한 객체입니다.
  • JobExecution과 JobInstance는 부모 - 자식 관계입니다.
  • JobInstance가 성공/실패했던 모든 내역을 저장합니다.
  • 동일한 Job Parameter로 성공한 기록이 있을 때는 재수행 불가합니다.
    위에서 1월 1일 일일 매출이 실패한 경우 다시 실행시키더라도 JobInstance는 동일하지만 결국 2번 실행한 것이므로 JobExcution은 개별로 생성되어 2개가 됩니다.

Step

  • 각 Step은 Job을 구성하는 독립된 작업의 단위입니다.
  • Job은 최소 1개 이상의 Step을 가져야 하며 Job의 실제 일괄 처리를 제어하는 모든 정보가 들어있습니다.
  • Tasklet, Chunk 2가지가 있습니다.
  • 예를 들어 의류매장에서 모든 종류의 판매에 대한 일일 매출을 실행하는 Job이 있을 때 코트에 대한 일일 매출을 수행하는 작업을 하나의 Step이라고 할 수 있습니다.

Tasklet Step

  • Step이 중지될 때까지 execute 메서드가 계속 반복해서 수행하고 수행할 때마다 독립적인 트랜잭션이 얻어집니다.
  • 단일 작업을 처리할 때 사용합니다.

Chunk Step

  • 한 번에 하나씩 데이터(row)를 읽어 Chunk라는 단위를 만든 뒤 Chunk 단위로 트랜잭션을 관리합니다.
    Chunk 단위로 수행함으로써 작업이 실패할 경우 Chunk 단위만큼 rollback 되고 이전에 커밋된 트랜잭션은 다른 Chunk 단위이므로 반영이 됩니다.

null

  • 한 Step에서 ItemReader로 item을 읽어오고 ItemProcessor가 있다면 읽어온 item에 대해 processor 작업이 진행됩니다.
    Chunk 단위의 item에 대해서 ItemReader와 ItemProcessor가 모두 수행되었다면 ItemWriter가 수행됩니다.
    모든 Item에 대한 작업이 완료될 때까지 위 과정을 반복합니다.

StepExecution

  • Step 실행 시도에 대한 객체를 나타냅니다.
  • Job이 여러개의 Step으로 구성되어 있는 경우 이전 단계의 Step이 실패하게 된다면 순차적으로 작업이 진행되는 Step의 특징으로 인하여 다음 단계의 Step은 실행되지 않으므로 StepExecution은 생성되지 않습니다.

ExecutionContext

  • Job에서 데이터를 공유 할 수 있는 데이터 저장소입니다..
    Spring Batch에서 제공하는 ExecutionContext는 JobExecutionContext, StepExecutionContext 2가지 종류가 있습니다.
    JobExecutionContext의 경우 Commit 시점에 저장되는 반면에 StepExecutionContext는 실행 사이에 저장이 되게 됩니다.
    ExecutionContext를 통해 Step간 Data 공유가 가능하며 Job 실패시 ExecutionContext를 통한 마지막 실행 값을 재구성 할 수 있습니다.

JobRepository

  • 다양한 배치 수행과 관련된 수치 데이터와 Job의 상태를 유지 및 관리합니다.
  • 일반적으로 관계형 데이터베이스를 사용하며 스프링 배치 내의 대부분의 주요 컴포넌트가 공유합니다.
  • 실행된 Step, 현재 상태, 읽은 아이템 및 처리된 아이템 수 등이 모두 JobRepository에 저장됩니다.
  • JobRepository는 모든 배치 처리 정보를 담고 있습니다. Job이 실행되게 되면 JobRepository에 JobExecution과 StepExecution을 생성하게 되며 JobRepository에서 Execution 정보들을 저장하고 조회하며 사용하게 됩니다.

JobLauncher

  • Job과 JobParameters를 사용하여 Job을 실행하는 역할을 담당합니다(JobExecution을 호출하는 역할입니다)
  • Job의 재실행 가능 여부 검증, Job의 실행 방법, 파라미터 유효성 검증 등을 수행합니다.
  • Job을 실행하면 해당 Job은 각 Step을 실행합니다. 각 Step이 실행되면 JobRepository는 현재 상태로 갱신됩니다.
  • JobLauncher를 이용해서 Job을 실행하면 Job은 정의된 Step을 순차적으로 실행합니다.

ItemReader

  • ItemReader는 Step에서 Item을 읽어오는 인터페이스입니다. ItemReader에 대한 다양한 인터페이스가 존재하며 다양한 방법으로 Item을 읽어 올 수 있습니다.

CursorItemReader

  • Database와 연동시 하나의 Connection으로 Batch가 끝날때까지 사용되므로 중간에 끊길 수 있으며 SocketTimeout을 큰 값으로 설정하도록 해야합니다.

PagingItemReader

  • Batch 수행 시간이 오래걸리는 경우 CursorItemReader 대신 사용합니다.
  • 한 페이지를 읽을때마다 Connection을 맺고 끊기 때문에 많은 데이터라도 타임아웃과 부하 없이 수행가능합니다.

ItemProcessor

  • ItemReader에서 읽어온 Item의 데이터를 처리하는 역할을 합니다.
  • ItemProcessor는 필수 요소는 아닙니다.

ItemWrtier

  • ItemWriter, ItemWriter + ItemProcessor에서 처리된 값들을 Writer 합니다.
728x90
반응형

댓글