배경 : 스프링배치 스터디 2주차이다. 미리 안했더니, 결국은 회사일 때문에 밀리고 밀려서 이번주는 하루전에 실습하게 되었다. 반성하고. 주말 등을 활용해서 내 공부 시간을 마련해보자. 지난주 1주차에서 중요한 부분 정리 및 2주차 실습 위주로 진행해보자.
내용 : 1주차 remind 후 2주차 실습 + 미진한 스프링배치 기본 이론 다시 공부하는 방식으로 간다.
[1주차 중요 내용 Remind]
1) 스프링 배치란?
Spring Batch란 무엇인가?
Spring Batch는 대량의 데이터 처리를 위한 경량화된 프레임워크로, 반복적인 작업을 수행하는 일괄 처리(Batch Processing) 작업을 효율적으로 처리할 수 있는 기능을 제공한다. 대용량 데이터 처리나
velog.io
- 대량의 데이터 처리에 효과적인 경량화된 프레임워크
(프레임워크의 의미 - 누구나 동일한 구조로 프로그래밍 할 수 있는 장점을 챙기자)
[보충공부] Spring Batch 의 특징
- 대용량 데이터 처리 : 데이터 처리간 분산 처리가 가능하여 방대한 양의 데이터 처리 가능
- 트랜잭션 관리 : 데이터 처리 중 실패한 작업은 롤백 가능
- 재시도 기능 : 작업중 실패한 경우 작업을 재시도 할 수 있는 기능 제공. 재시도 횟수 설정 가능.
2) 내가 못했던 부분 (H2 DB에 Default 생성되지 않는 현상)
- 스프링부트 3.x 부터는 @EnableBatchProcessing 주석 처리 후 진행
(yaml 파일에서의 설정파일내 아무리 셋팅해도, 저 @EnableBatchProcessing 실행시 기존 야물파일 내 설정값이 다 초기회되어버려서 생성되지 않은 현상 이 발생했음)
- 최초 생성시에는 batch.jdbc.initialize-schema : always 로 셋팅. 생성된 이후는 mysql 같은 DBMS 툴에서는 설정 해제 후 사용

3. 테이블 구조

테이블 구조만 읽어보면 처음부터 잘 머리속에 들어오질 않았다.
메인테이너 기도님의 설명을 머리속에 넣기 좋게 잘 정리해주신 예슬님이 정리해주신 이 표로 확실히 리마인드 해보자.
1. 배치 실행
2. BATCH_JOB_INSTANCE - 배치 1개의 단위의 고유 키값인 JOB_INSTANCE_ID 값을 생성, JOB 명칭을 정할 수 있음
(Job : 하나 이상의 Step 을 가지며 하나의 배치작업을 의미함. Job은 JobInstance로 표현)
3.
BATCH_JOB_EXECUTION - Job 실행 관련 중요 정보를 저장하는 테이블. BATCH_JOB_INSTANCE 테이블의 고유 key 인 JOB_INSTANCE_ID 값을 JOIN 하여 사용
BATCH_JOB_EXECUTION_PARAMS : Job 실행시 사용된 파라미터를 저장
BATCH_JOB_EXECUTION_CONTEXT : Job 실행시 컨텍스트 정보를 저장
4.
BATCH_STEP_EXECUTION : Job의 Step의 실행정보 저장
(Step : 배치 처리 작업의 최소 단위)
BATCH_STEP_EXECUTION_CONTEXT : Job의 Step 의 컨텍스트 정보 저장
=======================
Week2 내용 시작!!!
참고 : https://devocean.sk.com/blog/techBoardDetail.do?ID=166690
[SpringBatch 연재 02] SpringBatch 코드 설명 및 아키텍처 알아보기
devocean.sk.com
[실습]
- Tasklet 구현체를 생성한다.
- @Configuration을 통해서 생성할 배치 빈을 스프링에 등록한다.
- Job, Step 을 생성하고 빈에 등록한다.
- 실행 결과를 확인한다.
1. Tasklet 구현체를 생성한다
Tasklet 이란? - 하나의 작업 단위를 처리하는 인터페이스
Step (=배치 처리 작업의 최소 단위) 이 중지될 떄까지 execute 메서드가 계속 반복해서 수행하고, 수행할 때 마다 독립적인 트랜잭션이 얻어진다. 초기화, 저장 프로시저 실행, 알림 전송과 같은 Job 에서 일반적으로 사용.
GreetingTask.java 클래스를 생성하고, Tasklet,과 InitalizingBean 을 implements 해 온다.
그럼 인텔리제이에서 빨간줄이 뜨고, 오류를 확인하면 해당 클레스 내 execute와 afterPropertiesSet 을 오버라이드 하여 자동 생성하게 된다 (Tasklet 은 execute 메소드를, InitializingBean은 afterPropertiesSet 메소드를 필수로 생성해야 함)



