Chunk 방식
- 정의: Chunk 방식은 데이터를 일정량의 '조각(Chunk)'으로 나누어 처리합니다.
각 Chunk는 읽기(Read), 처리(Process), 쓰기(Write)의 순서로 진행됩니다. - 장점:
- 대량의 데이터를 효율적으로 처리할 수 있습니다.
- 재시작 가능성 및 성능 최적화에 유리합니다.
- 단점:
- 단순한 작업에는 Tasklet에 비해 과도할 수 있습니다.
- 구현이 Chunk 단위로 제한됩니다.
Tasklet 방식
- 정의: Tasklet 방식은 한 번의 배치 작업을 단일 작업(Tasklet)으로 처리합니다. 각 Tasklet은 독립적으로 실행되며, 복잡한 로직을 구현할 때 사용됩니다.
- 장점:
- 복잡한 로직을 자유롭게 구현할 수 있습니다.
- 배치 작업의 흐름을 세밀하게 제어할 수 있습니다.
- 단점:
- 대량 데이터 처리에는 비효율적일 수 있습니다.
- 상대적으로 구현이 복잡할 수 있습니다.
실행 순서
- Tasklet 방식: Job -> Step -> Tasklet 순으로 실행됩니다. 각 Tasklet은 독립적인 로직을 수행합니다.
- Chunk 방식: Job -> Step -> [Read -> Process -> Write] 순으로 실행됩니다. 이 과정은 설정된 Chunk 크기만큼 반복됩니다.
데이터가 50,000건이고, Chunk size가 1,000이며, Reader에서 데이터베이스를 이용해 조회할 때 Page size도 1,000으로 설정된 경우, 스프링 배치의 Chunk 방식은 다음과 같은 순서로 실행됩니다.
기본 설정
- 데이터 총량: 50,000건
- Chunk Size: 1,000건 (한 번에 처리할 데이터의 양)
- Page Size: 1,000건 (데이터베이스에서 한 번에 읽어올 데이터의 양)
실행 순서
- 시작:
- 배치 작업이 시작됩니다.
- 읽기(Read) 단계:
- 첫 번째 페이지(1-1,000건):
- 데이터베이스에서 첫 1,000건의 데이터를 읽습니다. 이때, Page Size가 1,000이므로, 한 번의 데이터베이스 호출로 1,000건을 가져옵니다.
- 첫 번째 페이지(1-1,000건):
- 처리(Process) 단계:
- 읽어온 1,000건의 데이터에 대해 개별적인 처리를 수행합니다. 이 처리는 변환, 계산, 필터링 등이 될 수 있습니다.
- 쓰기(Write) 단계:
- 처리된 1,000건의 데이터를 저장하거나, 다음 단계로 전달합니다.
- 다음 Chunk:
- 두 번째 페이지(1,001-2,000건):
- 다음 1,000건의 데이터를 읽습니다. 이 과정은 Page Size에 따라 데이터베이스에서 다음 1,000건을 가져옵니다.
- 위와 동일한 처리(Process)와 쓰기(Write) 단계를 거칩니다.
- 두 번째 페이지(1,001-2,000건):
- 반복 실행:
- 이 과정은 모든 50,000건의 데이터가 처리될 때까지 계속됩니다.
- 총 50번의 Chunk 처리가 발생합니다 (50,000건 / 1,000건 = 50 Chunk).
- 완료:
- 모든 Chunk의 처리가 완료되면, 배치 작업이 종료됩니다.
- 모든 Chunk의 처리가 완료되면, 배치 작업이 종료됩니다.
요약
- 해당 예시에서는 Chunk Size와 Page Size가 같기 때문에, 각 Chunk에서의 Read 단계는 데이터베이스에서 1,000건의 데이터를 한 번에 읽어옵니다.
- 이후 이 데이터는 Process 단계를 거쳐 처리되고, Write 단계에서 저장 또는 전송됩니다.
- 전체 데이터는 총 50개의 Chunk로 나누어져 순차적으로 처리됩니다.
이 방식은 대량의 데이터를 효율적으로 처리할 수 있게 해주며, 오류 발생 시 해당 Chunk만 재처리하거나 조정하는 유연성을 제공합니다.