[Spring] Spring Batch란?

조시현·2024년 6월 29일
0

SpringBatch(Scheduler)

목록 보기
2/4
post-thumbnail

개요

이전 블로그에서 Spring Scheduler를 사용하며 간단하게 스케줄링 작업을 하고 스케줄링 작업에 대해서 간단하게 로직을 컨트롤 할 수 있음을 배웠다.

해당 블로그 -> Spring Scheduler

스케줄링 작업하는데 작업이 100만개 이상의 예약 작업이 있다고 생각해보자.
예를 들어서 은행의 이자 시스템같은 경우 수 많은 계좌에 특정 시간에 이자를 넣어줘야하는데 이럴 경우 대규모 트랜잭션이 발생하는데 이러한 경우 Spring Scheduler만으로는 복잡한 트랜잭션 로직을 처리하기 까다로워보였고 기능이 부족해보였다.

이러한 부족함을 개선하기 위해 Spring Batch와 분산 작업 스케줄링 시스템의 조합 사용을 고려해야 하는게 좋아보였습니다.

Spring Scheduler부터 시작하여서 Spring Batch, Kafka를 알아보고 심화로 Quartz Scheduler와 Apache Spark까지 알아보겠습니다.


🍄 Spring Batch

🥝 Spring Batch는 Java로 대규모 배치 처리 애플리케이션을 개발하기 위한 프레임워크입니다.
복잡한 로깅/추적, 트랜잭션 관리, 작업 처리 통계, 작업 재시작, 건너뛰기/재시도 로직 등 대량의 레코드를 처리하는 데 필수적인 재사용 가능한 기능을 효율적으로 처리할 수 있도록 제공합니다.

  1. 은행: 이자 지급 및 자동이체 과정
  2. 전자상거래 플랫폼: 하루에 쌓인 주문 확인, 재고 업데이트, 송장 생성, 확인 이메일 전송 등의 작업을 하는 과정
  3. 의료 서비스: 전자 건강 기록(EHR), 실험실 결과, 보험 청구 등 다양한 소스의 환자 데이터를 통합해야 합니다. 분석 및 보고를 위해 데이터를 정리하고 변환한 후 중앙 데이터베이스에 저장하는 과정

등 다양한 상황에서 사용 할 수 있다.


이제 Spring Batch에서 사용되는 개념에 대해서 알아보도록 하자!

🍄 개념

Job

Spring Batch의 작업은 일괄 처리 작업을 관리하고 조정하는 기본 컨테이너입니다.

  • 하나 이상의 Step 개체로 구성됩니다.

Step

단계는 일괄 작업의 단일 단계를 나타냅니다. 여기에는 데이터 읽기, 처리 및 쓰기가 포함될 수 있습니다.

  • 단계는 순차적이거나 병렬적일 수 있습니다.

JobRepository

JobRepository는 Job 상태, Step 실행 상태 및 기타 관련 정보를 포함하여 배치 작업과 관련된 메타데이터를 저장하는 데 사용되는 데이터베이스(일반적으로 관계형)입니다.

JobLauncher

JobLauncher는 Job 실행을 담당합니다.

  • JobRepository와 상호 작용하여 메타데이터를 저장하고 작업 인스턴스 실행을 관리합니다.

chunk

일괄 작업에서 함께 처리되는 데이터 처리 단위

  • chunk 지향 처리는 데이터를 한 번에 하나의 항목이 아닌 청크로 처리하는 일괄 처리 스타일입니다.
  • 이 접근 방식은 리소스 사용량과 성능을 최적화하므로 대용량 데이터를 처리할 때 특히 유용합니다.

아래 부터는 Spring Batch의 트랜잭션 작업에 사용 되는 클래스나 인터페이스들에 대해서 알아 볼 것이다.

ItemReader

ItemReader는 데이터베이스, 파일 또는 기타 데이터 저장소와 같은 지정된 소스에서 데이터를 읽는 역할을 합니다.

  • Spring Batch는 ItemReader의 다양한 구현을 제공합니다.

ItemProcessor

ItemProcessor는 ItemWriter가 쓰기 전에 ItemReader가 읽은 데이터 항목을 처리합니다.

  • 선택 사항이며 데이터 변환 또는 유효성 검사를 작업을 진행합니다.

ItemWriter

ItemWriter는 ItemProcessor에 의해 처리된 데이터 항목을 데이터베이스, 파일 또는 기타 데이터 저장소와 같은 지정된 대상에 씁니다.

  • Spring Batch는 ItemWriter의 다양한 구현을 제공합니다.

Listeners

Spring Batch는 Job 또는 Step 실행의 라이프사이클을 가로채는 리스너를 제공합니다.

  • 리스너를 사용하면 작업이나 단계가 시작, 완료 또는 실패하기 전이나 후에 사용자 정의 코드를 실행할 수 있습니다.

🍄 아키텍처

아래에서는 위에서 배운 개념들을 어떻게 구성하고 사용되는지 대략적으로 알아 볼 것이다. 🧐

구성 방식

  1. Job 구성, Job 정의 및 비즈니스 로직을 포함합니다. 여기에서 Step의 순서와 Step 사이의 조건부 흐름을 정의합니다.
  2. Job 시작, Step 실행, Chunk 처리 등 핵심 일괄 처리 기능을 제공합니다. Job과 Step이 구성된 대로 실행되도록 보장합니다.
  3. reader, writer, processor, listenr과 같은 구성 요소를 구성합니다. 이러한 요소는 간단하게 특정 일괄 처리 요구 사항에 따라 사용자 정의할 수 있습니다.

이 정도 이론적인 내용을 보았다면 충분하다! 이제 Spring batch의 세계로 들어가도 될 충분한 이론을 갖추었습니다.

만약 내용이 머리에 잘 와 닿지 않다면 Spring Batch를 사용한 코드를 보고 다시와도 늦지 않습니다!! 😊

profile
소프트웨어 관련 고민을 좋아하고 상황에 맞는 답을 함께 찾아가는 과정을 좋아합니다. 😀

0개의 댓글