Spring Batch

송민지·2024년 12월 23일

면접준비

목록 보기
2/2

Spring Batch란

  • 로깅, 트랜잭션 관리, 작업 처리 통계, 작업 재시작, 건너뛰기, 리소스 관리를 포함하여 대량의 레코드를 처리하는데 필수적인 재사용 기능을 제공하는 프레임워크 입니다.
  • 최적화 및 분할 기술을 통해 대량의 데이터 처리 및 고성능 배치 작업을 가능하게 하는 기능을 제공합니다.
  • 스케줄러를 대체하기보다 스케줄러와 함께 작동하도록 설계되었습니다.
  • 대량의 배치 작업은 프레임워크를 확장 가능한 방식으로 사용하여 상당한 양의 정보를 처리할 수 있습니다.

Spring Batch가 지원하는 비즈니스 시나리오

  1. 주기적으로 일괄 처리를 수행
  2. 동시적으로 일괄처리(작업의 벙렬 처리)
  3. 단계적 엔터프라이즈 메시지 중심 처리
  4. 대규모 병렬 일괄 처리
  5. batch 작업 실패 후 수동 또는 자동 재시작
  6. 종속 단계의 순차적 처리
  7. 부분 처리: 레코드 건너뛰기(ex. rollback)
  8. 전채 배치 트랜잭션

❗️ Batch와 Scheduler는 다릅니다!!

Scheduler 와 Batch

schduler는 시간을 기반으로 백그라운드에서 반복적인 작업을 실행하기 위해 사용합니다.
batch는 대량의 데이터를 일괄처리하지만 시간을 기반으로 동작하지 않습니다. batch는 scheduler와 같이 사용될 수 있도록 설계되었습니다.(Batch가 없었다면 개발자가 수동으로 실행시켜야 하지 않았을까)
따라서 Scheduler 설정에 따라 대량의 데이터를 일괄처리 할 수 있도록 설정할 수 있습니다.

Batch 용어

Job

  • 배치 처리과정을 하나의 단위로 만들어 놓은 객체로 최상단 Object입니다.

JobInstance

  • JobInstance는 특정 Job의 실제 실행 인스턴스를 의미합니다. 예를 들어, "매일 아침 8시에 데이터를 처리"하는 Job을 구성한다고 가정하면, 1월 1일, 1월 2일 등 매일 실행될 때마다 새로운 JobInstance가 생성됩니다.
    한번 생성된 JobInstance는 해당 날짜의 데이터를 처리하는 데 사용되며, 실패했을 경우 같은 JobInstance를 다시 실행하여 작업을 완료할 수 있습니다.

JobParameters

JobParameters는 JobInstance를 생성하고 구별하는 데 사용되는 파라미터입니다.
Job이 실행될 때 필요한 파라미터를 공하며, JobInstance를 구별하는 역할도 합니다.
스프링 배치는 String, Double, Long, Date 이렇게 4가지 타입의 파라미터를 지원합니다.

JobExecution

JobExecution은 JobInstance의 한 번의 시행 시도를 나타냅니다.
예를 들어, 1월 1일에 실행된 JobInstance가 실패했을 때 재시도하면, 같은 JobInstance에 대한 새로운 JobExcecution이 생성됩니다.
JobExecution은 실행 상태, 시작시간, 종료시간, 생성시간 등 JobInstance의 실행에 대한 세부 정보를 담고 있습니다.

Step

Step은 Job의 하위 단계로서 실제 배치 처리 작업이 이루어지는 단위입니다.
한 개 이상의 Step으로 Job이 구성되며, 각 Step은 순차적으로 처리됩니다.
각 Step 내부에서는 ItemReader, ItemProcessor, ItemWriter를 사용하는 chunk 방식 또는 Tasklet 하나를 가질 수 있습니다.

StepExecution

StepExecution은 Step의 한 번의 실행을 나타내며, Step의 실행 상태, 실행 시간 등의 정보를 포함합니다.
JobExecution과 유사하게, 각 Step의 실행 시도마다 새로운 StepExecution이 생성됩니다.
또한, 읽은 아이템의 수, 쓴 아이템의 수, 커밋 횟수, 스킵한 아이템의 수 등의 Step 실행에 대한 상세 정보도 포합 합니다.

ExecutionContext

ExecutionContext는 Step 간 또는 Job 실행 도중 데이터를 공유하는 데 사용되는 저장소입니다.
JobExecutionContext와 StepExecutionContext 두 종류가 있으며, 범위와 저장 시점에 따라 적절하게 사용됩니다.
Job이나 Step이 실패했을 경우, ExecutionContext를 통해 마지막 실행 상태를 재구성하여 재시도 또는 복구 작업을 수행할 수 있습니다.

JobRepository

