인프런 커뮤니티 질문&답변

DEVEVE님의 프로필 이미지
DEVEVE

작성한 질문수

[스프링 배치 입문] 예제로 배우는 핵심 Spring Batch

DB 데이터 이관 하기 (DB 데이터 읽고 쓰기)

Chunk size에 대해

작성

·

2.9K

0

안녕하세요.

코드를 보면 Step을 만들 때, .<Orders, Accounts>chunk(5) 와 같이 chunk size를 5로 지정했는데요.
ItemReader에서도 PageSize를 5개로 지정했습니다.
그리고 실제로 배치를 실행하면 정상적으로 동작합니다.

하지만, 로그를 보면 select와 insert가 섞여있는데요.
5개씩 실행되는게 어느 단위인지 궁금합니다.
1. Reader에서 5개를 읽어온다.
2. 5개를 Processcor에서 처리한다.
3. 5개를 Writer에서 DB에 작성한다.
저는 위와 같은 방식이라고 생각했는데, 어떤게 맞는건가요?
좋은 강의 감사합니다!

 

답변 1

2

MJ코딩님의 프로필 이미지
MJ코딩
지식공유자

deveve님 안녕하세요 :)
좋은 질문 감사합니다 ㅎㅎㅎ
Page size는 페이징 처럼 읽는 데이터의 개수이고, Chunk size는 커밋을 할 개수입니다.

  1. ItemReader에서 데이터(item)를 읽기 (이때 페이징 데이터 개수 만큼 읽기)

  2. 읽은 데이터를 ItemProcessor에서 처리

  3. chunk size가 충족이 될 때까지 1 - 2 반복

  4. chunk size 충족 시 Write 수행

  5. 1 - 4 반복

위의 말씀 해주신 내용 처럼 예를 볼게요.
page size 5입니다. 그럼 ItemReader에서는 데이터 (페이징 처럼) 5개를 한번에 읽어 옵니다. ItemProcessor 에서는 방금 읽은 데이터를 처리를 해줘요. 그리고 Chunk size가 5일 때, 5개의 데이터를 Write 해주겠습니다.
page size가 1일 때는, ItemReader에서 데이터 (페이징 처럼) 1개를 읽어 옵니다. ItemProcessor 에서는 방금 읽은 데이터를 처리를 해주겠습니다. Chunk size가 5인데, 아직 5개 chunk 사이즈가 아니기 때문에, write 호출 없이 ItemReader로 돌아가서 똑같이 1개의 데이터를 읽고, ItemProcessor 에서 방금 읽은 데이터를 처리를 하겠습니다. ItemReader-ItemProcessor 반복을 하며 5개의 데이터가 모이면 chunk size가 충족되어 write 작업이 실행 되겠습니다.
설명이 도움이 되셨으면 좋겠습니다.

감사합니다.

[0] 참고 문서
https://docs.spring.io/spring-batch/docs/4.0.x/reference/html/index-single.html#chunkOrientedProcessing

DEVEVE님의 프로필 이미지
DEVEVE
질문자

이해가 되었습니다.
감사합니다 :)

DEVEVE님의 프로필 이미지
DEVEVE

작성한 질문수

질문하기