이후 메인 교재에 언급되어 있는 실행 프로세스 확인을 위해 예제대로 log 를 찍는다.
현재 까지 진행과정중 모르는 용어 부분 은 정리한다.
[스프링 빈 생명주기 관련]
InitializingBean : 모든 속성이 BeanFactory에 의해 설정되면 반응해야하는 빈에 의해 구현되는 인터페이스
afterPropertiesSet : 모든 빈 프로퍼티가 설정된 이후, 빈 인스턴스가 전체 configuration 의 유효성 검증과 최종 초기화를 수행할 수 있도록 한다.
[참고]
테스트 전 데이터베이스를 초기화하는 방법
최근 프로젝트 시 회고 및 기록의 중요성을 느껴 오늘부터는 배운 내용들을 기록해보려고 한다. 이제 왕초보 단계는 벗어났고 사용법도 어느정도 익숙해졌으니 내부 동작 원리를 이해하는 단계
velog.io
StepContribution : Chunk 기반 Tasklet 에서 Chunk 프로세스의 변경 사항을 버퍼링한 후 StepExecution 상태를 업데이트 하는 도메인 객체이다.
[참고]
[Spring Batch] 스프링 배치 StepContribution 이해하기 - Spring boot 2.x
StepContribution StepContribution은 Chunk 기반 Tasklet에서 Chunk 프로세스의 변경 사항을 버퍼링 한 후 StepExecution 상태를 업데이트하는 도메인 객체다. Chunck 커밋 직전에 StepExecution의 apply 메서드를 호출하
ittrue.tistory.com
ChunkContext : 현재 실행중인 Chunk에 대한 Context 정보를 담고 있는 객체이다
[참고]
[Spring] Spring Batch Tasklet 작업 단위 이해하기 - StepContribution, ChunkContext
Tasklet이란간단한 단위의 작업을 수행하는 Batch Step을 정의할 때 사용하는 인터페이스입니다,.Step은 보통 Tasklet, Chunk 단위로 작업을 처리합니다.Tasklet은 하나의 작업 단위를 처리하는 인터페이스
kylo8.tistory.com
위 생성 다 한 후 스프링 배치 빈을 @Configuration 을 사용해 등록한다.
Job Step 을 생성하고 빈에 등록한다
Step 생성

Job 생성
커스텀하게 위에서 생성한 greetingTasklet 또한 사용 위한 메소드 생성
실행 해보자.
아 진짜 ㅠㅠ lombok 관련 소스상에서는 문제없는데, 실행하면 오류난다.. 이거 왜그런거지?

해당 실행되면
afterPropertySet(), Job, Step, Tasklet 순으로 실행되는 것을 확인하자
아 ㅠㅠ 시간이 없다..
빨리 이론 내용으로 들어가자
스프링 배치 아키텍처
스프링 배치 모델은 Tasklet , chunk 모델 2가지를 가진다.
Tasklet : 단순한 처리 로직 - 로직 자체가 단순한 경우
Chunk : 데이터량이 매우 큰 경우 효과적 처리, Reader/Processor/Writer 플로우 방식으로 처리됨.
배치 기본 아키텍처

못했음 ㅠㅠ
일단 스터디 준비하자 .. 이번 주말 보충 하겠음 ㅠㅠ
'개발 > 02-1.Spring Batch' 카테고리의 다른 글
[SpringBatch, DEVOCEAN] Week7- (EZ하게) MyBatisPagingItemReader로 DB내용을 읽고, MyBatisItemWriter로 DB에 쓰기 (2) | 2024.11.19 |
---|---|
[SpringBatch, DEVOCEAN] Week5-JdbcPagingItemReader로 DB내용을 읽고, JdbcBatchItemWriter로 DB에 쓰기 (3) | 2024.11.06 |
[SpringBatch,참고] 보조 공부자료 (cheeseyun10) (1) | 2024.09.02 |
[SpringBatch, DEVOCEAN] 1.SpringBatch 빠르게 시작하기 따라하기 (10) | 2024.09.01 |
[Spring Batch] 시작해보자. (0) | 2024.08.20 |