·스프링 배치(Spring Batch)는 대용량 처리와 반복적인 작업을 수행하는데 사용되는 자바 및 스프링 기반으로 프레임워크입니다.
🤔 스프링 배치를 사용하는 이유는 무엇일까요?
1. 대용량 데이터 처리 : 스프링 배치는 대용량 데이터 처리에 특화되어 있습니다. 대용량 데이터를 일괄적으로 읽고(Read), 처리(Process), 쓰기(Write)가 가능합니다.
👉 처리와 쓰기에는 데이터 가공 로직이 포함될 수 있습니다.
2. 반복 작업 자동화 : 스프링 배치는 주기적으로 실행되는 반복적인 작업을 자동화할 수 있습니다.
3. 트랜잭션 : 스프링 배치는 트랜잭션 관리를 지원하기 때문에 안정적인 데이터 처리를 보장할 수 있습니다. 장애 발생 및 프로그램 중단 상황에서도 작업의 일관성을 유지할 수 있습니다.
4. 장애 복구 : 스프링 배치는 장애 및 프로그램 중단 이후 실패한 작업(Job)을 재시작할 수 있는 기능을 제공합니다. 이를 통해 시스템의 안정성을 향상시킬 수 있습니다.
5. 모니터링 및 관리 : 스프링 배치는 작업의 모니터링 및 관리를 위한 다양한 기능을 제공하고 있습니다.
🤔 스프링 배치의 대표 작업 3가지
- Read : 데이터를 읽어오는 작업을 수행합니다. 외부시스템(데이터베이스, 파일, 큐 등)에서 데이터를 읽어옵니다.
- FlatFileItemReader : 텍스트 파일을 읽으며, 각 라인은 하나의 아이템으로 처리됩니다.
- JdbcCursorItemReader : JDBC를 사용해서 DB 데이터를 읽으며. 커서를 이용하므로 대용량 데이터 처리에 적합합니다.
- JpaPagingItemReader : JPA를 사용해서 DB 데이터를 읽으며, 페이징을 사용하여 대용량 데이터를 효율적으로 처리할 수 있습니다.
- JmsItemRader : JMS(Java Message Service)를 사용하여 메시지 큐에서 데이터를 읽어오며, 메시지 큐에 들어있는 메시지를 하나씩 읽어올 수 있습니다.
- IteemReaderAdapter : 사용자 정의 Reader를 스프링 배치의 ItemReader 인터페이스와 연결해주는 어댑터 입니다. 기존 Reader를 재사용할 때 유용합니다.
- StoredProcedureItemReader : 저장 프로시저를 사용하여 DB 데이터를 읽어옵니다.
- MultiResourceitemReader : 여러 개의 리소스(파일 등)에서 데이터를 읽어옵니다.
- Process : 읽어온 데이터를 가공하거나 변환합니다.
- Writer : 가공된 데이터를 쓰거나 저장합니다. 이 단계에서는 DB 테이블에 데이터를 저장하거나, 파일로 출력하거나, 메시지를 저장하는 등의 작업을 수행합니다.
- JdbcBatchItemWriter : JDBC를 사용하여 데이터를 DB에 저장합니다.
- FlatFileItemWriter : 텍스트 파일에 데이터를 쓰는 Writer 입니다. CSV, XML, JSON 등 다양한 형식의 파일을 생성할 수 있습니다.
- JpaItemWriter : JPA를 사용하여 DB에 저장합니다.
- CompositeItemWriter : 여러 개의 Writer를 조합하여 사용할 수 있습니다.
- MultiResourceItemWriter : 여러 개의 리소스(파일 등)를 사용할 수 있습니다.
- ItemWriterAdapter : 사용자 정의 Writer를 스프링 배치의 ItemWriter 인터페이스와 연결해주는 어댑터입니다.
🤔 스프링 배치의 아키텍처
- Application : 이 모듈은 스프링 배치 어플리캐이션이라고도 하며 스프링 프레임워크를 기반으로 하는 배치 어플리케이션을 개발하는데 필요한 기능들을 제공합니다. 이 모듈은 배치 작업의 구성, 실행, 모니터링, 관리 등의 기능을 제공합니다.
- Batch Core : 이 모듈은 스프링 배치의 핵심 기능을 제공합니다. 이 모듈은 배치 작업의 실행 흐름을 관리하고, 각 단계(Read, Process, Write) 등의 구현체를 포함하고 있습니다. 이를 사용하여 실제 데이터 처리를 수행합니다. 그리고 배치 작업의 잡(Step), 잡 인스턴스(Job Instance), 스텝(Step) 등의 개념을 정의하고 이를 실행하며, 트랜잭션 관리와 예외 처리 등의 기능도 포함합니다.
- Batch Infrastructure : 이 모듈은 스프링 배치 기반 인프라스트럭처를 제공합니다. Reader, Processor, Writer 등의 구현체를 포함하고 있으며, 이를 사용해서 실제 데이터 처리를 수행합니다. 또한 트랜잭션 관리, 데이터 엑세스, 메시지 등의 기능도 제공합니다.