[Batch] Spring Batch 를 이용해 배치성 APP 개발하기

SJ.CHO·2024년 11월 14일
post-thumbnail

배치성 APP 이란?

  • 개발자가 정의한 작업을 단발적 으로 일괄 처리 하기위한 APP 이다.
  • 주기적으로 실행되는 APP 으로 오해하기 쉽지만, 별도로 Triggering 해줘야 한다.
  • 기존의 APP 처럼 항상 런타임상태로 존재하는게 아닌 자신의 할 일만 실행되고 다시 종료되는 APP 이다.

  • 작업은 API로 개발을 할 수도 있지만, 메인 비즈니스 로직에 방해됄수 있고, 사용빈도가 적은 배치작업을 위해서 하나의 서버를 띄워두는 것은 리소스 낭비다.
  • 또한 Scale-Out 상황에서 모든 서버가 동일한 코드를 가져야한다.
  • 스케줄 작업이 배치작업과 동일하다고 오해하기도 쉽지만 스케줄에 의해 Triggering 되기 쉬울뿐이지 스케줄 작업에 종속되는것이 아니다!.
    (이러한 경우 @Scheduled 를 통해 작업이 가능하다.)

Spring Schedule

  • Spring Boot APP 에서 주기적으로 특정메소드를 호출하고싶을 때 사용한다.
  1. @EnableScheduling 어노테이션으로 스케쥴러 활성화.
    (autoconfiguration 을 통해 활성화 된다. Spring boot 의 특징중 하나)
  2. 스케줄작업을 걸고 싶은 메소드에 @Scheduled 어노테이션 사용.

고려해볼만한 점

  • 이전작업이 아직 안 끝났다면? 어떻게 되는가?
    • 기본정책은 뒷 작업이 SKIP 되는 형식으로 구성된다.
    • 동시 실행이 가능하도록(Async) 혹은 작업이 끝나고(fixedDelay), LOCK 기능(ShedLock)등을 활용이 가능하다.
  • Scale-Out 상황에서 동일한 스케줄링작업이 여러번 실행될때
    • 동시에 실행되도 문제없도록 설계(멱등성), ShedLock, 별도 배치APP 분리등을 사용.


Batch 개요

  • 배치성 APP 을 보다 쉽게 개발할 수 있게 도와주는 FrameWork 이다.

JOP

  • Spring Batch 로 개발된 프로젝트 안에서 하나의 작업단위 이다.
  • 10개의 배치성 APP 을 개발한다 하면, 1개의 Batch 프로젝트의 10개의 JOB 을 만들면 된다.

Step

  • 하나의 JOB 은 여러개의 STEP 으로 이루어 진다.

  • Step 은 Tasklet 방식과 Reader/Processor/Writer 방식이 있다.

    • Tasklet

      • 하나의 독립적인 작업이 연달아 이루어지는 방식이다.
      • 각각의 메소드처럼 구성되어져 있다.
    • Reader/Processor/Writer

      • Chunk 단위로 동작하며, 대용량 작업을 N개의 단위로 한번에 처리하는 동작을 한다.
      • Chunk 단위로 @Transaction 이 걸린다.
  • 배치성 APP의 동작에 따라 동작방식에 대해 선택을 하면된다.


Meta Table

  • 주로 배치성 APP STEP에대한 기록들을 가지는 Table 이다.
  • 해당 테이블은 DB에 직접적으로 생성해줘야 한다.
profile
70살까지 개발하고싶은 개발자

0개의 댓글