개발/SPRING

[Spring Batch] Spring Batch에 대하여

지잉지잉 2023. 1. 29. 02:32

Spring Batch란?

  • 대용량 일괄처리의 편의를 위해 설계된 가볍고 포괄적인 배치 프레임워크
  • Spring Scheduler와는 별개의 개념이다. Batch는 보통 Jenkins나 Spring Scheduler에 의해 Trigger 된다.

왜 쓸까? (내 생각..)

  • A라는 한 서버가 있고 이 서버에는 주기적으로 데이터를 처리해야하는 일련의 작업이 있다.
  • A서버의 해당 작업은 Spring Scheduler에 의해 해당 로직이 수행된다.
  • 그러면 A서버는 데이터를 주기적으로 처리하는 일 뿐만아니라 본래 수행해야하는 요청/응답까지 수행했을 때 리소스가 부족하거나 하진 않을까?
  • 이 작업을 Spring Batch로 구현한다면 => 별도의 배치서버로 구현하고 해당 서버는 Scheduler에 의해 실행이 된다.
  • 즉 Spring Scheduler에 의해 Trigger가 된다면, 새로운 Job Instance가 생기고 배치작업이 끝나면 Job Instance는 사라진다. 배치가 실행되는 시간에만 서버의 리소스를 사용한다.
  • 그렇기 때문에 서버에서는 리소스 관리를 수월하게 할 수 있다.

Tasklet 처리 방식과 Chunk 지향 처리 방식에 대하여

  • Spring Batch에서 "Job"은 순차적인 Step을 수행한다.

1. Tasklet 처리 방식

  • 하나의 메서드로 구성되어 있는 간단한 인터페이스 이다. 1Step:1Tasklet

2. Chunk 지향 처리 방식

  • Chunk란, Batch 처리에서는 chunk 단위로 트랜잭션을 수행한다. 
  • chunk는 트랜잭션 내에서 커밋하는 row 수 이며 chunk 단위만큼 커밋되거나 롤백된다.

  • 여기서 ItemReader와 ItemProcessor에서는 데이터 1건씩 다뤄지고, Writer에서는 Chunk 단위로 처리된다.