JobRepository는 배치 작업에 관련된 모든 정보를 저장하고 관리하는 메커니즘입니다.
Job 실행정보(JobExecution), Step 실행정보(StepExecution), Job 파라미터(JobParameters)등을 저장하고 관리합니다.
Job이 실행될 때, JobRepository는 새로운 JobExecution과 StepExecution을 생성하고, 이를 통해 실행 상태를 추적합니다.

JobLauncher

JobLauncher는 Job과 JobParameters를 받아 Job을 실행하는 역할을 합니다.
이는 전반적인 Job의 생명 주기를 관리하며, JobRepository를 통해 실행 상태를 유지합니다.

ItemReader

ItemReader는 배치 작업에서 처리할 아이템을 읽어오는 역할을 합니다.
여러 형식의 데이터 소스(예: 데이터베이스, 파일, 메시지 큐 등)로 부터 데이터를 읽어오는 다양한 ItemReader 구현체가 제공됩니다.

ItemProcessor

ItemProcessor는 ItemReader로부터 읽어온 아이템을 처리하는 역할을 합니다.
이는 선택적인 부분으로서, 필요에 따라 사용할 수 있으며, 데이터 필터링, 변환 등의 작업을 수행할 수 있습니다.

ItemWriter

ItemWriter는 ItemProcessor에서 처리된 데이터를 최종적으로 기록하는 역할을 합니다.
ItemWriter 역시 다양한 형태의 구현체를 통해 데이터베이스에 기록하거나, 파일을 생성하거나 메시지를 발행하는 등 다양한 방식으로 데이터를 쓸 수 있습니다.

Tasklet

Tasklet은 간단한 단일 작업, 예를 들어 리소스의 정리 또는 시스템 상태의 체크 등을 수행할 때 사용됩니다.
이는 스프링 배치의 Step 내에서 단일 작업을 수행하기 위한 인터페이스로, 일반적으로 ItemReader, ItemProcessor, ItemWriter의 묶음을 가지는 Chunk 기반 처리 방식과는 다릅니다.
Tasklet의 execute 메서드는 Step의 모든 처리가 끝날 때까지 계속 호출됩니다.

JobOperator

JobOperator는 외부 인터페이스로, Job의 실행과 중지, 재시작 등의 배치 작업 흐름제어를 담당합니다.
이 인터페이스를 통해 JobLauncher와 JobRepository에 대한 직접적인 접근 없이도 배치 작업을 수행하고 상태를 조회할 수 있습니다.

JobExplorer

JobExplorer는 Job의 실행 이력을 조회하는 데 사용됩니다.
JobRepository에서 제공하는 정보와 유사하지만, JobRepository는 주로 Job의 실행 도중인 상태에 대해 업데이트하고 관리하는 반면, JobExplorer는 주로 읽기 전용 접근에 초점을 맞추고 있습니다.

Spring Batch Meta Table

BATCH_JOB_INSTANCE

  • JobInstance와 관련된 모든 정보를 가지며, 전체 계층 구조의 최상위 역할을 합니다.

BATCH_JOB_EXECUTION

  • JobExecution와 관련된 모든 정보가 들어있습니다. JobExcution은 JobInstance가 실행될 때마다 시작시간, 종료시간, 종료코드 등 다양한 정보를 가지고 있습니다.

BATCH_JOB_EXECUTION_PARAMS

  • JobParameters와 관련된 모든 정보가 들어있습니다.

BATCH_JOB_EXECUTION_CONTEXT

  • 작업의 실행 컨텍스트와 관련된 모든 정보가 들어있습니다.
  • 각 JobExecution마다 정확히 하나의 JobExecutionContext가 있습니다.
  • 이 ExecutionContext 데이터는 일반적으로 JobInstance가 실패 시 중단된 위치에서 다시 시작할 수 있는 정보를 저장하고 있습니다.

BATCH_STEP_EXECUTION

  • StepExecution 객체와 관련된 모든 정보가 저장됩니다.
  • BATCH_JOB_EXECUTION 테이블과 유사하며, 생성된 각 JobExecution에 대해 항상 단계당 하나 이상의 항목이 존재합니다.
  • STEP의 EXECUTION 정보인 읽은 수, 커밋 수, 스킵 수 등 다양한 정보를 추가로 담고 있습니다.

BATCH_STEP_EXECUTION_CONTEXT

  • StepExecutionContext와 관련된 모든 정보가 저장되며, 스텝 실행당 정확히 하나의 ExecutionContext가 있습니다.
  • 특정 스텝 실행을 위해 유지되어야 하는 모든 데이터가 포함되어 있습니다. 이 ExecutionContext 데이터는 일반적으로 JobInstance가 실패 시 중단된 위치에서 다시 시작할 수 있는 정보를 저장하고 있습니다.

Spring Batch란? 간단한 개념과 코드 살펴보기
[Spring Batch] 개념 및 Job 생성

profile
항상 밝게

0개의 댓글