본문 바로가기
  • Seizure But Okay Developer
BackEnd/Spring

Spring 배치 관련 정리

by Sky_Developer 2022. 12. 21.

개요

현 시스템에서 Spring 배치를 사용하면서 업무처리를 하는데, 좀 더 자세히 이해하기 위해 글로 정리합니다.

 

What is 배치?

배치는 영어 단어인 batch 를 우리 말로 읽은 것으로, 정식 명칭은 batch processing, 우리 말로는 일괄 처리라고 합니다. 실시간으로 통신해서 처리? No! → 한꺼번에 일괄적으로 대량 건을 처리.

배치는 보통 정해진 특정한 시간에 실행됩니다.

 

Then, how about 스프링 배치?

본격적으로 스프링 배치에 대해서 알아보겠습니다.

 

개념

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

Spring Batch에서 배치가 실패하여 작업 재시작을 하게 된다면 처음부터가 아닌 실패한 지점부터 실행을 하게 됩니다. 또한 중복 실행을 막기 위해 성공한 이력이 있는 Batch는 동일한 Parameters로 실행 시 Exception이 발생하게 됩니다.

(기본적인 배치 개념에서 이렇게 건너띄니까 스프링 배치가 제공하는 기능이 1도 와닿지 않고 현업에서도 실제 저런 기능을 사용하는지 의문이 듬 크크..일단 계속 후비고..)

 

Spring Batch == Quarts?

Spring Batch는 Batch Job을 관리하지만 Job을 구동하거나 실행시키는 기능은 지원하고 있지 않습니다. Spring에서 Batch Job을 실행시키기 위해서는 Quartz, Scheduler, Jenkins등 전용 Scheduler를 사용하여야 합니다.

(현업에서 쿼츠를 사용하는데 아, job 을 만들때는 스프링 배치를 쓰고 이를 실행하기 위해서 쿼츠를 쓰는 구조구나 라고 이해가 되었습니닿)

 

 

스프링 배치 구조

스프링 배치 구조는 위와 같습니다.

(하지만 1도 이해가 안되는)

 

공식문서는 설명이 거진 영유아가 수학의 정석을 읽으려는 느낌과 같아서

좀 더 설명이 정제된 다른 블로그 글을 참고해서 정리해보니 아래와 같네요.

 

  • Application : Spring Batch를 사용하여 개발자가 작성한 모든 배치 작업과 사용자 정의 코드
  • Batch Core : 배치 작업을 시작하고 제어하는 ​​데 필요한 핵심 런타임 클래스를 포함
  • Batch Infrastructure : 개발자와 애플리케이션에서 사용하는 일반적인 Reader와 Writer 그리고 RetryTemplate과 같은 서비스를 포함

스프링 배치는 계층 구조가 위와 같이 설계되어 있기 때문에 개발자는 Application 계층의 비즈니스 로직에 집중할 수 있고, 배치의 동작과 관련된 것은 Batch Core에 있는 클래스들을 이용하여 제어할 수 있습니다.

 

Spring Batch 장점

  • 유지보수성
    • 배치는 다른 어플리케이션의 코드들보다 수명이 깁니다.
    • 테스트 용이성, 풍부한 API
  • 유연성
    • JVM을 이용한 이식성 (기존의 코볼, C++ 등과 비교했을 때)
    • 코드 공유능력 (POJO 재활용 등)
  • 확장성
    • 과거의 메인프레임 방식이나, 커스텀하게 처리하던 방식은 병렬 처리 하려면 고려할게 많아 확장성과 안정성이 떨어집니다.
    • 자바(or 스프링) 배치는 단일 처리, 병렬 처리 등이 모두 가능합니다.

 

배치 프레임워크 중 스프링 배치를 쓰면 얻는 장점은?

  • ETL(추출=extract - 변환=transform - 적재=load) 패턴에 적합합니다.
    • 청크 기반 처리
    • 다양한 확장 기능
  • 데이터 마이그레이션
  • 병렬 처리
  • 워크로드 조정
    • Spring Cloud Data Flow 등을 통해 GUI로 테스크 조정 등

 

여기까지 정리를 해봤습니다. 제 글은 방대한 스프링 배치의 기능을 찍.먹 해본 수준이므로 내용이 부족합니다. 에러 처리나 기능 확장을 하면서 본격 작업할 때 상세 내용에 대하여 다뤄보도록 하겠습니다.

 

 

출처

배치란 무엇인가? - https://limkydev.tistory.com/140

스프링 배치란? - https://khj93.tistory.com/entry/Spring-Batch%EB%9E%80-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B3%A0-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0

스프링 공식문서 - https://docs.spring.io/spring-batch/docs/current/reference/html/index-single.html#spring-batch-intro

스프링 배치구조 - https://devbksheen.tistory.com/m/284

스프링 배치장점 - https://azderica.github.io/01-spring-batch/

댓글