Spring Batch 알아보기
다양한 도메인 내의 많은 애플리케이션은 보통 비즈니스 운영을 수행하기 위해 대량의 데이터 처리가 필요합니다.
그래서 가볍고 포괄적이며 Spring Framework의 특성(생산성, POJO 기반 개발 방식, 일반적인 사용 편의성)을 기반한 Spring Batch를 사용해서 데이터를 일괄적으로 처리하곤 합니다.
Spring Batch는 스케줄링 프레임 워크인가?
결론적으로 Spring Batch는 스케줄링 프레임워크가 아닙니다.
Batch -> 논리적 또는 물리적으로 관련된 일련의 데이터를 그룹화하여 일괄 처리하는 방법을 의미합니다.
Scheduler -> 주어진 작업을 미리 정의된 시간에 실행할 수 있게 해주는 도구나 소프트웨어를 의미합니다.
주의할점
1. 대량의 데이터를 일괄적으로 처리할 뿐, 특정 주기마다 자동으로 돌아가는 스케줄링과는 관련이 없습니다.
2. Spring Batch는 Scheduler와 함께 사용할 수 있도록 설계되어 있을 뿐, Scheduler 자체를 대체하는 것은 아닙니다.
3. 작업 스케줄링 라이브러리인 Quartz, Tivoli, Control-M 등과 비교하는 것은 적절하지 못합니다.
Batch 처리란?
실시간으로 요청에 의해서 처리되는 방식이 아닌 일괄적으로 한꺼번에 대량의 프로세스를 처리하는 방식입니다.
Spring Batch 정의
1. 로깅/추적, 트랜잭션 관리, 작업 처리 통계, 작업 재시작, 건너뛰기 및 리소스 관리 등 대량의 레코드를 처리하는 데 필수적인 재사용 가능한 기능을 제공합니다.
2. 최적화 및 파티셔닝 기법을 통해 고용량 및 고성능 배치 작업을 가능하게 하는 고급 기술 서비스 및 기능을 제공합니다.
3. 단순한 배치 작업뿐만 아니라 복잡하고, 대용량의 배치 작업도 프레임워크를 활용하여 확장 가능한 방식으로 처리할 수 있어 대량의 정보를 효율적으로 처리할 수 있습니다.
Spring Batch 레이어드 아키텍처
Spring Batch 레이어드 아키텍처는 3가지의 주요 레이어로 구성되어 있습니다.
Application
애플리케이션 레이어는 가장 상위 레이어로, 개발자가 배치 작업을 정의하는 곳입니다.
여기서 배치 작업이란 대용량의 데이터를 일괄 처리하는 작업을 의미합니다.
개발자는 Job, Step, ItemReader, ItemWriter 등의 컴포넌트를 이용해 배치 프로세스를 설계하고,
Spring Batch에서는 이 애플리케이션 레이어를 통해 각각의 배치 Job이 어떻게 실행되고 데이터를 어떻게 처리할지 정의할 수 있습니다.
ex)
- Job : 하나의 배치 작업 전체를 의미하며, 여러 단계(Step)로 구성될 수 있습니다.
- Step : Job 안에서 실행되는 작은 단위입니다. 데이터 읽기, 처리, 쓰기를 주로 담당합니다.
Batch Core
코어 레이어는 스프링 배치의 핵심적인 기능을 담당하는 레이어로, 애플리케이션에서 정의한 배치 작업이 실제로 실행되고 제어되는 부분입니다. 이 레이어는 애플리케이션이 정의한 작업을 어떻게 실행할지 관리합니다.
주요 컴포넌트
- JobLauncher: 배치 Job을 실행하는 데 사용됩니다. 개발자는 JobLauncher를 호출해 배치 Job을 시작합니다.
- Job: 배치 작업의 추상적인 정의입니다. Step으로 이루어져 있으며, 코어 레이어가 이 Job을 관리하고 실행합니다.
- Step: 데이터의 읽기, 처리, 쓰기 등 실제 작업을 수행하는 단위입니다. 코어 레이어는 이 Step을 통해 각각의 단계를 제어하고 실행합니다.
Batch Infrastructure
인프라스트럭처 레이어는 배치 작업의 읽기, 쓰기, 재시도 등과 관련된 공통 서비스를 제공합니다. 이 레이어는 개발자가 배치 작업에서 사용할 수 있는 ItemReader(데이터 읽기), ItemWriter(데이터 쓰기)와 같은 구성 요소를 제공하며, 코어 레이어에서도 재시도 로직을 구현할 때 사용하는 RetryTemplate 같은 서비스도 포함됩니다.
주요 컴포넌트
- ItemReader: 데이터 소스에서 데이터를 읽는 역할을 합니다. 가령, 파일이나 데이터베이스에서 데이터를 읽어옵니다.
- ItemWriter: 데이터를 외부 시스템에 기록합니다. 가령, 파일이나 데이터베이스에 저장하는걸 말합니다.
- RetryTemplate: 오류가 발생했을 때 재시도를 관리하는 템플릿입니다. 배치 작업 중에 네트워크나 다른 이유로 작업이 실패할 경우, 재시도할 수 있는 기능을 제공합니다.
결론적으로 각 레이어는 독립적이면서도 상호 의존적인 구조를 가지고 있습니다.
References
https://docs.spring.io/spring-batch/reference/spring-batch-intro.html
https://docs.spring.io/spring-batch/reference/spring-batch-architecture.html
'Spring' 카테고리의 다른 글
Spring Batch (0) | 2024.09.22 |
---|---|
Spring Batch - Scheduler (1) | 2024.09.16 |
Spring Boot 회원가입 - 이메일(SMTP) 인증 구현하기 (0) | 2024.07.28 |
Spring Boot Profile 설정 (0) | 2024.07.22 |
Spring 카카오 로그인 구현하기(Spring Security + OAuth2 + JWT) (0) | 2024.07.08 |