Spring/Spring Batch

[Spring Batch] 1장 : 소개(Introduction)

공대키메라 2023. 11. 12. 18:53

 
귀중한 시간을 할애해서(Time is gold~) 스프링 배치에 대해 공부하려고 한다.
 
그동안 스프링 배치(Spring Batch)에 대해 관심이 많았고 심지어 inflearn에서 15만원에 육박하는 정수원 선생님의 강의도 사서 들었는데 (정확히는 듣다가 좀 남기고 말았다) 아쉬운 점이 좀 있었다.
 
Spring Security 와 마찬가지로 정리를 잘 해주는것은 좋은데 
Spring Batch의 경우 양이 너무 방대하고, 이렇게까지 모든 내용을 강의로 만들어서 해야 하는 의문감도 있었다.
 
꽤 오랜 기간 글을 정리하지 않았는데,
그 이유는 차라리 책을 사서 공부하는것이 도움이 되는 경우에 많이 생겼기 때문이다.
가령, SQL 성능 및 튜닝 관련해서 책을 읽는다던가, 아니면 간단하게 강의를 듣는게 효율이 더 나아졋다는 말이다.
일을 하면서 문제점이 생긴 부분들을 매꾸다보니 시간은 속절없이 가버렸다. (변명아닌 변명)
 
학습이란 자고로 스스로 생각할 때 기억에 남고 학습이 된다고 한다.
스스로 복기하고 이것이 왜 이런지 스스로 설명할 수 있어야만 진정한 학습이라고 한다. 
 
고로, 시간이 날 때 전에 Spring Security와 마찬가지로 Reference Docs를 읽고 번역하면서 정리하려고 한다.
 


 

1. 스프링 배치 소개(Spring Batch Introduction)

엔터프라이즈 도메인에 많은 어플리케이션들이 임무 수행에 필수적인 환경에서 비즈니스 작업을 행하기 위한 대용량 처리를 필요로 한다.  이러한 비즈니스 작업들은 다음을 포함한다.
 
1. 사용자 상호작용없이 가장 효율적으로 처리된 대용량 정보의 자동화 및 복잡한 처리.
이러한 작업들은 전형적으로 시간 기반 이벤트들을 포함한다. (달의 마지막 날에 계산, 공지, 서신 등)
 
2. 대용량 데이터 세트들간에 반복적으로 처리된 복잡한 비즈니스 규칙의 주기적인 애플리케이션(보험 이익 확인 또는 비율 조정 등)
 
3. 전형적으로 포매팅, 확인(validation) 그리고 시스템 record에서 트랜잭션 상태에서의 처리를 필요로 하는 내외 시스템으로 받은 정보의 통합. 배치 처리는 기업에게 매일 10억건의 트랜잭션을 처리하는데 사용된다.
 
 스프링 배치는 매일의 엔터프라이즈 시스템 작업에 필수정인 튼튼한 배치 어플리케이션 개발을 가능하게 하는 가벼우면서 종합적인 배치 프레임워크다.
 
스프링 배치는 다들 기대하듯이 스프링 프레임워크(Spring Framework)의 특징위에서 생겨났는데 
(생산성, POJO 기반 개발 접근, 사용의 편리함) 
이는 개발자가 필요하면 더 진보한 엔터프라이즈 서비스를  사용하고 접근하는걸 쉽게 만들게 한다.
 
스프링 배치는 스케쥴링 (Scheduliing framework)가 아니다. 상업적이고 오픈소스 공간에서 사용할 수 있는 기업용 스케줄러(enterprise scheduler)들이 많다. 스프링 배치는 스케줄러를 대체하기보다는 스케줄러와 결합해서 작용하도록 의도되었다.
 
스프링 배치는 큰 부피의 레코드를 처리하는데 필수적인 재사용 가능한 기능들을 제공한다. 
추적(tracing), 트랜잭션 관리(transaction management), 잡 프로세싱 통계(job processing statistics), 잡 리스타트(job restart), 스킵(skip) 그리고 자원 관리(resource manegement) 등이 포함되어 있다.
 
