[Spring] Spring Batch - Batch와 Job, Step

2024. 10. 16. 23:14·🌱 Spring/Spring Boot

Spring Batch란? 🤔

Spring Batch는 대량의 데이터를 효율적으로 처리하기 위해 필요한 재사용 가능한 기능을 제공하는 프레임워크입니다. 로깅/추적, 트랜잭션 관리, 작업 처리 통계, 작업 재시작, 오류 건너뛰기, 리소스 관리 등 대량의 레코드를 처리하는 데 필수적인 기능을 지원합니다.

배치 프로그램(Batch Program)

배치 프로그램은 대량의 데이터를 처리하는 작업을 자동화하는 프로그램을 의미합니다. 주로 스케줄러(Scheduler)를 이용하여 특정 시간에 수행하도록 구성되며, 예를 들어 매일 새벽 3시에 데이터를 업데이트하는 작업이 대표적인 배치 프로그램의 예입니다.

스케줄러(Scheduler)

스케줄러는 특정 시간에 실행되거나 일정한 간격으로 반복적으로 실행되도록 예약된 작업을 자동으로 수행하는 시스템을 의미합니다.

배치 프로그램과 스케줄러의 차이점 🧐

  • 배치 프로그램: 일괄 처리를 위한 프로그램으로, 사용자 명령에 따라 실행됩니다.
  • 스케줄러: 주기적으로 실행되도록 예약된 작업을 실행하는 시스템입니다.

배치 사용 목적

목적 설명
대량의 데이터 처리 대규모 데이터베이스, 로그 파일, CSV 파일 등에서 데이터를 추출하고 처리합니다.
자동화된 작업 처리 스케줄러를 통해 주기적으로 반복되는 작업을 자동으로 처리합니다.
분산 처리 여러 서버에서 대량의 데이터를 처리합니다.
재시도 및 로깅 데이터 처리 중 오류 발생 시 자동 재시도 및 로깅 기능을 지원합니다.
데이터 분석 데이터 마이그레이션, 백업 및 복원, 데이터 분석 등 다양한 용도로 사용됩니다.

배치 주요 기능

주요 기능 설명
Job과 Step을 이용한 배치 프로세스 구현 배치 작업을 Job과 Step 단위로 나누어 배치 프로세스를 구현합니다.
Chunk 지향 처리 방식 대용량 데이터를 Chunk 단위로 나누어 처리하여 메모리 사용량을 최소화합니다.
스케줄러를 이용한 배치 작업 스케줄링 Quartz, Cron 등을 이용해 주기적으로 배치 작업을 실행할 수 있습니다.
로깅과 예외 처리 기능 제공 배치 작업 중 로깅과 예외 처리를 지원하여 안정적인 작업 수행을 돕습니다.

Chunk 지향 처리 방식

Chunk 지향 처리 방식은 대용량 데이터를 작은 덩어리(Chunk)로 나누어 메모리 사용량을 최소화하며 처리하는 방식입니다. 한 번에 하나씩 아이템을 읽어와서 Chunk 단위로 묶고, Chunk 단위로 트랜잭션을 처리합니다.

Quartz와 Cron

  • Quartz: Java 기반의 오픈 소스 스케줄링 라이브러리로, 특정 시간에 작업을 예약하고 자동으로 실행할 수 있는 기능을 제공합니다.
  • Cron: 리눅스와 유닉스 계열 운영체제에서 사용하는 예약 작업 스케줄링 시스템입니다.

Spring Batch의 주요 개념

Job과 Step

  • Job: 하나 이상의 Step으로 구성되며, 배치 처리의 최상위 단위입니다. 실행 시 파라미터를 받을 수 있으며, 결과를 반환할 수 있습니다.
  • Step: 실제 배치 처리를 수행하는 단위입니다. Tasklet 방식과 Chunk 방식으로 구성될 수 있습니다.

Job 수행 과정:

  1. Job Launcher가 Job을 실행합니다.
  2. Job은 Step을 통해 실제 배치 처리를 수행합니다.
  3. Step은 데이터를 읽어오고(Item Reader), 처리하고(Item Processor), 저장하는(Item Writer) 과정을 거칩니다.

주요 용어 정리 📒

용어 설명
Job 배치 처리의 단위 작업을 의미합니다.
JobInstance 하나의 Job 실행을 나타내는 인스턴스를 의미합니다.
JobParameters Job 실행 시 필요한 파라미터를 의미합니다.
JobRepository Job 실행 정보를 저장하고 관리하는 저장소입니다.
JobLauncher Job을 실행하는 인터페이스입니다.
JobExecution Job 실행 정보를 나타내는 인스턴스를 의미합니다.
JobExecutionListener Job 실행 전후로 수행할 작업을 정의하는 인터페이스입니다.
Step Job을 구성하는 작은 단위 작업입니다.
ItemReader 데이터를 읽어오는 인터페이스입니다.
ItemProcessor 읽어온 데이터를 처리하는 인터페이스입니다.
ItemWriter 처리한 데이터를 출력하는 인터페이스입니다.
ExecutionContext Step 실행 중 필요한 컨텍스트 정보를 의미합니다.
StepExecution Step 실행 정보를 나타내는 인스턴스입니다.
StepExecutionListener Step 실행 전후로 수행할 작업을 정의하는 인터페이스입니다.

'🌱 Spring > Spring Boot' 카테고리의 다른 글

[Spring] JWT  (0) 2024.10.16
[Spring] Spring Security  (1) 2024.10.16
[Spring] Spring MVC  (0) 2024.10.16
[Spring] @Annotation  (0) 2024.10.16
[Spring] Spring AOP  (0) 2024.10.16
'🌱 Spring/Spring Boot' 카테고리의 다른 글
  • [Spring] JWT
  • [Spring] Spring Security
  • [Spring] Spring MVC
  • [Spring] @Annotation
kkongdo
kkongdo
kkongdo 님의 블로그 입니다.
  • kkongdo
    숲을 바라보며 나무를 심는 아이
    kkongdo
  • 전체
    오늘
    어제
    • 분류 전체보기 (32)
      • 🌏 Web (0)
      • ☕ Java (5)
      • 🌱 Spring (9)
        • Spring Boot (7)
        • Spring Data JPA & QueryDSL (2)
      • 🗂️ Database (5)
      • 💻 CS (12)
        • 운영체제 (4)
        • 네트워크 (5)
        • 자료구조 (3)
      • 🗃️Git (1)
      • 🔍 Algorithm (0)
      • 📡 DevOps (0)
        • Docker (0)
      • 🔭 ETC (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • GitHub
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    OS
    자료구조
    데이터베이스
    springbatch
    DI
    운영체제
    네트워크기기
    복잡도
    SpringMVC
    조인
    스케줄링
    @annotation
    spring
    db
    CS
    SpringSecurity
    java
    QueryDSL
    네트워크
    JPA
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
kkongdo
[Spring] Spring Batch - Batch와 Job, Step
상단으로

티스토리툴바