본문 바로가기
Spring/Batch

Spring Batch를 알아보자

by godkoo 2020. 12. 5.

What is batch application ?

웹 어플리케이션을 많이 개발하다 보니 배치, 배치잡, 크론탭, 스케줄링 등 다양한 용어를 혼합하여 배치라고 부르고 있습니다. 저부터도...
위키피디아 의 정의를 보면 배치 프로세싱 이란 일괄 처리라고 적혀있습니다.
주로 웹에서 배치라 함은 정해진 주기(스케줄링)를 가지고 정해진 작업(Job)을 처리 하는 것들을 말하죠.
가령 예를 들면 매출집계, 통계, 메일발송 등을 이런 작업들을 모아서 일괄 처리 하도록 스케줄링을 합니다.
여기서 중요한 포인트는 스케줄링과 배치 프로세싱은 전혀 다르다는것 입니다. (저는 공부하면서 다시금 깨달았습니다.)
Spring scheduler(linux cron 같은놈)를 통해 관리자 페이지 내부에 주로 사용자가 없는 시간에 정해진 주기를 두고,
위의 일괄처리가 필요한 작업들을 코드로 구현해 놓고 사용 했습니다.

정리 하자면 배치라고 부르는 작업과 스케줄링 전혀 다른 개념 이라는거를 꼭 이해 하시고 넘어가면 되겠습니다. (아시면 Pass) 🥳

스케줄러는 정해진 주기를 가지고 특정 업무를 수행할수 있도록 지원하는 것,
배치는 사용자와의 상호 작용 없이 원하는 작업을 정해진 순서에 따라 일괄 적으로 처리하는 비지니스 로직 구간 입니다.
즉 위의 스케줄러가 호출하게 될 실제 구현체 부분입니다.

배치 애플리케이션의 조건

배치 애플리케이션은 아래의 조건을 만족해야 합니다.

  • 대용량 데이터 처리: 대량의 데이터를 가져오고, 전달, 계산하는 등의 처리를 할 수 있어야 합니다.
  • 자동화: 사용자의 개입 없이 실행 되어야 합니다.
  • 견고성: 잘못된 데이터가 있더라도 충돌/중단 없이 처리할 수 있어야 합니다.
  • 신뢰성: 무엇이 잘못되었는지를 추적할 수 있어야 합니다.(로깅, 알림)
  • 성능: 지정한 시간 안에 처리를 완료하거나, 동시에 실행되는 다른 애플리케이션에 영향 없이 수행되어야 합니다.

What is Spring Batch ?

Spring Batch는 엔터프라이즈 시스템의 일상적인 운영에 필수적인 강력한 배치 애플리케이션을 개발할 수 있도록 설계된 가볍고 포괄적 인 배치 프레임 워크입니다.
Spring Batch는 사람들이 기대하는 Spring Framework의 특성을 기반으로 구축되며, 개발자가 필요할 때 더 진보 된 엔터프라이즈 서비스에 쉽게 액세스하고 활용할 수 있도록 합니다.
Spring Batch는 스케줄링 프레임 워크가 아닙니다.
상용 및 오픈 소스 공간 모두에서 사용할 수있는 좋은 엔터프라이즈 스케줄러 (예 : Quartz, Tivoli, Control-M 등)가 많이 있습니다.
스케줄러를 대체하는 것이 아니라 스케줄러와 함께 작동하기위한 것입니다.

Spring Batch는 로깅 / 추적, 트랜잭션 관리, 작업 처리 통계, 작업 재시작, 건너 뛰기, 리소스 관리 등 대량의 레코드 처리에 필수적인 재사용 가능한 기능을 제공합니다.
또한 최적화 및 파티셔닝 기술을 통해 대용량 및 고성능 배치 작업을 가능하게하는 고급 기술 서비스 및 기능을 제공합니다.
Spring Batch는 단순한 사용 사례 (예 : 데이터베이스로 파일 읽기 또는 저장 프로 시저 실행)뿐만 아니라 복잡한 대용량 사용 사례 (예 : 데이터베이스간에 대량의 데이터 이동, 변환 등에서 사용할 수 있습니다.) 대용량 배치 작업은 확장 성이 뛰어난 방식으로 프레임 워크를 활용하여 많은 양의 정보를 처리 할 수 ​​있습니다.

Why should we use Spring Batch ?

Spring Batch는 이러한 기본 배치 반복을 자동화하여 일반적으로 사용자 상호 작용없이 오프라인 환경에서 유사한 트랜잭션을 집합으로 처리 할 수있는 기능을 제공합니다.
배치 작업은 대부분의 IT 프로젝트의 일부이며 Spring Batch는 강력한 엔터프라이즈 급 솔루션을 제공하는 유일한 오픈 소스 프레임 워크입니다.

Spring Batch의 비즈니스 시나리오

  • 주기적으로 배치 프로세스 커밋
  • 동시 일괄 처리 : 작업의 병렬 처리
  • 단계별 엔터프라이즈 메시지 기반 처리
  • 대규모 병렬 일괄 처리
  • 실패 후 수동 또는 예약 된 재시작
  • 종속 단계의 순차적 처리 (워크 플로 기반 배치에 대한 확장 포함)
  • 부분 처리 : 레코드 건너 뛰기 (예 : 롤백시)
  • 배치 크기가 작거나 기존 저장 프로 시저 / 스크립트가있는 경우 전체 배치 트랜잭션

Spring Batch의 기술 목표

  • 배치 개발자는 Spring 프로그래밍 모델을 사용합니다. 비즈니스 로직에 집중하여 프레임워크로 인프라를 관리합니다.
  • 인프라스트럭처, 배치 실행 환경 및 배치 애플리케이션 간 우려사항의 명확한 분리.
  • 모든 프로젝트를 구현할 수 있는 인터페이스로서 공통의 핵심 실행 서비스를 제공합니다.
  • 핵심 실행 인터페이스의 심플하고 디폴트 실장을 제공하며, "개봉 후"에 사용할 수 있습니다.
  • 모든 레이어에서 스프링 프레임워크를 이용함으로써 서비스 설정, 커스터마이즈 및 확장이 용이합니다.
  • 기존의 모든 핵심 서비스는 인프라스트럭처 층에 영향을 주지 않고 쉽게 교체하거나 확장할 수 있어야 합니다.
  • Maven을 사용하여 구축된 아키텍처 JAR을 애플리케이션에서 완전히 분리한 심플한 배치 모델을 제공합니다.

본 글은 스프링 배치의 도큐먼트와 이동욱님의 블로그를 보고 재편성 하였습니다.
이동욱님 스프링배치
Spring Batch Document

제 글로 이해가 안가시는 분들은 꼭 방문하여 한번 읽어 보시는것이 이해에 더 많은 도움을... 😱

다음엔 Spring Batch의 매커니즘 그리고 기본 용어들에 대해서 알아보겠습니다.

잘못된 정보나 문제가 될 부분들은 꼭!! 피드백 부탁드립니다 😳😳