SpringBatch 정리

코코몽압지·2024년 3월 27일
0

프로젝트를 진행 하면서 특정한 조건에 따라서 인스턴스 생성, 쿠폰 지급을 할 수 있도록 대용량 데이터를 일괄적 으로 처리 하는 Spring Batch
사용하게 되었는데 Spring Batch 가 어떤 유형으로 되어있는지,상황별로 어느걸 사용해야하는지의 대한 비교를 해보겠습니다.
(혹시 읽으시면서 비정확한 부분이나 첨언 해주실 부분 있으면 말씀 해주세요.)

(1) Spring Batch 사용 이점:

1-1 자동화 및 일관성 유지

  • 반복적인 작업을 자동화하여 시간과 노력 절약
  • 수동 작업 오류 방지 및 일관된 결과 제공

1-2 확장성 및 안정성

  • 대용량 데이터 처리에도 효율적인 작동
  • 여러 서버에서 분산 처리 지원으로 빠르고 안정적인 작업 수행

1-3 모니터링 및 관리

  • 작업 진행 상황 실시간 모니터링 및 필요에 따른 개입
  • 작업 실행 기록 저장 및 비교 분석을 통한 개선

(2) 배치 형식:

  • Job-Step 구조
    • Job: 배치 처리 작업의 전체 흐름 정의
    • Step: 사용자 정의 스텝 순서대로 실행
      • Step 내부 컴포넌트 유형에 따라 차이 발생

이해를 돕기 위해서 현재는 비즈니스로직 이 변경 되긴 하였지만
프로젝트의 내부 플로우를 정리한 그림을 가져왔습니다.

Job->Step(Step 내부 컴포넌트 실행) 순으로 진행이 되는데,
한개의 Job에 여러개의 Step을 정의해서 사용 할 수 있습니다.

@Scheduled VS CommandLineRunner

조합 방법적합한 사용 상황장점단점
CommandLineRunner + JobLauncher애플리케이션 시작 시 특정 조건을 만족하는 배치 작업을 실행해야 할 때애플리케이션 시작과 동시에 배치 작업 실행
Job 파라미터 전달 가능 Job 실행 종료 후 콜백 처리 가능직접 실행 시점 제어 불가스케쥴링 옵션 부재
@Scheduled + JobLauncher정해진 시간이나 주기에 따라 파라미터를 동적으로 전달하며 배치 작업을 실행해야 할 때주기적 실행 가능 정확한 시간에 작업 실행 가능
Job 파라미터 전달 가능 Job 실행 종료 후 콜백 처리 가능복잡한 스케쥴링 요구사항에 한계
스프링 컨텍스트 필요

JobOperator vsJobLauncher

기능JobLauncherJobOperator
기능기본 Job 실행고급 Job 실행 제어
실행 스타일동기비동기
Job 제어제한적(Job 및 JobParameters 사용 시작)직접 제어(시작, 중지, 재시작, 취소)
사용 사례간단한 예약된 Job, 외부 트리거복잡한 워크플로, 실시간 모니터링, 고급 관리

일반적으로 배치작업을 실행하고자 하는 요구 조건에 따라
CommandLineRunner + Joblauncher 혹은 @Scehduled +JobLauncher 와
JobConfig 파일을 같이 작성할 것인지, Batch4.0부터 지원하는 JobLauncher와
Config 를 동시에 정의하고 조금 더 Job 의 제어를 세밀하게 관리할필요가 있다면
공식 문서를 이용하여 필요시에 사용 하면 좋을 것 같습니다.

JobConfig에서 어떤 방식으로 Job 과 Step 을 정의 하고 어떠한 컴포넌트를 쓰는지 비교 해보겠습니다.

    @Bean
    fun eventJob(jobRepository: JobRepository,deleteStep:Step, eventStep: Step): Job {
        return JobBuilder("premiumDealJob", jobRepository)
            .start(deleteStep)//특가삭제
            .next(eventStep)//apply-> 특가
            .build()
    }  

이런식으로 Jobbuilder 안에 정의한 Step 을 의도한 순서대로 작성하면 됩니다.

(3) 컴포넌트 유형 :

3-1 Tasklet: 간단하고 단일한 작업 수행

3-2 ItemOriented:

  • ItemReader: 데이터 읽기
  • ItemProcessor: 데이터 처리
  • ItemWriter: 데이터 저장

(4) ItemOriented vs Tasklet 비교

구분ItemOrientedTasklet
특징아이템 단위 데이터 처리간단하고 단일한 작업
장점다양한 데이터 형식 및 처리 로직 지원코드 작성 간편
단점성능 저하 가능성복잡한 작업 수행 어려움
적용 분야데이터 마이그레이션, ETL, 데이터 분석파일 복사, 데이터베이스 테이블 초기화
  • 결론 및 향후 고려할점
    - 작업 특성에 따라 적절한 방식 선택 중요
    - 데이터 처리량, 복잡성, 성능 요구 사항 고려
    - Spring Batch Admin 사용: 작업 진행 상황 실시간 모니터링 및 관리
    - 로그 분석: 오류 및 문제점 파악
    - 차후 이벤트 추가 시 겹치는 Job들의 동시성 이슈를 관리 하기 위해 FlowJob 사용
    - 가능하면 FlowJob 사용 할 일 없게 이벤트들의 시간을 따로
    맞춰주는게 중요

Batch 트러블 슈팅

    java.lang.NoSuchMethodException: jdk.proxy2.$Proxy190.findByApplicationDateBetween(java.time.LocalDateTime,java.time.LocalDateTime,org.springframework.data.domain.PageRequest)
  • 기본적으로 RepositoryItemReaderBuilderPage Request 를 수반하는데,
    기존 Jpa에서 지원하는 SQL문은 자동으로 요청을 형식 을 맞춰주나 , JPQL 으로 인덱싱 할 때 에는
    요구 하는 형식에 맞춰서 보내야 합니다.

0개의 댓글