백 엔드/spring

Spring Batch 적용기

까르르꿍꿍 2024. 4. 5. 21:18

Spring Batch란? 

로깅/추적, 트랜잭션 관리, 작업 처리 통계, 작업 재시작, 건너뛰기, 리소스 관리 등 대용량 레코드 처리에 필수적인 기능을 제공합니다. 또한 최적화 및 파티셔닝 기술을 통해 대용량 및 고성능 배치 작업을 가능하게 하는 고급 기술 서비스 및 기능을 제공합니다.

 

(Spring Batch는 대용량 처리를 도와줄 뿐 scheduler랑은 상관 없다는 것을 주의하자.. 둘이 같이 사용하는 경우가 많아 혼동하지 않기)

 

Spring Batch 용어 

Job

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

JobInstance

  • Job의 실행의 단위를 나타냅니다.
  • Job을 실행시키게 되면 하나의 JobInstance가 생성되게 됩니다.

JobParameters

  • JobInstance 구별하게 해줍니다.
  • JobInstacne에 전달되는 매개변수 역할도 하고 있습니다.

Step

  • 배치 작업의 독립적이고 순차적인 단계를 캡슐화하는 도메인 객체입니다.
  • Step의 내용은 개발자마다 각자의 재량껏 비즈니스 코드를 구현해야 합니다.
  • Step은 Chunk 기반 ,Task 기반 두가지로 구현이 가능하다.

 Tasklet을 사용한 Task 기반 처리

  • 배치 처리 과정이 비교적 쉬운 경우 쉽게 사용
  • 대량 처리를 하는 경우 더 복잡
  • 하나의 큰 덩어리를 여러 덩어리로 나누어 처리하기 부적합

 Chunk를 사용한 chunk(덩어리) 기반 처리

  • ItemReader, ItemProcessor, ItemWriter의 관계 이해 필요
  • 대량 처리를 하는 경우 Tasklet 보다 비교적 쉽게 구현
  • 예를 들면 10,000개의 데이터 중 1,000개씩 10개의 덩어리로 수행 

 

살행 방식

예약알람 시스템 구축의 여정

인턴을 진행하면서 예약알람 시스템을 만들어야 했다.

그러기 위해서 스케줄러가 필요했고 대용량 처리를 위한 Spring Batch를 사용해야했다. 

실시간으로 알람을 보내야 하는 기능이었으면 메시지 큐를 이용해서 실시간 처리를 이용했겠지만 지금 구현하는 기능은 실시간보다 데이터 추적이 필요하므로 이렇게 작업을 했다.

 

 

설계도면

 

대략 설계 그림을 보면 이렇게 작동이 된다.

 

  • 이벤트 감지,발송 대상 수집, 재발송, 발송은 각각 하나의 Task로 계속 실행되는 작업이다.
  • 상태값을 설정해서 데이터의 상태를 추적할 수 있게 만들었다.
  • 또한 배치 작업할 때 대용량을 다루므로 chunk 방식을 도입했다.