💡 Spring Boot Batch
대량의 데이터를 처리하는 작업을 자동화하여 시스템의 부하를 줄이고 효율적인 데이터 처리를 가능하게 하는 프레임워크
💡 배치 프로그램(Batch Program)
대량의 데이터를 처리하는 작업을 자동화하는 프로그램
Job과 Step을 이용한 배치 프로세스 구현
배치 처리의 단위 작업(Job)과 작은 단위 작업(Step)을 이용하여 배치 프로세스를 구현하는 기능을 제공
Chunk 지향 처리 방식을 통한 대용량 데이터 처리
Chunk 단위로 데이터를 처리하여 대용량 데이터 처리 기능을 제공
전체 프로세스
1. Job Launcher로 Job을 실행 (Job Launcher -> Job)
2. Job은 Step을 통해 실제 배치처리를 수행 (Job → Step)
3. Step에서는 읽어오고(Item Reader) → 처리하고(Item Processor) → 저장(Item Writer)을 수행합니다. (Step → Item Reader, Processor, Writer)
Job
- 하나 이상의 Step으로 구성이 되며 배치 처리의 최상위 단위
- 실행 시점에 파라미터를 전달받을 수 있으며 실행 결과를 반환 가능
- 1개의 Job은 1개 이상의 Step으로 구성되어 있음
용어
Job - 배치 처리의 ‘단위 작업’
JobInstance - 하나의 Job 실행을 나타내는 ‘인스턴스’
JobParameters - Job 실행 시 필요한 ‘파라미터’
JobRepository - Job 실행 정보를 저장하고 관리하는 ‘저장소’
JobLauncher - Job을 실행하는 인터페이스
JobExecution - Job 실행 정보를 나타내는 인스턴스
JobExecutionListener - Job 실행 전후로 수행할 작업을 정의하는 인터페이스
Step
- 실제로 배치 처리를 ‘수행’하는 단위
- Spring Batch Job안에는 한 개 이상의 Step으로 구성되어 있음
- Step에서는 하나의 작업만 처리를 수행하는 ‘Tasklet’ 방식 또는 Reader-Processor-Writer 묶음으로 여러 작업을 처리를 하는 ‘Chunk’ 방식이 있음
용어
Step - Job을 구성하는 작은 단위 작업
ItemReader - 데이터를 읽어오는 인터페이스
ItemProcessor - 읽어온 데이터를 처리하는 인터페이스
ItemWriter - 처리한 데이터를 출력하는 인터페이스
ExecutionContext - Step 실행 중 필요한 컨텍스트 정보
StepExecution - Step 실행 정보를 나타내는 인스턴스
StepExecutionListener - Step 실행 전후로 수행할 작업을 정의하는 인터페이스
Spring Batch 종류
💡 Chunk 방식
- Chunk를 이용한 Chunk 기반 처리 방식
- Batch의 Step 단계에서 ‘단일한 레코드(row)를 묶어서’ 여러 작업을 처리하는 방식을 의미
- 해당 방식에서는 ‘묶인 레코드를 하나의 트랜잭션으로 처리’하며 실패를 하는 경우 롤백을 수행
- 해당 방식은 병렬 처리를 위해 Chunk를 사용하되 ‘순차적으로 처리하는 방식’이며 Parallel Chunk 방식은 Chunk를 독립적으로 처리하여 병렬 처리를 수행
- 대용량 데이터를 처리할 때, 성능이 향상되고 중복 레코드 처리나 실패한 레코드 처리 등 예외 상황에 대한 대처가 용이
- 예를 들어, 파일을 읽어들여 데이터를 처리하는 작업이나 DB에서 데이터를 조회하여 처리하는 작업 등
💡 Chunk
- 데이터를 일정한 크기로 나눈 데이터 셋
- Chunk 단위로 나누면 전체 데이터를 한 번에 처리하지 않기에 메모리 부하를 줄이고 성능 향상 가능
💡 단일한 레코드를 묶어서 처리
- Chunk 방식에서는 ‘Reader-Processor-Writer 방식’을 이용
- 이러한 처리 방식은 대용량 처리를 위해서 사용하며 ‘Reader’는 데이터를 읽어 들이는 역할
- ‘Processor’는 읽어 들인 데이터를 가공하거나 필터링하는 역할
- ‘Writer’는 가공된 데이터를 저장하는 역할
Chunk 기반의 STEP의 Reader-Processor-Writer 처리 방식
1. 데이터 베이스에서 데이터를 읽어옴 (Item Reader)
2. 읽어온 데이터를 처리 (Item Processor)
3. 데이터를 저장 (Item Writer)
Parallel Chunk 방식
- Chunk 방식의 처리에서 더욱 빠른 처리 속도를 위해 Chunk를 독립적으로 처리하여 여러 개의 ‘Chunk를 병렬로 처리’
- 병렬 처리를 통해 처리 속도를 높일 수 있다는 장점이 있습니다.
- 예를 들어, 여러 대의 서버에서 동시에 작업을 처리해야 할 때 사용됨
💡 Parallel Chunk 수행 과정
1. 데이터를 적절한 크기로 분할
2. 분할된 각각의 부분을 병렬 처리할 수 있도록 작업을 분배
3. 각각의 부분을 병렬 처리
4. 처리된 결과를 다시 합침
Remote Chunking 방식
- 여러 대의 서버에서 대용량 데이터 처리를 수행할 때 사용
- 서버 간에 데이터를 공유하고, 각각의 서버에서 병렬로 처리
참고 블로그:
[Java] Spring Boot Batch 이해하고 설정하기 -1 : 정의 및 이해
해당 글에서는 Spring Boot Batch에 대해서 이해하고 주요 용어인 Job, Step, Tasklet, Chunk에 대해서 이해를 돕기 위해서 작성한 글입니다. 1) Spring Boot Batch 💡 Spring Boot Batch 란? - 대량의 데이터를 처리하
adjh54.tistory.com
'Spring Boot' 카테고리의 다른 글
@RequestParam Enum 값 받기 (1) | 2023.11.11 |
---|---|
JUnit과 Mockito 기반의 Spring 단위 테스트 코드 작성 방법 (1) | 2023.08.20 |
단위 테스트(Unit Test)와 통합 테스트 (0) | 2023.08.20 |
API 예외 처리 (0) | 2023.07.12 |
서블릿 필터, 스프링 인터셉터 (0) | 2023.07.10 |