Backend
home
📝

Tasklet vs Chunk 비교와 처리 테스트

생성 일시
2025/01/22 06:16
태그
SpringBoot
게시일
최종 편집 일시
2025/02/09 13:26
참고링크:

Tasklet

Step이 중지될 때까지 execute 메서드가 계속 반복해서 수행하고, 수행할 때마다 독립적인 트랜잭션이 얻어짐
초기화, 저장 프로시저 실행, 알림 전송과 같은 Job에서 일반적으로 사용
계속 진행할지 아님 끝낼지 두 가지 경우만 제공
데이터의 처리 과정이 tasklet 안에서 한번에 이루어지고, 배치 처리 과정이 쉬운 경우 쉽게 사용됨 (대용량 데이터 처리의 경우 더 복잡해질 수 있음)
tasklet의 execute 메서드의 return 타입은 RepeatStatus RepeatStatus.FINISHED - 종료 / RepeatStatus.CONTINUABLE - 다시 실행

Chunk

한 번에 하나씩 데이터(row)를 읽어 Chunk라는 덩어리를 만든 뒤, Chunk 단위로 트랜잭션을 다룸
Chunk 단위로 트랜잭션을 수행하기 때문에 실패할 경우엔 해당 Chunk 만큼만 롤백이 되고, 이전에 커밋된 트랜잭션 범위까지는 반영이 됨
대용량 데이터를 처리할 경우 사용됨
Chunk 기반 Step은 ItemReader, ItemProcessor, ItemWriter라는 3개의 주요 부분으로 구성
➜ ItemReader와 ItemProcessor에서 데이터는 1건씩 다뤄지고, ItemWriter에선 Chunk 단위로 한번에 처리
ItemReader Step(Database)에서 배치 처리할 Item을 읽어오는 역할 ItemReader에 대한 다양한 인터페이스가 존재하고, 다양한 방법으로 Item을 읽어올 수 있음 ⠀ ItemProcessor Reader로 읽어온 Item을 데이터를 가공/처리하는 역할 배치를 처리하는데 필수 요소는 아님 item을 필터 도중 null로 리턴하면, 그 item은 write로 전달되지 못함 (값이 정확히 있는 item들만 write로 전달됨) ⠀ ItemWriter Processor로 가공/처리 된 데이터들(items : List< item >)을 Database에 저장하는 역할 처리 결과물에 따라 Insert / Update / Queue를 사용한다면 Send가 될 수도 있음 ItemWriter에 대한 다양한 인터페이스가 존재 기본적으로 item들은 List 단위로 처리되며, 그 List는 Chunk 단위로 처리됨
Plain Text
복사