스프링 배치와 배치 프로그램에 대한 개념 위주로 서술한 글입니다.
🪄 이런 분들이 읽으면 좋아요!
- 배치 프로그램이 뭔지 몰라요
- 스프링 배치를 처음 들어봤어요
Batch
배치 프로그램이란?
배치 프로그램은 대량의 데이터를 정해진 주기나 조건에 따라 자동으로 처리하는 프로그램입니다. 웹 애플리케이션처럼 사용자가 요청을 보냈을 때 바로 요청을 처리하는 것이 아니라, 요청을 일괄적으로 묶어서 한 번에 처리(batch)합니다.
배치 프로그램은 반복적인 작업 처리를 해야 할 때 쓰입니다. 예를 들어 매일 새벽마다 데이터를 백업하거나, 매주 특정 시간에 보고서를 생성하는 등의 작업을 배치 프로그램을 통해 처리합니다.
또한 배치 프로그램은 백그라운드에서 실행되기 때문에 사용자가 실시간으로 신경쓰고 있지 않아도 시스템이 뒤에서 작업을 합니다.
배치 프로그램과 스케쥴러
위 개념을 보고 배치 프로그램 = 스케줄러 라고 생각하시는 분들도 계실 것 같습니다. 스케쥴러(Scheduler)는 배치 프로그램과는 다른 개념입니다. 스케줄러는 단순히 작업의 실행 시점을 제어하는 도구입니다. 즉, 특정 시간에 작업을 실행하도록 예약해주는 역할이 스케줄러 입니다.
스케줄러는 배치와는 다르게 작업을 직접 처리하지 않으며, 배치 프로그램과 같은 처리를 담당하는 프로그램을 실행시킵니다.
- 배치 프로그램: 실제로 데이터를 처리하고, 비즈니스 로직을 수행하는 프로그램.
- 스케줄러: 배치 프로그램을 언제 실행할지 결정하는 시스템(예: cron, Quartz Scheduler).
예를 들어, 배치 프로그램은 매일 밤 데이터베이스의 백업을 담당하고, 스케줄러는 이 작업을 매일 밤 12시에 실행되도록 예약하는 역할을 합니다.
Spring Batch
SpringBatch는 대량의 데이터를 효율적으로 처리하기 위한 배치 처리 프레임워크입니다. 주로 ETL(Extract, Transform, Load)작업, 데이터 마이그레이션, 보고서 생성, 대량의 데이터 처리 등에 사용됩니다.
주요 용어
- Job
- Job은 배치 처리의 가장 큰 단위로, 배치 프로그램 자체를 의미합니다.
- 여러 Step으로 구성되며, 각각의 Step은 독립적인 처리 단계입니다.
- 한 번 실행될 때, 정의된 모든 Step을 차례대로 실행합니다.
- Step
- Step은 Job의 구성 요소로, 실제 데이터를 처리하는 단계입니다.
- Reader, Processor, Writer가 하나의 Step을 구성하며, 하나의 Step이 완료된 후 다음 Step으로 넘어갑니다.
- 각 Step은 개별 트랜잭션 단위로 실행됩니다.
- Reader
- Reader는 데이터를 읽어오는 역할을 합니다.
- 일반적으로 파일, 데이터베이스, API 등에서 데이터를 읽어옵니다.
- e.d. ItemReader, FlatFileItemReader, JdbcCursoritemReader
- Processor
- Processor는 Reader에서 읽어노 데이터를 가공하거나 변환하는 역할을 합니다.
- 데이터를 검증하거나, 변환하는 비즈니스 로직을 여기에 포함할 수 있습니다.
- e.d. ItemProcessor
- Writer
- Writer는 처리된 데이터 출력하거나 저장하는 역할을 합니다.
- 데이터베이스에 저장하거나, 파일로 기록하거나, API에 데이터를 전달하는 등의 작업을 합니다.
- e.d. ItemWriter, FlatFileItemWriter, JdbcBatchItemWriter
- Chunk
- Chunk는 데이터를 처리할 때 사용하는 일괄 처리 단위입니다.
- Chunk 기반 처리에서는 데이터를 작은 덩어리로 나누어 처리하여 메모리 효율을 높입니다.
- 예를 들어, 1000건 데이터를 한 번에 처리하는 대신, 10건씩 나누어 처리할 수 있습니다.
- 각 Chunk는 별도의 트랜잭션으로 처리됩니다.
- JobInstance
- JobInstance는 특정 Job에 대한 실행 시도를 나타냅니다.
- 같은 Job이더라도 매번 실행할 때마다 고유한 JobInstance가 생성됩니다.
- JobExecution
- JobExecution은 Job의 실행 상태나 결과를 나타냅니다.
- JobInstance가 실행될 때, 해당 실행에 대한 상세 정보(성공/실패 여부, 실행 시간, 오류 정보 등)를 담고 있습니다.
- JobRepository
- JobRepository는 Job과 Step의 실행 정보를 저장하고 관리하는 저장소입니다.
- Job의 실행 상태, 중단된 지점, 실패한 이유 등 배치 작업의 이력을 관리합니다.
- JobLauncher
- JobLauncher는 Job을 실행하는 인터페이스입니다.
- 주로 외부에서 배치 작업을 트리거할 때 사용합니다.
- e.d. 특정 시간에 스케줄링 된 작업을 실행하거나, 특정 조건에서 수종으로 Job을 실행할 때 JobLauncher를 사용합니다.
- JobParameters
- JobParameters는 Job을 실행할 때 필요한 외부 입력값입니다.
- Job이 실행될 때마다 다른 피라미터가 필요한 경우, JobParameters를 통해 값을 전달할 수 있습니다. 예를 들어, 파일 경로나 특정 날짜 등의 값을 Job에 전달할 때 사용합니다.
- Transaction
- Tranction은 데이터 처리의 일관성과 무결성을 보장하는 단위입니다.
- 하나의 Step에서 발생하는 데이터 읽기, 처리, 쓰기 과정은 트랜잭션으로 처리되며, 오류 발생 시 롤백됩니다.
- Skip
- Skip은 배치 처리 중 특정 예외가 발생했을 때 해당 데이터를 건너뛰는 기능입니다.
- 예를 들어, 데이터 변환 중 일부 데이터에 오류가 발생하더라도 전체 Job이 실패하지 않고, 오류가 발생한 데이터를 건너뛰고 계속해서 나머지 데이터를 처리할 수 있습니다.
- Retry
- Retry는 처리 중 예외가 발생할 경우, 지정된 횟수만큼 재시도를 수행하는 기능입니다.
- 트랜잭션이 실패하면 즉시 종료되지 않고, 설정된 횟수만큼 재시도한 후에도 실패할 경우에만 종료됩니다.
- Partitioning
- Partitioning은 대량의 데이터를 병렬로 처리하기 위해 데이터를 여러 부분으로 나누어 각기 다른 스레드나 프로세스에서 동시에 실행하는 방법입니다.
- 병렬 처리를 통해 성능을 개선할 수 있습니다.
- Scailing
- Scaling은 여러 Step을 병렬로 처리하여 성능을 향상시키는 방법입니다.
- 스레드를 사용하거나 여러 프로세스에서 병렬로 작업을 수행할 수 있습니다.
'Framework > SpringBoot' 카테고리의 다른 글
[Spring] 내가 생각하는 Spring을 하면서 꼭 알아야 하는 개념들 (0) | 2024.05.15 |
---|---|
[SpringBoot] Github Action을 이용한 CI/CD (ElasticBeanstalk) (0) | 2024.04.27 |
[Spring] VO와 BO, DAO, DTO란 무엇인가 (1) | 2024.03.24 |
[SpringBoot3] 스프링부트와 Swagger 연결방법 (0) | 2024.03.21 |
[SpringBoot3] 엔티티 상속관계에서 @Builder 적용 (0) | 2024.03.20 |