본문 바로가기
Spring|Spring-boot/Spring Batch

Batch란

by oncerun 2023. 5. 14.
반응형

 

Batch와 관련된 개발을 한 번도 한 적이 없습니다. 그래서 이를 공부해 보고 실무에서 언제 사용하면 좋을지 판단할 수 있도록 공부를 해보려고 합니다. 

 

이 글의 카테고리는 Spring Batch인데, 이는 스프링 프레임워크에서 배치를 지원하기 위한 API들이 존재하고, 현재까지 실무에서 사용된 프로젝트들이 스프링 부트 애플리케이션으로 배포가 되어있어 Spring Batch 기술에 대해 알아보고 구현해보려고 합니다.

 

물론 배치는 다양한 기술로 구현할 수 있다는 것을 알고 있어야 합니다. 

 

우선 배치라는 것은 일련의 작업을 한 번에 처리하는 방식을 말합니다.

 

즉 컴퓨터 자원을 최대한 사용하여 무거운 작업을 일괄로 처리하게 됩니다.  일반적으로 여러 작업을 하나의 그룹으로 묶고, 이 그룹을 한 번에 실행하여 작업을 효율적으로 처리하는 것을 의미합니다. 

 

보통 배치 작업은 대량의 데이터나 작업을 처리하는 데 특히 유용합니다. 여러 작업을 한 번에 실행하므로 개별 작업을 순차적으로 수행하는 것보다 더 효율적이죠. 그리고 실시간성이 아닙니다.  배치는 상당히 무거운 작업이기 때문에 비 실시간성 처리에 사용됩니다. 

 

예를 들어 대용량의 계산이 필요하거나, 정산을 위해 모든 지점의 데이터를 모아 취합하고 가공하는 작업, 통계를 내는 작업, 특정 포맷으로 변환을 위해 사용합니다. 

 

자동화라는 장점도 있습니다. 예를 들어 파일을 변환한다거나, 데이터베이스 간 업데이트 혹은 동기화 작업, 배치 인쇄 등과 같은 작업은 사용자가 필요 없이 일괄적으로 처리가 가능합니다. 

 

그리고 배치 작업은 대부분 예약 실행을 기반으로 개발됩니다. crontab이나 jenkins와 같이 특정 시간에 예약해서 실행할 수 있습니다. 이를 통해 작업을 스케쥴링하고, 자동으로 실행하고 모니터링까지 가능합니다.

 

또한 배치 작업은 오류 처리와 재시도에 유리합니다. 그 이유는 보통 배치작업은  여러 개의 작업을 하나의 그룹으로 묶어 실행하도록 구성하는데, 이러한 특징이 하나의 작업단위로 처리되어 오류가 발생되어 작업이 실패해도 오류를 고치고 하나의 작업 단위로 여러 개의 작업을 손쉽게 재시도할 수 있기 때문입니다. 

 

배치 작업은 정말 다양하게 구현될 수 있습니다.  스크립트 파일이나 배치 코드르 작성할 수도 있고, 외부 배치 소프트웨어를 사용하여 구현할 수도 있습니다. 

 

 

그러면 배치 프로그램의 구현이 되는 과정은 무엇일까요? 

 

배치가 필요하는 시점은 여러 개의 작업을 비실시간 성으로 자원이 남는 시간에 모든 자원을 사용하면서 처리하기 위함입니다. 

 

우선적으로 작업을 정의해야합니다. 

 

각 도메인 마다 혹은 비즈니스 요구사항에 따라 수행할 작업이 다를 것입니다. 이 작업들이 배치로 처리되어야 하는지 일차적으로 고민을 하고 그렇다면 여러 개의 작업이 무엇을 해야 하는지 정리해야 할 것입니다.

 

이 작업에 따라 배치를 구현하는 방식이 달라질 것이라고 생각됩니다.

 

이때 적절한 플랫폼과 언어, 도구를 결정하게 됩니다. 예를 들어 손쉽고 많은 라이브러리가 있는 파이썬을 통해 구현할 수 있을 것입니다. 파이썬도 제가 알기로는 다양한 플랫폼에서 실행될 수 있는 인터프리터 언어로 알고 있습니다.

혹은 자바나 C# 등을 이용할 수도 있을 것입니다.

 

구현할 때 그룹을 생각해보아야 합니다. 여러 작업을 어떻게 손쉽게 그룹으로 묶고 빼고 재시도하고 오류발생 시 어떻게 대처할 것인지 등등 배치란 여러 개의 작업을 하나의 그룹으로 실행하기 위함이라는 것이기 때문입니다.

 

트랜잭션도 빠질 수없을 것 같습니다. 트랜잭션이 필요한 작업이라면 이를 반드시 지원해야 할 것입니다.

 

다음에는 스케쥴링을 고려해야 합니다. 자동화라는 키워드가 있는 만큼 배치는 사람의 상호작용이 있으면 안됩니다. 

원하는 시간에 자동으로 실행할 수 있게, 프로그램을 crontab, window 작업 스케줄링, 젠킨스의 스케쥴링 기능을 이용할 수 도 있을 것입니다.

 

