Spring batch

paduck·2023년 3월 15일
0

프로젝트

목록 보기
1/11

스프링 부트에서 배치 사용하기

Batch 의존성 추가

Spring Batch 프레임워크를 사용하기 위해 의존성을 추가해야 합니다. 이를 위해 Maven이나 Gradle과 같은 빌드 도구를 사용합니다.
Job 설정

Batch 작업을 수행할 Job을 설정합니다. Job은 일련의 Step으로 구성되며, Step은 하나 이상의 Tasklet 또는 Chunk 기반의 ItemReader, ItemProcessor, ItemWriter로 구성됩니다.
JobLauncher 구성

JobLauncher는 Job을 실행하는 데 사용됩니다. Spring Batch는 SimpleJobLauncher 또는 AsyncJobLauncher를 제공합니다.
Job 실행

JobLauncher를 사용하여 Job을 실행합니다. Job을 실행하면 Spring Batch가 Job의 모든 Step을 순서대로 실행합니다.
Spring Batch에서는 다양한 방식으로 Job을 실행할 수 있습니다. 예를 들어 스케줄러를 사용하여 주기적으로 Job을 실행하거나 REST API를 사용하여 외부에서 Job을 실행할 수 있습니다.

후순위


스프링 배치란?

스프링 배치는 대용량 데이터 처리 작업을 수행하는데 사용되는 오픈소스 프레임워크
스프링 배치는 일괄처리(Batch processing)를 지원하여, 대용량 데이터를 한번에 처리

배치 진행 flow

3단계(컴포넌트)로 이루어짐

  • 첫 번째 단계는 Reader에서 데이터를 읽어와
    • Reader는 데이터를 읽어와 Processor에서 가공
  • 두 번째 단계에서 Processor에서 데이터를 가공하며
  • 마지막 단계에서 Writer에서 데이터를 저장합니다
    • Writer는 가공된 데이터를 저장
  • Reader, Processor, Writer는 각각 하나의 인터페이스를 구현하며, 이 인터페이스를 구현한 구현체는 개발자가 직접 작성 가능
    일련의 과정을 Job이라고 부르며, Job은 Step이라는 단위로 나뉘어짐
  • Job은 실행하려는 배치 작업
  • Step은 실제로 배치 작업을 수행하는 단위

그렇다면 job 은 어떻게 실행?

Job을 실행하기 위해 JobLauncher가 사용

  • JobLauncher는 Job을 실행하며, 실행 중인 Job의 상태를 관리

그리고 이러한 과정은 JobRepository를 사용하여 Job의 실행 상태가 저장됨

  • JobRepository는 데이터베이스에 배치 작업에 필요한 테이블을 생성, 작업의 상태 등을 저장
  • JobRepository는 JobExplorer를 통해 Job의 실행 상태를 조회

스프링 배치는 스케줄링 기능도 지원

  • JobLauncher를 사용하여 Job을 실행할 때, 스케줄링 기능을 함께 설정하면 주기적으로 Job을 실행 가능

그럼 스프링 부트에서는?

스프링 부트에서 스프링 배치 프레임워크가 동작하는 개념은 일반적인 스프링 배치와 크게 다르지 않으나, 다만 스프링 부트는 스프링 배치 프레임워크를 더욱 편리하게 사용할 수 있도록 자동 구성 기능을 제공

@EnableBatchProcessing 어노테이션을 사용하여 스프링 배치를 활성화

  • 이 어노테이션을 사용하면 JobRepository, JobLauncher, JobRegistry 등의 인스턴스들이 자동으로 생성
    또한, 스프링 부트에서는 application.properties 파일에서 spring.batch 프로퍼티를 설정하여 스프링 배치의 다양한 옵션을 설정

스프링 부트에서 배치 실행

1) CommandLineRunner 또는 ApplicationRunner 인터페이스를 구현

  • 애플리케이션이 실행될 때 스프링 배치를 실행
    2) 스프링 스케줄링 기능을 사용하여 스프링 배치를 주기적으로 실행

  • 스프링 배치의 구성 요소들을 @Bean 어노테이션을 사용하여 직접 구성

    • 예를 들어, JobLauncher를 구성하고 싶다면 @Bean 어노테이션을 사용하여 JobLauncher 구현체를 직접 생성

