출처
- 해당 포스트는 정수원 강사님의 스프링 배치 - Spring Boot 기반으로 개발하는 Spring Batch 강의를 바탕으로 작성 됐습니다.
목차
- Spring Batch - ItemWriter
- Spring Batch - ItemProcessor
- Spring Batch - ItemReader
- Spring Batch - ChunkProvider 와 ChunkProcessor
- Spring Batch - ChunkOrientedTasklet
- Spring Batch - Chunk 기반 Step
- Spring Batch - 24. FlowJob
- Post not found: spring/spring-batch/tasklet/spring-batch-23-JobStep
- Spring Batch - 22. Tasklet 기반 Step
- Spring Batch - 21. TaskletStep
- Spring Batch - 20. StepBuilderFactory 와 StepBuilder
- Spring Batch - 19. JobParameters 증가 JobParametersIncrementer
- Spring Batch - 18. Job 의 재시작 방지 preventRestart
- Spring Batch - 17. JobParameters 검증 JobParametersValidator
- Spring Batch - 16. SimpleJob 와 SimpleJobLauncher
- Spring Batch - 15. JobBuilderFactory & JobBuilder
ItemWriter
ItemWriter는 스텝에서 처리한 데이터를 출력하는 역할을 합니다. ItemWriter는 스텝에서 처리한 모든 데이터를 한 번에 출력하며, 출력 대상은 일반적으로 데이터베이스, 파일 또는 메시징 시스템과 같은 외부 저장소입니다.
ItemWriter는 일반적으로 데이터베이스에 대한 INSERT, UPDATE 또는 DELETE 쿼리를 실행하거나, 파일에 대한 출력을 수행하거나, 메시징 시스템의 큐 또는 주제에 데이터를 전송하는 데 사용됩니다.
Spring Batch는 다양한 유형의 ItemWriter를 제공합니다. 일반적으로 사용되는 ItemWriter 유형은 다음과 같습니다.
- JdbcBatchItemWriter: JDBC를 사용하여 데이터베이스에 대한 배치 INSERT, UPDATE 또는 DELETE 쿼리를 실행하는 데 사용됩니다.
- JpaItemWriter: JPA를 사용하여 데이터를 저장하는 데 사용됩니다.
- FlatFileItemWriter: CSV, 고정 길이 또는 구분 기호로 구분된 파일에 데이터를 씁니다.
- StaxEventItemWriter: XML 형식으로 데이터를 씁니다.
- JmsItemWriter: JMS 대기열에 데이터를 전송합니다.
ItemWriter 인터페이스
public interface ItemWriter { |
ItemWriter 구현체
JdbcBatchItemWriter
JdbcBatchItemWriter는 Spring Batch 프레임워크에서 제공하는 ItemWriter 인터페이스를 구현한 클래스 중 하나입니다. JDBC 데이터베이스와 상호 작용하는 데 사용됩니다.
이 ItemWriter는 여러 개의 항목을 받아서 배치 작업으로 일괄 처리할 수 있습니다. 일괄 처리는 내부적으로 트랜잭션으로 묶여 처리되므로 모든 항목이 성공적으로 쓰여지거나 모든 항목이 롤백됩니다.
JdbcBatchItemWriter는 다음과 같은 방식으로 작동합니다.
- 쓰기 전용 연결을 가져옵니다.
- 모든 항목을 배치로 그룹화합니다.
- 배치 내의 모든 항목을 PreparedStatementSetter를 사용하여 PreparedStatement 객체에 매핑합니다.
- PreparedStatement 객체를 실행합니다.
- 결과를 확인하고 배치 작업 내의 모든 항목이 성공적으로 처리되었는지 확인합니다.
- 결과를 반환하고 쓰기 전용 연결을 반환합니다.
JdbcBatchItemWriter는 대량의 데이터를 처리해야하는 경우 유용합니다. 이를 통해 데이터베이스 작업 수를 줄이고 성능을 높일 수 있습니다.
JpaItemWriter
paItemWriter는 Spring Batch 프레임워크에서 제공하는 ItemWriter 인터페이스를 구현한 클래스 중 하나입니다. JPA(Java Persistence API)를 사용하여 객체를 데이터베이스에 쓰는 데 사용됩니다.
이 ItemWriter는 여러 개의 항목을 받아서 배치 작업으로 일괄 처리할 수 있습니다. 일괄 처리는 내부적으로 트랜잭션으로 묶여 처리되므로 모든 항목이 성공적으로 쓰여지거나 모든 항목이 롤백됩니다.
JpaItemWriter는 다음과 같은 방식으로 작동합니다.
- 쓰기 전용 EntityManager를 가져옵니다.
- 모든 항목을 배치로 그룹화합니다.
- 배치 내의 모든 항목을 EntityManager를 사용하여 영속화합니다.
- EntityManager의 flush() 메서드를 호출하여 변경 사항을 데이터베이스에 적용합니다.
- 결과를 확인하고 배치 작업 내의 모든 항목이 성공적으로 처리되었는지 확인합니다.
- 결과를 반환하고 쓰기 전용 EntityManager를 반환합니다.
JpaItemWriter는 JPA를 사용하여 객체를 데이터베이스에 쓰는 데 유용합니다. 이를 통해 객체 그래프를 쉽게 저장할 수 있고, 복잡한 쿼리 작성을 피할 수 있습니다. 또한 JPA의 일관성과 트랜잭션 관리 기능을 활용할 수 있습니다.
FlatFileItemWriter
FlatFileItemWriter는 Spring Batch 프레임워크에서 제공하는 ItemWriter 인터페이스를 구현한 클래스 중 하나입니다. 이 클래스는 CSV, TSV, 고정 너비 파일 등과 같은 평면 파일을 생성하는 데 사용됩니다.
FlatFileItemWriter는 데이터를 출력할 파일 이름 및 위치, 필드 구분자, 줄 바꿈 문자 등 출력 파일의 형식을 지정할 수 있는 다양한 설정 옵션을 제공합니다. 이 클래스는 또한 ItemWriter 인터페이스의 write() 메서드를 구현하여 ItemReader에서 읽은 데이터를 출력 파일에 쓰는 데 사용됩니다.
FlatFileItemWriter를 사용하려면 다음과 같은 단계를 수행해야 합니다.
- FlatFileItemWriter를 구성합니다. 이 구성 단계에서는 출력 파일의 이름, 위치, 필드 구분자, 줄 바꿈 문자 등 출력 파일의 형식을 지정합니다.
- ItemReader에서 데이터를 읽어와 ItemProcessor에서 처리합니다.
- FlatFileItemWriter.write() 메서드를 호출하여 처리된 데이터를 출력 파일에 씁니다. 이 메서드는 쓰기 작업을 버퍼링하고, 일정한 크기가 될 때마다 출력 파일에 씁니다.
- 쓰기 작업이 완료되면 FlatFileItemWriter.close() 메서드를 호출하여 출력 파일을 닫습니다.
FlatFileItemWriter는 대용량 데이터 파일을 생성하는 데 적합합니다. 이를 통해 파일 생성 및 처리 속도를 높일 수 있습니다.
StaxEventItemWriter
StaxEventItemWriter는 Spring Batch 프레임워크에서 제공하는 ItemWriter 인터페이스를 구현한 클래스 중 하나입니다. 이 클래스는 XML 형식으로 데이터를 출력하는 데 사용됩니다.
StaxEventItemWriter는 StAX(Streaming API for XML)를 사용하여 XML 문서를 생성합니다. 이 클래스는 XML 스트림을 작성하는 데 필요한 설정을 제공합니다. 예를 들어 출력 파일 이름, 루트 엘리먼트 이름, 네임스페이스 등을 지정할 수 있습니다.
StaxEventItemWriter를 사용하려면 다음과 같은 단계를 수행해야 합니다.
- StaxEventItemWriter를 구성합니다. 이 구성 단계에서는 출력 파일 이름, 루트 엘리먼트 이름, 네임스페이스 등을 지정합니다.
- ItemReader에서 데이터를 읽어와 ItemProcessor에서 처리합니다.
- StaxEventItemWriter.write() 메서드를 호출하여 처리된 데이터를 XML 형식으로 출력 파일에 씁니다. 이 메서드는 쓰기 작업을 버퍼링하고, 일정한 크기가 될 때마다 출력 파일에 씁니다.
- 쓰기 작업이 완료되면 StaxEventItemWriter.close() 메서드를 호출하여 출력 파일을 닫습니다.
StaxEventItemWriter는 대용량 XML 파일을 생성하는 데 적합합니다. 이를 통해 파일 생성 및 처리 속도를 높일 수 있습니다. 또한, StaxEventItemWriter는 다른 XML 라이브러리보다 메모리 사용량이 적으며, 대규모 XML 문서를 처리하는 데 최적화되어 있습니다.
JmsItemWriter
JmsItemWriter는 Spring Batch 프레임워크에서 제공하는 ItemWriter 인터페이스를 구현한 클래스 중 하나입니다. 이 클래스는 Java Messaging Service(JMS)를 사용하여 메시지를 보내는 데 사용됩니다.
JmsItemWriter는 JMS 목적지를 구성하는 데 필요한 설정을 제공합니다. 예를 들어 연결 팩토리, 목적지 이름, 전송 모드 등을 지정할 수 있습니다.
JmsItemWriter를 사용하려면 다음과 같은 단계를 수행해야 합니다.
- JmsItemWriter를 구성합니다. 이 구성 단계에서는 연결 팩토리, 목적지 이름, 전송 모드 등을 지정합니다.
- ItemReader에서 데이터를 읽어와 ItemProcessor에서 처리합니다.
- JmsItemWriter.write() 메서드를 호출하여 처리된 데이터를 JMS 메시지로 보냅니다.
- 쓰기 작업이 완료되면 JmsItemWriter.close() 메서드를 호출하여 JMS 리소스를 닫습니다.
JmsItemWriter는 대용량 메시지를 처리하는 데 적합합니다. 이를 통해 메시지 전송 속도를 높일 수 있습니다. 또한, JmsItemWriter는 JMS 기반 시스템과 연동하여 데이터를 전송하는 데 유용합니다.