이제는 로깅을 해야합니다. 비실시간성과 자동화라는 특징을 가지고 있기에 정상적으로 처리되었는지, 어떻게 처리가 되었는데 오류가 발생하지 않았는지 이러한 별도의 기록이 필요하기 때문입니다.

 

추가적으로는 배치 실행 전 실행되어야 하는 전처리나 후처리 기능이 필요할 수도 있을 것 같습니다.

 

배치가 끝나면 이 결과물을 어디에 전송하라든지, 배치작업 내부에서 변환하면 매우 큰 비용이 들어서 배치 실행 전 특정 포맷으로 변경한다거나 등등 이와 같은 작업까지만 해도 제가 필요한 배치 프로그램을 만드는 데 있어서 큰 부족함이 없을 것으로 생각됩니다.

 

 

이 주제는 Spring Batch에 존재합니다. 이 말은 스프링에서 제공해 주는 Batch기능을 살펴보고 한계와 기능. 어떤 편리함을 주는 API가 있는지 확인해 보는 것입니다. 

 

https://docs.spring.io/spring-batch/docs/current/reference/html/index.html

 

Spring Batch - Reference Documentation

The reference documentation is divided into several sections: Spring Batch Introduction Background, usage scenarios, and general guidelines. Spring Batch Architecture Spring Batch architecture, general batch principles, batch processing strategies. What’

docs.spring.io

 

공식문서에서 소개와 아키텍처, 과거에 사용한 적은 없지만 5.0 버전에서 나온 새로운 특징을 읽어보고 이를 보충할 강의를 통해 여러 예제 프로그램을 만들어보고 이를 현재 제 실무에 필요한 부분은 없는지 생각해 보고 없다면 아쉽고 있으면 개발하여 자동화를 겪어볼 생각입니다.

 

 

스프링 배치의 소개

 

엔터프라이즈 시스템에서 사용할 수 있는 배치 애플리케이션을 개발할 수 있도록 설계된 배치 프레임워크라고 합니다. 

스프링 프레임워크의 특성을 기반으로 한다고 합니다. 

 

생각보다 스케줄링 프레임워크랑 혼동하는 사람이 많아서 그런지 스프링 배치 소개 페이지에 스케줄링 프레임워크가 아니라고 적혀있는 것도 재밌는 부분이다.

 

스케줄러는 사용하려면 Quartz, Tivoli, Control-M과 같은 스케줄러는 추천하고 있네요.  이는 배치에는 스케줄러라는 특징이 있다는 것을 다시 한번 상기시켜 주는 것 같습니다.

 

Spring Batch provides reusable functions that are essential in processing large volumes of records, including logging and tracing, transaction management, job processing statistics, job restart, skip, and resource management

 

 

스프링 배치는 로깅, tracing, 트랜잭션, 작업처리에 대한 통계, 작업 재시도와 skip, 리소스 관리와 대량의 레코드를 처리하는데 재사용 가능한 기능을 제공한다고 합니다.

 

위에서 알아본 배치 프로그램의 모든 특성을 대부분 구현해서 제공해 주는 것 같습니다.

 

흥미로운 건 이 프로그램을 통해 데이터베이스 간의 데이터 마이그레이션을 사용하면 어떻게 되는지 조금 궁금해져서 빠르게 공부하고 데이터베이스의 데이터 마이그레이션의 프로그램도 만들어보고 싶네요. 

 

이는 현 VMware인 SpringSource와 Accenture(컨설팅회사?)의 파트너십을 통해 만들어졌다고 합니다.

 

Spring Batch가 지원하는 시나리오입니다.

  • Commit batch process periodically.
  • Concurrent batch processing: parallel processing of a job.
  • Staged, enterprise message-driven processing.
  • Massively parallel batch processing.
  • Manual or scheduled restart after failure.
  • Sequential processing of dependent steps (with extensions to workflow-driven batches).
  • Partial processing: skip records (for example, on rollback).
  • Whole-batch transaction, for cases with a small batch size or existing stored procedures or scripts.

 

 

여기까지 배치에 대한 개념, 스프링 배치 프로젝트에 대한 소개와 지원 기능까지 알아보았습니다. 

 

사실 이전에 스프링 배치에 대해 공부한 적이 있는데 까먹어서 다시 공부합니다. 

 

다음에는 아키텍처인데, 너무 깊이 들어가면 시간이 아깝다고 생각합니다. 이를 매우 복잡한 배치 프로그램을 만들 것이 아니기 때문인데, 배치에 사용되는 프로그래밍 구현 개념정도와 스프링 배치의 흐름, 용어 정도 정리하면서 개발을 하도록 하겠습니다.

 

반응형

'Spring|Spring-boot > Spring Batch' 카테고리의 다른 글

Spring Batch 아키텍처  (0) 2023.05.21
Spring Batch about 15 minutes  (0) 2023.05.14
Spring Batch JpaItemWriter  (0) 2021.03.06
Spring Batch JdbcBatchItemWriter  (0) 2021.03.06
Spring Batch ItemWriter  (0) 2021.03.06

댓글