스프링 배치 아키텍처

Application

  • 배치 Job을 실행하는 애플리케이션
  • 배치 Job을 실행하면 Job Launcher가 Application Context를 로드하고, Job을 실행

Batch Core

배치 Job을 실행하는 데 필요한 컴포넌트들이 포함

  • Job, Step, ItemReader, ItemProcessor, ItemWriter, JobLauncher, JobRepository 등 존재
  • 이러한 컴포넌트들은 스프링 프레임워크의 의존성 주입(Dependency Injection) 기능을 활용하여 애플리케이션 컨텍스트에서 사용

Infrastructure

스프링 배치를 실행하는 데 필요한 인프라스트럭처 관련 컴포넌트들이 포함

  • 데이터베이스, 스케줄러, 트랜잭션 관리 등

Job

배치 처리를 실행하기 위한 단위

  • 여러 개의 Step으로 이루어져 있으며, 각 Step은 특정 작업을 수행

Step

Job을 구성하는 작업의 단위

  • 하나의 Step은 하나의 Reader, Processor, Writer를 가짐

ItemReader

데이터를 읽어들이는 역할

  • Chunk 단위로 데이터를 읽어드림

ItemProcessor

ItemReader가 읽어들인 데이터를 가공하는 역할

  • 필요에 따라 생략 가능

ItemWriter

가공된 데이터를 출력하는 역할

  • Chunk 단위로 데이터를 출력

JobLauncher

Job을 실행하는 역할

  • 배치 Job의 실행 시점을 결정

JobRepository

배치 Job의 실행 상태와 관련된 정보를 저장

  • 데이터베이스를 사용하여 상태 정보를 관리
  • 스프링 배치의 각 컴포넌트들은 독립적으로 구현할 수 있으며, 각 컴포넌트들을 조합하여 다양한 배치 처리를 구현

스프링 부트의 장점

스케줄링과 실패 처리를 자동으로 처리

  • 스프링 배치는 Quartz, Cron 등 다양한 스케줄러와 통합
  • 스프링 프레임워크의 예외 처리 기능을 사용하여 예외 처리를 자동으로 처리

스프링 배치는 배치 처리의 상태와 결과를 추적

  • 모니터링과 로깅 기능도 제공

  • 배치 처리를 수행하면서 필요한 모든 데이터를 메모리에 로드하지 않음

    • 데이터를 청크 단위로 읽고 처리
    • 스프링 배치는 병렬 처리와 분산 처리를 지원하여 처리 속도 향상

스프링 배치 vs 크론 잡

  • 모두 일정한 시간 간격으로 작업을 수행하는 스케줄링 기능을 제공하는 기술

스프링 배치

  • 대용량의 데이터를 처리
    예를 들어, 대량의 데이터를 처리하여 특정한 형식의 파일로 출력하거나 데이터베이스에 대량의 데이터를 적재하는 등의 작업을 수행할 수 있습니다.
  • Spring Framework에서 지원하는 기술
    • 각각의 작업을 스텝으로 나누어 처리하고, 작업의 성공과 실패에 대한 처리 제공
  • 작업의 상태와 성공 여부 등을 모니터링할 수 있는 기능 제공

Cron Job

  • 정해진 시간에 주기적으로 실행되는 작업을 스케줄링하기 위한 기술
  • 리눅스나 유닉스 시스템에서 많이 사용
    주기적으로 수행되어야 하는 스크립트나 명령어를 실행하는 데 사용
  • 설정 파일을 통해 스케줄링을 정의하며, 주기적으로 수행되어야 하는 작업을 쉽게 설정

결론은?

우리 프로젝트에서는 스프링 배치를 사용한다!


스프링 배치 vs thread.sleep()

  • Java에서 제공하는 스레드 관련 기능
    지정된 시간 동안 현재 스레드를 대기
  • 대기 시간이 지난 후에 다음 작업을 실행하기 위해 사용
    예를 들어, 특정 작업을 일정 시간 간격으로 실행해야 하는 경우, Thread.sleep()을 사용하여 일정 시간마다 작업을 실행
  • Thread.sleep()은 스레드를 일시적으로 정지시키기 때문에 다른 작업을 처리하지 못함
profile
끈질기게 들러붙기

0개의 댓글