이 게시글은 인프런 정수원님의 강의를 수강하고 복습하며 작성한 글입니다. JdbcCursorItemReader 기본 개념 JdbcCursorItemReader는 Cursor 기반의 JDBC 구현체다. ResultSet과 함께 사용되고, Data Source로부터 SQL을 통해 값을 불러온다. JdbcCursorItemReader는 쓰레드 안정성을 보장하지 않기 때문에 멀티 쓰레드 환경에서 사용한다면 동기화 처리를 통한 동시성 문제를 해결해줘야 한다. Cursor 기반이라는 것은 Cursor가 가리키는 지점에서 한번에 Fetch Size만큼 DB에서 메모리로 퍼올린다는 이야기다. Cursor를 기반으로 구현할 때는 Fetch Size와 Chunk Size를 맞춰주는 것이 좋다. 왜냐하면 Chunk Size..
이 글은 인프런 정수원님의 강의를 복습하며 정리한 글입니다. Step Execution 기본개념 Step Execution은 Step이 실행될 때 마다 생성됨. Step이 한번 실행될 때, 실행 중 발생 정보를 저장한 객체 Job이 재시작할 때, 기본적으로 성공한 Step은 재시작하지 않음. 따라서 재시작하지 않는 Step은 StepExecution이 생기지 않고, 재시작하는 Step은 StepExecution이 생성됨. StepExecution 중 하나라도 실패가 있으면, 관련된 JobExecution은 항상 실패. 모두 성공 시, Job Execution은 성공. DB 스키마 매핑 BATCH_STEP_EXECUTION 테이블과 매핑됨. JOB_EXECUTION과 STEP_EXECUTION은 1:M 맵..
이 글은 인프런 정수원님의 강의를 듣고 복습하며 작성한 글입니다. Job Instance 기본개념 Job Instance는 Job이 실행될 때 만들어지는 고유한 객체임. Job name + Job Parameter의 해쉬 값을 더해서 만들어지기 때문임. Job Instance는 동일 Job name + Job Parameter에 대해서는 단 하나의 Instance만 만들어짐. 동일한 Job을 Job Parameter로 나눠서 저장하기 위한 것임. (1/1일 일별 정산, 1/2일 일병 정산 Job은 다른 Job이다) Job Instance가 있으면 기존 Job Instance를 반환(재실행), 없으면 새로 만들어 반환한다. Job과 Job Instance는 1:M 관계(Job Parameter의 영향성) ..
이 글은 인프런 정수원님의 강의를 복습하며 정리한 글입니다. DB ItermReader 배치 프로세스는 기본적으로 실시간으로 처리하기 어려울만큼의 방대한 데이터를 다룬다. 따라서 메모리의 효율성, 동작 시간등을 고려해야한다. 스프링 배치는 이에 대응하기 위해 크게 두 가지 방식의 ItemReader의 대응방식을 제공해준다. Cursor / Paging Cursor 형식 현재 cursor가 가리키는 곳의 데이터를 읽고, Cursor는 다음 데이터를 가리킨다. ResultSet이 Open 될 때 마다 next() 메서드가 호출되어 DB의 데이터가 반환되고, 객체와 맵핑이 이루어진다. DB Connection은 배치 처리가 완료될 때까지 데이터를 읽어오기 때문에 DB 연결시간이 길다. 모든 데이터를 메모리에 ..
이 게시글은 인프런 정수원님의 강의를 복습하며 작성한 글입니다. ChunkOrientedTaskletStep 순서도 앞선 게시글들에서 Chunk가 무엇인지, ChunkOrientedTaskletStep은 어떻게 이루어졌는지에 대해 공부를 했다. 조각조각된 내용들일텐데 이걸 하나로 모아서 한번 보려고 한다. Job에서 TaskLetStep으로 이동한다. TaskLetStep에서 RepeatTemplate을 이용해 반복을 실행한다. RepeatTemplate 내에서 ChunkOrientedTasklet을 반복적으로 수행해준다. ChunkOrientedTasklet의 ChunkProvider에서 ItemReader로부터 값을 읽는다. 이 때, Repeat Template을 통해서 반복적으로 값을 읽는다. It..