배치 프로그램이란
데이터 처리에 대해 즉시성이 요구되지 않을 때 작업을 모아 일괄 처리하는 프로그램.
컴퓨터가 주기적으로 대량의 반복적인 데이터 작업을 완료하기 위해 사용하는 방식
급여, 재고 처리, 정산 시스템, 대규모 랭킹 시스템, 약관 메일 시스템, 주문 배송 요청 시스템 등에서 배치 프로그램이 쓰일 수 있으며
실시간 채팅 시스템은 배치 프로그램으로 적절치 못하다.
ex) 하루가 끝날 때나 야간과 같이 컴퓨팅 리소스를 더 일반적으로 사용할 수 있는 사용량이 적은 시간에 이러한 태스크를 배치로 처리합니다. 하루 종일 주문을 수신하는 전자 상거래 시스템을 예로 들어 보겠습니다. 시스템에서 주문을 그때그때 처리하는 대신 하루가 끝날 때 모든 주문을 수집하고 주문 처리 팀과 하나의 배치로 공유할 수 있습니다.
배치 프로그램의 장점으로는
- 사람의 개입을 최소화하고 반복 태스크를 보다 효율적으로 실행할 수 있다.
- 시스템에 주는 부담을 줄일 수 있다.
- 최소한의 인적 감독이나 관리를 필요로 한다.
Job: 스프링 배치에서 한 배치 프로그램의 작업 단위를 의미
JonInstance: 잡의 논리적 실행 단위이며, 하나의 인스턴스에 대해 이미 잡이 성공했거나 재시작 불가 옵션이 있는 경우 동일한 잡을 다시 수행할 수 없다.
JobExecution: job의 실행 상태 및 통계 정보를 추적하고 각 stop을 실행하고 상태를 추적한다. 별도로 설정하지 않으면 기본적으로 BATCH_JOB_EXECUTION 에 저장된다.
JobExecutionListner: job의 처리 전/ 후 추가적인 로직 처리를 담당하고 배치 작업의 알림 또는 리소스 초기화 및 정리 등의 작업에 활용될 수 있다. job의 성공 실패 여부에 상관없이 작동하므로 job execution의 상태값을 확인해 조건부 로직을 작성해야 한다.
JobParameterValiadator : 스프링 배치 작업의 파라미터가 유효한지 검증하는 함수형 인터페이스.
스프링 배치에서의 Step:
반드시 이름을 가져야 한다.
하나의 job에 대한 독립적인 실행 단계이다. 하나의 잡은 하나 이상의 스텝을 갖는다.
조건에 따라 실행 순서를 조정할 수 있다.
대표적인 처리 방식으로는 Tasklet, Chunk- oriented 방식이 있다.
Chunk- oriented :
- StipBuilder에서 job을 생성할 때 chunk 크기를 지정해준다.
- chunk size가 10이고 조회/처리 작업이 이루어지다가 처리 작업 609회째에 예외가 발생하면 롤백 카운트는 1이고 커밋 카운트는 60이다.
- reader, writer, processor 중 prosessor 가 없어도 정상 작동 한다.
- Item 처리 흐름은 Reader - Processor - Writer
faultTolerant() : 스프링 배치에서 Step의 예외 발생에 대한 대응을 설정하기 위한 옵션 빌더
스프링 배치에서 예외 발생시 생략에 대한 설명
- skipLimit(someCount) : skip할 횟수 지정. 기본 값은 0
- skip(SoneExecption.class): skip할 예외 지정
- noSkip(OtherSupException.class) : skip하지 않을 예외 지정
스프링 배치의 조건부 flow에 대한 설명
- .from(Step) : 해당 step부터 시작되는 새로운 분기를 정의한다.
- .on (String) : 앞선 step의 ExistStatus가 문자열 패턴에 매칭됐는지 검사한다.
- .to(Step) : 조건에 따라 이후 해당 step을 실행하게 한다.
- .end() : 정상종료됐음을 알린다.
ItemReader() :
- Flat 파일, JSON, 데이터베이스, HTTP API 등 다양한 리소스를 읽을 수 있다.
- Flat 파일에 대해서, 기본 구분자는 ,(comma) 이고, delimiter(String)으로 변경할 수 있다.
- 데이터베이스에서 읽을 때는 커서(단건) 방식과 페이징 방식으로 읽을 수 있다.
- 데이터 베이스를 읽을 때는 JdbcPagingItemReader, JdbcCursorItemReader를 사용한다.
'기타' 카테고리의 다른 글
redis 데이터 구조 학습 (1) | 2024.12.02 |
---|---|
퀴즈 8회 오답노트 (0) | 2024.04.26 |
퀴즈 7회차 (0) | 2024.04.12 |
퀴즈 6회 오답노트 (1) | 2024.03.30 |
퀴즈 오답노트 (0) | 2024.03.22 |