지금 새로 들어간 프로젝트에서 대부분의 업무가 배치 작업이다.
하지만.. 나는 배치를 다뤄본적이 거의 없다.
그렇기에 배치에 대해 처음부터 다뤄보려고 한다.
Batch 프로그램은 "대량의 데이터를 처리하는 과정을 자동화하는 프로그램"을 의미한다.
보통 배치는 스케줄러를 이용하여 특정시간에 자동으로 수행되도록 구성한다.
예를들어 회사에서 당신에게 월급을 줄 때
배치를 사용하지 않으면 회사는 매달 월급날 마다 직원들 한명 한명에게 돈을 이체해야한다.

하지만 이를 배치화 하면 월급날, 원하는 시간에 자동으로 월급을 이체하도록 설정할 수 있다.

이외에도 대량의 데이터를 백업하거나 데이터를 다른 서버로 옮기는 작업 등을 할 때
사람들이 많이 사용하지 않는 새벽 같은 시간에 프로그램을 돌리게 되는데
이러한 작업을 배치와 스케줄러로 개발을 한다.
배치가 일정한 시간 간격으로 반복적으로 수행되거나 특정 시간에 수행되도록 예약해둔 작업을 실행해주는 시스템이다.
배치는 대량의 데이터를 일괄처리 하기 위한 프로그램이고
스케줄러는 설정한 시간에 실행되는 작업을 설정할 수 있게하는 프로그램이다.

Job은 배치 처리의 하나의 단위를 이르는 말이다.
Job은 Step의 순서를 정의하고 필요하다면 외부로부터 파라미터를 받아서 작업을 수행할 수도 있다.
Step은 Job을 구성하는 최소한의 단위 작업니다.
하나의 Job은 한개 이상의 Step으로 이루어져 있다.
예를 들어 검증계에서 고객 데이터를 조회해서 개발계 DB에 입력하는 배치를 만든다고 한다면

Job은 "검증계_고객_데이터_개발계_이관Job" 으로 이름을 붙일 수 있다.
Step은 검증계에서 고객 데이터를 조회하는 Step, 조회한 데이터를 개발계 DB에 입력하는 Step
총 2개로 개발할 수 있다.


배치는 기본적으로 아래와 같은 프로세스로 진행된다.
1. Job Launcher로 Job을 실행시킨다.
2. Job은 하위 Step을 실행시켜 배치처리를 수행한다.
3. Step에서 데이터를 읽고(Item Reader) 처리하고(Item Processor) 저장(Item Writer)하는 작업을 진행한다.
step을 처리하는 방식에는 크게 Chunk 방식과 Tasklet 방식이 있다.
Chunk 방식은 하나의 트렌젝션에 여러개의 데이터를 처리하는 방식을 말한다.
지금 프로젝트는 DB procedure를 Spring batch로 변경하는 작업을 하는데
proceduer 개념도 처음이라 겸사겸사 알아봤다.
DB Procedure
DB Procedure는 데이터베이스에서 실행 가능한 하나 이상의 SQL문을 그룹화한 블록이다.
CREATE PROCEDURE storedProcName @numbers VARCHAR(max), @day DATE
AS
SET NOCOUNT ON;
SELECT something, something2, something3
FROM sometable
WHERE ids in (select value from string_split(@numbers,','))
AND day = @day
말 그대로 쿼리들을 뭉쳐둔 형태로 근래에는 JAVA 배치로 변경되는 추세인 것 같다.
https://zzang9ha.tistory.com/423
https://beomsic.tistory.com/entry/Spring-Batch-Chunk-%EC%A7%80%ED%96%A5-%EC%B2%98%EB%A6%AC
https://prodo-developer.tistory.com/165