본문 바로가기

Web/Spring

맨땅에 Spring Batch - Task 그리고 Chunk

728x90
반응형

Spring Batch에서 Step의 데이터 처리 방식은 TaskChunk 두가지가 있다.

 

Task(Tasklet)

  • 직접 구현한 Tasklet 실행
  • 단일 작업 기반으로 처리되는 것이 더 효율적인 경우 사용
  • Step이 중지될 때까지 execute 메서드가 계속 반복해서 수행하고, 수행할 때마다 독립적인 트랜잭션이 얻어짐

출처 https://velog.velcdn.com/images/wnguswn7/post/f47ec974-633d-4dc9-9084-46efb77e2cf1/image.PNG

 

Chunk

  • ChunkOrientedTasklet을 실행
  • 한 번에 하나씩 데이터(row)를 읽어 Chunk라는 덩어리를 만든 뒤, Chunk 단위로 트랜잭션을 다룸
  • Chunk 기반 Step은 ItemReader, ItemProcessor, ItemWriter라는 3개의 주요 부분으로 구성 ➜ ItemReader와 ItemProcessor에서 데이터는 1건씩 다뤄지고, ItemWriter에선 Chunk 단위로 한번에 처리
  • Chunk 단위로 트랜잭션을 수행하기 때문에 실패할 경우엔 해당 Chunk 만큼만 롤백이 되고, 이전에 커밋된 트랜잭션 범위까지는 반영이 됨

출처 https://velog.velcdn.com/images/wnguswn7/post/b3a11ddf-6751-4673-acba-a0d86332f454/image.PNG

 

 

간단하게 적어보면 Task하나의 데이터를 처리할 때 하나의 트랜젝션을 얻고 ChunkChunk Size만큼의 데이터를 처리할 때 하나의 트랜젝션이 얻어지는 것 같다.

 

Chunk 방식의 코드화
Paging을 사용해서 Data를 read할 때 주의점과 Chunk 와 JPA 사용 시에 시너지 효과

728x90
반응형

'Web > Spring' 카테고리의 다른 글