스프링 배치를 활용한 자동화

Chooooo·2023년 11월 7일
0

인턴생활

목록 보기
10/19

😎 이번에는 프로젝트 내에서 기능 추가 작업을 맡았다. 그것은 바로 !!

일정 기간이 지나면 사용자를 휴먼 계정으로 전환해야 하는데 그때 그냥 해당 유저에게 문자 메세지를 보낸 후에 유저를 삭제해야 하는 것이다.

해당 기능을 구현하기 위해 나는 스프링 배치를 활용해서 자동화를 구축할 것이다. 그리고 문자 메시지는 네이버 클라우드 OPEN API를 활용하여 메시지를 보낼 것이다 !!


일단 우리 프로젝트는 Spring Boot 2.2.2 버전이다. 해당 버전에서 Spring Batch를 사용할 수 있다.
사용하려면 먼저 의존성 추가해주고 진행 !!

Application.java 스프링 배치 활성화

의존성 추가 후 실제로 스프링 배치를 작동하기 위해서는 @EnableBatchProcessing 어노테이션을 추가해야 한다.

@EnableBatchProcessing
@SpringBootApplication
public class AdminApplication {

	public static void main(String[] args) {
		SpringApplication.run(AdminApplication.class, args);
	}

}
  • 어노테이션을 추가하면 설정 클래스를 실행시키며 스프링 배치의 모든 초기화 및 실행 구성이 이루어진다.
  • 스프링 부트 배치의 자동 설정 클래스가 실행되면서 빈으로 등록된 모든 Job을 검색하여 초기화와 동시에 Job을 수행하도록 구성된다.

테이블 생성

스프링 배치 메타 데이터

스프링 배치의 실행 및 관리를 목적으로 여러 도메인들의 정보들을 저장, 업데이트, 조회할 수 있는 스키마를 제공한다. 따라서 DB와 연동할 경우 필수적으로 메타 테이블이 생성되어야 한다.

자동생성

application 설정을 통해 메타 테이블을 생성하기 위한 쿼리를 자동으로 실행해준다. 설정하지 않을 시 기본적으로 EMBEDDED로 설정되어 애플리케이션 실행 시 스프링부트가 자동으로 생성해준다.

application.properties에 추가해주기.
spring.batch.jdbc.initialize-schema=always

  • ALWAYS : 스크립트 항상 실행, DBMS 설정이 되어있을 경우 내장 DB보다 우선적으로 실행된다.
  • EMBEDDED : 내장 DB일 때만 실행되며 스키마가 자동 생성된다. (기본값)
  • NEVER : 스크립트를 실행하지 않는다. 내장 DB일 경우 스크립트가 생성이 되지 않기 때문에 오류가 발생한다.

Spring Batch에서는 DB를 통해 완료/실패와 같은 상태 관리를 한다. 크게 4가지 상태를 DB에 저장.

  1. 이전 실행 Job History
  2. 실패한 Batch와 Parameter / 성공한 Job
  3. 실행 재개 지점
  4. Job 기준 Step 현황과 성공/실패 여부

Spring Batch를 Chunk 기반으로 만들어보자 !!

Task 기반 : 하나의 작업 기반으로 실행
Chunk 기반 : 하나의 큰 덩어리를 n개씩 나눠서 이 단위로 실행.
즉, chunk 단위로 commit과 rollback이 이루어지는 것임.

Chunk 기반

Step의 종류 3가지

  • ItemReader
  • ItemWriter
  • ItemProcessor ( 필수 x )

😎 ItemReader : 단순하게 아이템 하나를 읽는 Strategy이다.
배치 어플리케이션은 데이터를 읽는 것으로 시작,
다양한 DataSource(꼭 DB가 아니더라도)로부터 데이터를 읽을 수 있는 구현체를 잘 정의하는 게 중요하다.

😎 ItemProcessor : Reader로부터 받아온 Item을 가공하는 담당
Item이 <I> 타입이었다면 <O> 타입으로 변경해서 넘길 수 있음
배치 어플리케이션의 핵심 비즈니스 로직이 들어가게 된다.

  • 하지만 따로 가공할 로직이 없다면 만들지 않아도 된다.
  • 프로세서는 개발자가 직접 구현하는 영역이기 때문에 제공되는 구현체의 종류도 Reader에 비해 별로 없다.

😎 ItemWriter : Reader, Processor로부터 받아온 item에 대한 마지막 처리 단계.
(마지막이니 void) - 데이터베이스에 따로 저장하거나, 파일로 쓰거나, 이벤트를 발생시키거나 등등

JobLauncher와 JobParameter

😊 JobLauncher : JobLauncher는 배치 Job을 실행시키는 역할로, Job과 Parameter를 받아서 실행하고 JobExecution을 반환한다.

😊 JobParameter : Spring Batch는 외부 혹은 내부에서 파라미터를 받아 여러 Batch 컴포넌트에서 사용할 수 있게 지원하고 있다.

profile
back-end, 지속 성장 가능한 개발자를 향하여

0개의 댓글