1 Step
- Spring Batch는 대용량 데이터 처리를 위한 오픈 소스 프레임워크로, Job이라는 배치 처리 단위와 그 안에 실행되는 Step 구성으로 이뤄져 있습니다.
- 여기서는 Spring Batch의 Step에 대해 좀 더 자세히 알아보겠습니다.
- Step은 Job 내에서 실제 배치 처리를 정의하는 컴포넌트입니다.
- tep 내부에는 데이터 읽기, 처리, 쓰기 등의 실제 배치 작업이 이루어집니다.
- 하나의 Job은 여러개의 Step으로 구성되며, 각 Step은 독립적인 처리 단위로 직렬 또는 병렬로 수행될 수 있습니다.
- Step의 실행 결과에 따라 Job의 실행 흐름을 제어하는 것이 가능하며, 이를통해 복잡한 비즈니스 로직을 표현할 수 있습니다.
1.1 Job과 Step의 분리
- 유연성
- 작업을 단계별로 분리하면, 개별 스텝에 대해 다양한 설정을 적용할 수 있습니다.
- 예를 들어, 특정 스텝에서 오류가 발생한 경우에 대한 정책, 스텝의 실행 순서, 병렬 및 순차 수행 등 원하는 방식으로 조작하거나 정의할 수 있습니다.
- 이는 복잡한 작업을 더 간결하고 관리하기 쉬운 형태로 만들어줍니다.
- 유지보수성
- 각 Step이 독립적인 컨텍스트를 가지므로, 한 스텝의 변경이 다른 스텝에 영향을 미치지 않습니다.
- 이로써 각 스텝을 독립적으로 테스트하고 디버그할 수 있으며, 유지보수가 쉬워집니다. 이는 시스템의 유지보수성을 향상시키는 핵심 요소입니다.
- 확장성
- 스텝을 병렬적으로 실행할 수 있습니다.
- 하나의 스텝 내에서 처리할 일을 여러 스레드에 나눠 해당 스텝을 병렬로 실행할 수 있습니다.
- 신뢰성
- Spring Batch는 재시작, 건너뛰기, 롤백 같은 기능을 완벽하게 지원합니다.
- 스텝 단위의 Tasklet모드와 청크모드를 이용해 장애가 발생했을 때 확인하고 처리할 수 있고, 이는 분산 처리나 대량 데이터 처리 시에 원활한 작업을 보장합니다.
2 Step의 종류
- Spring Batch는 크게 두 가지 종류의 Step을 제공합니다.
- Chunk 기반 Step
- 아이템 중심의 처리로, 일반적으로 ItemReader, ItemProcessor, ItemWriter로 구성되는 흐름을 갖습니다.
- 대부분의 배치 처리가 아이템 단위로 수행되기 때문에 Chunk 기반 Step이 가장 일반적으로 사용되는 Step 유형입니다.
- Tasklet 기반 Step
- 단일 태스크를 수행하도록 설계된 Step입니다.
- 특정한 비즈니스 로직을 한 번만 수행하거나, 배치 Job의 시작이나 종료 시점에 어떤 처리를 수행하는 데 주로 사용됩니다.
3 Chunk 기반 Step
- Chunk 기반 Step은 대량의 데이터를 일정 크기로 나누어 처리하는 방식입니다.
- 이 방식에서는 데이터를 읽고, 처리하고, 쓰는 과정이 청크(Chunk) 단위로 이루어집니다.
- Chunk 기반 Step은 다음과 같은 주요 컴포넌트로 구성됩니다:
- [[ItemReaders]] : 데이터를 읽어오는 역할을 담당합니다.
- [[ItemProcessors]]: 읽어온 데이터를 변환하거나 필터링하는 역할을 수행합니다. (선택사항)
- [[ItemWriters]] : 처리된 데이터를 저장하거나 출력하는 역할을 맡습니다.
- 이 컴포넌트들은 청크 단위로 데이터를 처리하며, 트랜잭션 경계 내에서 수행됩니다.
- 만약 처리 도중 오류가 발생하면, 해당 청크 단위로 롤백이 이루어집니다.
4 Tasklet 기반 Step
- Tasklet 기반 Step은 단일 작업 기반으로 처리되는 방식입니다.
- Tasklet은 하나의 작업 단위로, 주로 청크 기반 처리가 적합하지 않은 경우에 사용됩니다.
- Tasklet 인터페이스를 구현하여 원하는 작업을 수행할 수 있으며, 필요에 따라 트랜잭션 경계를 설정할 수 있습니다.
5 선택
- Spring Batch의 Step은 Chunk 기반과 Tasklet 기반의 두 가지 타입이 있습니다.
- 이 두 가지 타입은 사용 목적 과 적용할 작업의 유형에 따라 선택됩니다.
- Chunk 기반 Step
- Chunk 기반 Step은 아이템 단위의 데이터 처리에 적합합니다.
- 일반적으로 대용량의 데이터를 일괄적으로 다루는 용도에 많이 사용되며, 행 단위로 데이터를 읽고, 가공하고, 쓰는 경우에 적합합니다.
- 예를 들어, 수천, 수만 개의 데이터 레코드를 데이터베이스에서 읽어서 특정 로직을 적용한 후 다른 데이터베이스에 쓰는 경우에 이 모델을 사용하기 적합합니다.
- 또한, Chunk 기반 Step은 트랜잭션 관리와 오류 처리에 대한 강력한 기능을 제공하므로, 안정적인 배치처리를 구현하는데 큰 도움이 됩니다.
- Tasklet 기반 Step
- Tasklet 기반 Step은 Chunk 기반 Step보다 단순하게 작업을 처리하는 경우에 사용됩니다.
- Chunk 기반 Step의 Reader, Processor, Writer 모델이 과도하게 복잡하다고 판단되는 경우에는 Tasklet 기반 Step을 사용하는 것이 적합합니다.
- 예를 들어, 배치 작업의 시작이나 종료 시점에 일련의 작업을 수행할 필요가 있는 경우, 파일을 복사하거나 디렉토리를 생성하는 등의 단순한 작업을 수행하는 경우 Tasklet 기반 Step을 선택할 수 있습니다.