또 더 진보된 기술 서비스와 최적화(optimization)와 파티셔닝 기술(partitioning techniques)을 통해 극도로 짱크고 고성능의 배치 잡을 제공한다.
 
간단하고 복합한 다량의 use case에 스프링 배치를 사용할 수 있다.(다량의 데이터를 데이터베이스간에 옮기거나 변환하는 등의 작업) 
다량의 배치 잡은 매우 scalable 상태에서 중요한 정보를 처리하기 위해 프레임워크를 사용할 수 있다.
 

요약하자면 복잡한 상황이든, 간단한 상황이든 다량의 데이터를 처리하는데 매우 요긴하게 Spring Batch를 사용할 수 있다는 말로 정리할 수 있겠다.

사실 모든 기술이 서로 다 좋다고 난리다 ㅋㅋ ...

 
 

2.배경 (Background)

읽어보면 기존의 java 기반 환경에서 배치 처리가 없었는데 그걸 여러 기업들이 합작해서 스프링 기반의 배치를 만들었다는 내용이다. 
 
궁금하면 읽어보길 추천한다. (필자는 대~충 다 안읽음ㅎ...)
 

3. 사용 시나리오 (Usage Scenario)

전형적인 배치 프로그램인 일반적으로 다음을 한다.
 
1. 데이터베이스, 파일 또는 큐(queue)로 부터 많은 수의 레코드를 읽는다.
 
* 레코드(record)? : 배치에서 보통 개별적인 데이터 항목이나 데이터 세트의 행을 가리킨다.
 
2. 어떤 식으로는 데이터를 처리한다.
 
3. 수정된 형식으로 백 데이터를 적는다.
 
스프링 배치는 이 기본적인 배치 반복을 자동화한다.
또 사용자 상호작용 없이 오프라인 환경에서 트랜잭션 처리를 할 수 있는 능력을 제공한다.
배치 잡은 대부분의 IT 프로젝트의 부분이고 스프링 배치는 튼튼한 기업 규모 솔류션을 제공하는 유일한 오픈 소스 프레임워크다.
 

4. 비즈니스 시나리오(Business Scenario)

스프링 배치는 다음 비즈니스 시나리오를 지원한다.
 
1. 주기적으로 배치 처리를 커밋한다(commit)
 
2. 동시에 발생하는 배치 처리 : 잡의 병렬 처리
 
3. 단계적으로 생기는 기업용 메시지 기반 처리
 
4. 대규모 병렬 배치 처리
 
5. 실패 후 매뉴얼 또는 스케줄대로 재실행
 
6. 의존적인 스텝의 연속적인 처리
 
7. 부분적인 처리 : 스킵 레코드 (skip records)
 
8. 전체 배치 트랜잭션
 

5. 기술적 목표 (Technical Objectives)

스프링 배치는 다음의 기술적 목표를 가지고 있다.
 
1. 개발자가 Spring 프로그래밍 모델을 사용하도록 한다. : 비즈니스 로직에 집중하고 인프라는 프레임워크가 관리하게 한다. 
 
2. 인프라와 배치 실행 환경 그리고 배치 어플리케이션간 깔끔한 관심의 분리를 제공한다.
 
3. 모든 프로젝트를 수행할 수 있는 인터페이스로서 공통적이고 핵심적인 실행 서비스를 제공한다.
 
4. 특별하게 사용될 수 있는 핵심  인터페이스의 구현체를 제공한다. 
 
5. 스프링 프레임워크의 모든 계층(layser)에서 설정하고 커스터마이징하고 서비스를 확장시키는것을 쉽게 해준다.  
 
6. 모든 존재하는 코어 사비스들은 인프라 계층에 영향없이 쉽게 대체되고 확장할 수 있어야 한다. 
 
7. 간단한 deployement 모델을 제공한다.
 


 
뭐... 도입은 뭐든지 다 좋고 뭐 목표가 뭐니 하는 내용이 많아서 
 
그냥 가볍게 읽었다.
 
다음 글에서는 Spring Batch Arcitecture에 대해 공부할 것이다.
 
출처
https://docs.spring.io/spring-batch/docs/current/reference/html/spring-batch-intro.html#spring-batch-intro