'스프링 배치 완벽 가이드'의 내용을 바탕으로 작성된 개인 공부를 위한 기록용 포스트입니다.
배치 처리를 이용하면 좋은 몇 가지 이유
- 배치 처리를 이용하면 실제 처리가 시작되기 전에 필요한 정보를 미리 수집할 수 있다.
- 월별 은행 거래명세서를 예로 들어보자. 거래가 이뤄질 때마다 바로 월별 거래명세서를 인쇄해내는 것이 합리적일까? 월말까지 기다려서 한 번에 거래 내역을 조사하는 것이 더 합리적이다.
- 고객이 마음을 바꿔 주문을 취소할 때, 아직 배송되기 전이라면 훨씬 더 저렴한 비용으로 취소할 수 있다. 고객에게 몇 시간을 더 주면서 배치로 배송을 처리하면 소매업자는 많은 돈을 절약할 수 있다.
- 자원을 더 효율적으로 활용할 수 있다.
배치 처리란?
- 상호작용이나 중단 없이 유한한 양의 데이터를 처리
- 일단 시작되면 아무런 개입 없이 어떤 형태로든 완료
배치가 직면한 문제
배치 처리와 관련된 문제에는 일반적인 소프트웨어 개발에 고려해야 하는 문제에 배치 특유의 특성이 섞여 있다. 소프트웨어 아키텍처는 공통적으로 사용성(Usablity), 유지 보수성(maintainability), 확장성(scalability) 등 여러 속성을 가지고 있다. 배치 처리에서는 이러한 속성들이 기존과는 다른 측면으로 관련돼 있다.
- 사용성 - 코드에 관한 것, 즉, 오류 처리 및 유지 보수성과 관련 있다.
- 공통 컴포넌트를 쉽게 확장해 새로운 기능을 추가할 수 있는가?
- 기존 컴포넌트를 변경할 때 시스템 전체에 미치는 영향을 알 수 있도록 단위 테스트가 잘 마련돼 있는가?
- 기존 컴포넌트를 변경할 때 시스템 전체에 미치는 영향을 알 수 있도록 단위 테스트가 잘 마련돼 있는가?
- 잡이 실패할 때 디버깅에 오랜 시간을 소비하지 않고 언제, 어디서, 왜 실패했는지 알 수 있는가?
- 확장성(scalability)
- 배치가 처리할 수 있어야 하는 규모는 과거에 개발했던 웹 애플리케이션보다 몇 자리 수 이상 큰 경우가 많다.
- 가용성(availiability)
- 대부분의 기업은 필요한 리소스(하드웨어, 데이터 등)를 언제 사용할 수 있는지 알고 있는 상태에서 주어진 시간에 잡이 실행되도록 예약한다.
- 필요할 때 바로 배치 처리를 수행할 수 있는가?
- 허용된 시간 내에 잡을 수행함으로써 다른 시스템에 영향을 미치지 않게 할 수 있는가?
- 보안 - 데이터를 안전하게 저장하는 것
- 민감한 데이터베이스 필드는 암호화돼 있는가?
- 실수로 개인 정보를 로그로 남기지는 않는가?
- 외부 시스템으로의 접근
- 데이터 유효성 접근
자바로 배치를 처리하는 이유
- 유지 보수성
- 배치 처리는 유지 보수를 고려해야 한다. 배치 처리 코드는 일반적으로 다른 애플리케이션 코드보다 수명이 훨씬 길다.
- 자바는 JDBC 코드를 직접 작성하거나 자바의 파일 I/O API를 직접 다룰 필요가 없고 스프링 배치는 트랜잭션 및 커밋 횟수와 같은 것들을 애플리케이션에 제공하므로, 처리가 어디까지 진행됐는가라든가 실패 시 무슨 일을 해야 하는지 관리할 필요가 없다.
- 유연성
- 플랫폼에 제한이 없다.
- 확장성
- 개발 리소스
- 지원
- 커뮤니티 지원
- 비용
스프링 배치의 기타 사용 사례
- ETL(Extract, Transform, Load)
- 데이터 마이그레이션
- 병렬 처리가 필요할 때
- 개발자가 앱 성능을 지속적으로 향상시키는 유일한 방법은 단일 작업을 더 빨리 처리하는 것이 아니라 더 많은 작업을 병렬로 처리하는 것이기 때문에 최근 병렬 처리를 지원하는 많은 프레임워크(아파치 스파크, 얀, 그리드게인, 해즐캐스트 등)가 많이 출시됐다.
- 대부분의 빅데이터 플랫폼은 알고리즘 또는 데이터 구조에 맞게 코드와 데이터를 변경해야 한다.
- 스프링 배치는 멀티 코어 또는 멀티 서버에 처리를 분산하는 기능을 제공하며, 웹 애플리케이션에서 사용하는 것과 동일한 객체 및 데이터 소스에 접근하는 기능도 제공한다.
스프링 배치 프레임워크
일반적인 배치 패턴 및 패러다임을 구현하는 표준 기반 방법으로, 엑센츄어사와 스프링소스사 간의 협업으로 개발됐다. 스프링 배치에는 데이터 유효성 검증, 출력 포매팅, 복잡한 비즈니스 규칙을 재사용 가능한 방식으로 구현하는 기능, 대규모 데이터셋 처리 기능이 구현돼 있다.
- Application
- 다음 레이어인 코어 레이어와 상호작용하는 데 대부분의 시간을 소비한다.
- Batch Core
- 배치 도메인을 정의하는 모든 부분이 포함
- Job 및 Step 인터페이스와 잡 실행에 사용되는 인터페이스 즉, JobLauncher 및 JobParameters 등이 있다.
- Batch Infrastructure
- 파일, 데이터 베이스 등으로부터 읽고 쓰기
- 잡 수행에 실패한 이후 재시도될 때 어떤 일을 수행할지 다루기
스프링으로 잡 정의하기
잡
- 중단이나 상호작용 없이 처음부터 끝까지 실행되는 처리
- 여러 개의 스텝이 모여 이뤄짐
스텝
- 각 스텝에는 관련된 입력과 출력이 있을 수 있음
- 스텝이 실패했을 때 반복 실행할 수도 있고 못할 수도 있음
- 잡의 플로우(flow)는 조건부일 수 있음(예를 들어 수익을 계산하는 스텝이 $1,000,000 이상의 수익을 반환할 때만 보너스 계산 스텝을 실행하는 경우)
'Spring' 카테고리의 다른 글
[Spring] 제어의 역전(IoC)과 의존관계 주입(DI) (0) | 2022.09.14 |
---|---|
[Spring] 객체지향의 5가지 원칙(SOLID), 관심사의 분리 (0) | 2022.09.14 |
[Spring] 스프링이란 (0) | 2022.09.14 |
[Spring] Spring Batch - 잡과 스텝 이해하기 (0) | 2021.11.10 |
[Spring] Spring Batch - 스프링 배치 (0) | 2021.11.02 |