😎 이번에는 프로젝트 내에서 기능 추가 작업을 맡았다. 그것은 바로 !!
일정 기간이 지나면 사용자를 휴먼 계정으로 전환해야 하는데 그때 그냥 해당 유저에게 문자 메세지를 보낸 후에 유저를 삭제해야 하는 것이다.
해당 기능을 구현하기 위해 나는 스프링 배치를 활용해서 자동화를 구축할 것이다. 그리고 문자 메시지는 네이버 클라우드 OPEN API를 활용하여 메시지를 보낼 것이다 !!
일단 우리 프로젝트는 Spring Boot 2.2.2 버전이다. 해당 버전에서 Spring Batch를 사용할 수 있다.
사용하려면 먼저 의존성 추가해주고 진행 !!
의존성 추가 후 실제로 스프링 배치를 작동하기 위해서는 @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
Spring Batch에서는 DB를 통해 완료/실패와 같은 상태 관리를 한다. 크게 4가지 상태를 DB에 저장.
Spring Batch를 Chunk 기반으로 만들어보자 !!
Task 기반 : 하나의 작업 기반으로 실행
Chunk 기반 : 하나의 큰 덩어리를 n개씩 나눠서 이 단위로 실행.
즉, chunk 단위로 commit과 rollback이 이루어지는 것임.
Step
의 종류 3가지
😎 ItemReader
: 단순하게 아이템 하나를 읽는 Strategy이다.
배치 어플리케이션은 데이터를 읽는 것으로 시작,
다양한 DataSource(꼭 DB가 아니더라도)로부터 데이터를 읽을 수 있는 구현체를 잘 정의하는 게 중요하다.
😎 ItemProcessor
: Reader로부터 받아온 Item을 가공하는 담당
Item이 <I>
타입이었다면 <O>
타입으로 변경해서 넘길 수 있음
배치 어플리케이션의 핵심 비즈니스 로직이 들어가게 된다.
😎 ItemWriter
: Reader, Processor로부터 받아온 item에 대한 마지막 처리 단계.
(마지막이니 void
) - 데이터베이스에 따로 저장하거나, 파일로 쓰거나, 이벤트를 발생시키거나 등등
😊 JobLauncher
: JobLauncher는 배치 Job을 실행시키는 역할로, Job과 Parameter를 받아서 실행하고 JobExecution을 반환한다.
😊 JobParameter
: Spring Batch는 외부 혹은 내부에서 파라미터를 받아 여러 Batch 컴포넌트에서 사용할 수 있게 지원하고 있다.