트랜잭션과 롤백
트랜잭션
- 선언적 관리 :
@Transactional과 같이 트랜잭션 경계를 줄 수 있습니다.
- 프로그래밍적 :
PlatformTransasctionManager로 직접 과리하는 방법이다. 세밀한 제어를 제공할 수 있다. 그러나 많은 보일러플레이트 코드가 필요하다.
롤백
- 기본 롤백 : UnCheckedException은 롤백을 발생시키고 CheckedException은 롤백을 유발하지 않는다.
- 사용자 정의 롤백 : RetryPolicy, SkipPolicy를 확장하여 사용자 정의 롤백을 구현할 수 있다.
@Retryable, @Rollback사용 : 일시적인 실패에 대한 재시도 전략 정의, 비즈니스 논리 또는 발생 예외 유형을 지정하기 위해서 어노테이션을 제공한다.
StepScope, JobScope
- StepScope:
- 단계 범위로 선언된 빈은 각 단계 실행에 대해서 생성되고 관리된다.
- 단계가 실행될 때마다 새로운 인스턴스가 생성된다.
- 각 인스턴스는 고유한 상태를 포함한다는 것을 의마한다.
- 트랜잭션이 단계 처리 내에서 수행되므로, 트랜잭션 컨텍스트는 단계 범위 내에서 설정되어 배치 작업이 다른 실행의 간섭 없이 데이터를 일관되게 관리할 수 있도록 한다.
- JobScope
- 작업 범위로 표시된 빈은 전체 작업의 실행과 연결
- 작업 실행 당 한 번 생성되며, 여러 단계에 걸쳐 상태를 유지할 수 있다.
- 구성 또는 전체 작업에 공통 데이터를 보유하는 데 사용될 수 있다.
- 단계별 인스턴스가 없기에 트랜잭션 컨텍스트에서 복잡성을 초래할 수 있다.
계속 읽기
스케쥴링
- 지정된 시간이나 정기적인 간격으로 작업을 실행할 수 있는 기능
전략
1. TaskScheduler
- 스프링 프레임워크의 일부이며, 작업 스케쥴링을 위한 더 높은 수준의 추상화를 제공한다.
TaskScheudler의 schedule 메소드로 예약할 수 있다.
@Scheduled같은 어노테이션으로도 가능하다.
2. Quartz
- 더 복잡한 스케쥴링을 지원
- 스프링 배치 작업을 지정하는 Quartz의 job을 지정할 수 있다.
- 서버 재시작 후에도 계속 실행할 수 있다.
- 클러스터 환경에서 수행할 수도 있다.
- 복잡한 스케쥴링
계속 읽기
작업 실행
JobLauncher
- 특정 매개변수 집합으로 작업을 실행하도록 설계됐다.
- JobParameter를 사용하여 작업 실행을 구분한다.
- 동일한 매개변수로 동일한 작업을 실행하더라도 매개변수가 다르지 않는 한 새로운 실행이 시작되지 않는다.
계속 읽기
SpringBatchTest
단위 테스트
@SpringBatchTest로 단위 테스트를 진행할 수 있다.
- 배치 구성 요소만 로드할 수 있다.
중요성
- 아래의 문제를 검증하기 위해서 테스트를 진행하는 것이 좋다.
- 대량의 데이터 처리할 때 무결설 문제
- 작업이 장기간 발생할 경우 성능 문제
- 오류 처리와 개발자 개입 없이 재시도
계속 읽기
재시도 및 건너뛰기
- 작업 실행 중에 오류를 우아하게 처리하기 위한 중요한 메커니즘
계속 읽기
Listener, Event
배치 리스너
- 배치 실행의 다양한 단계에 Hook을 걸도록 허용
- 작업 실행, 단계 실행 및 청크 처리 모니터링 및 사용자 정의를 위한 메커니즘을 제공
- 리스너는 작업 실행에서 더 풍부한 경험을 주며, 로깅, 오류 처리, 통계 수집 및 알림과 같은 작업을 가능하게 한다.
계속 읽기