Spring Batch - ItemWriter

출처

목차

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 {

public void open(Serializable checkpoint) throws Exception;

public void close() throws Exception;

public void writeItems(List<Object> items) throws Exception;

public Serializable checkpointInfo() throws Exception;
}

ItemWriter 구현체

JdbcBatchItemWriter

JdbcBatchItemWriter는 Spring Batch 프레임워크에서 제공하는 ItemWriter 인터페이스를 구현한 클래스 중 하나입니다. JDBC 데이터베이스와 상호 작용하는 데 사용됩니다.

이 ItemWriter는 여러 개의 항목을 받아서 배치 작업으로 일괄 처리할 수 있습니다. 일괄 처리는 내부적으로 트랜잭션으로 묶여 처리되므로 모든 항목이 성공적으로 쓰여지거나 모든 항목이 롤백됩니다.

JdbcBatchItemWriter는 다음과 같은 방식으로 작동합니다.

  1. 쓰기 전용 연결을 가져옵니다.
  2. 모든 항목을 배치로 그룹화합니다.
  3. 배치 내의 모든 항목을 PreparedStatementSetter를 사용하여 PreparedStatement 객체에 매핑합니다.
  4. PreparedStatement 객체를 실행합니다.
  5. 결과를 확인하고 배치 작업 내의 모든 항목이 성공적으로 처리되었는지 확인합니다.
  6. 결과를 반환하고 쓰기 전용 연결을 반환합니다.

JdbcBatchItemWriter는 대량의 데이터를 처리해야하는 경우 유용합니다. 이를 통해 데이터베이스 작업 수를 줄이고 성능을 높일 수 있습니다.

JpaItemWriter

paItemWriter는 Spring Batch 프레임워크에서 제공하는 ItemWriter 인터페이스를 구현한 클래스 중 하나입니다. JPA(Java Persistence API)를 사용하여 객체를 데이터베이스에 쓰는 데 사용됩니다.

이 ItemWriter는 여러 개의 항목을 받아서 배치 작업으로 일괄 처리할 수 있습니다. 일괄 처리는 내부적으로 트랜잭션으로 묶여 처리되므로 모든 항목이 성공적으로 쓰여지거나 모든 항목이 롤백됩니다.

JpaItemWriter는 다음과 같은 방식으로 작동합니다.

  1. 쓰기 전용 EntityManager를 가져옵니다.
  2. 모든 항목을 배치로 그룹화합니다.
  3. 배치 내의 모든 항목을 EntityManager를 사용하여 영속화합니다.
  4. EntityManager의 flush() 메서드를 호출하여 변경 사항을 데이터베이스에 적용합니다.
  5. 결과를 확인하고 배치 작업 내의 모든 항목이 성공적으로 처리되었는지 확인합니다.
  6. 결과를 반환하고 쓰기 전용 EntityManager를 반환합니다.

JpaItemWriter는 JPA를 사용하여 객체를 데이터베이스에 쓰는 데 유용합니다. 이를 통해 객체 그래프를 쉽게 저장할 수 있고, 복잡한 쿼리 작성을 피할 수 있습니다. 또한 JPA의 일관성과 트랜잭션 관리 기능을 활용할 수 있습니다.

FlatFileItemWriter

FlatFileItemWriter는 Spring Batch 프레임워크에서 제공하는 ItemWriter 인터페이스를 구현한 클래스 중 하나입니다. 이 클래스는 CSV, TSV, 고정 너비 파일 등과 같은 평면 파일을 생성하는 데 사용됩니다.

FlatFileItemWriter는 데이터를 출력할 파일 이름 및 위치, 필드 구분자, 줄 바꿈 문자 등 출력 파일의 형식을 지정할 수 있는 다양한 설정 옵션을 제공합니다. 이 클래스는 또한 ItemWriter 인터페이스의 write() 메서드를 구현하여 ItemReader에서 읽은 데이터를 출력 파일에 쓰는 데 사용됩니다.

FlatFileItemWriter를 사용하려면 다음과 같은 단계를 수행해야 합니다.

  1. FlatFileItemWriter를 구성합니다. 이 구성 단계에서는 출력 파일의 이름, 위치, 필드 구분자, 줄 바꿈 문자 등 출력 파일의 형식을 지정합니다.
  2. ItemReader에서 데이터를 읽어와 ItemProcessor에서 처리합니다.
  3. FlatFileItemWriter.write() 메서드를 호출하여 처리된 데이터를 출력 파일에 씁니다. 이 메서드는 쓰기 작업을 버퍼링하고, 일정한 크기가 될 때마다 출력 파일에 씁니다.
  4. 쓰기 작업이 완료되면 FlatFileItemWriter.close() 메서드를 호출하여 출력 파일을 닫습니다.

FlatFileItemWriter는 대용량 데이터 파일을 생성하는 데 적합합니다. 이를 통해 파일 생성 및 처리 속도를 높일 수 있습니다.

StaxEventItemWriter

StaxEventItemWriter는 Spring Batch 프레임워크에서 제공하는 ItemWriter 인터페이스를 구현한 클래스 중 하나입니다. 이 클래스는 XML 형식으로 데이터를 출력하는 데 사용됩니다.

StaxEventItemWriter는 StAX(Streaming API for XML)를 사용하여 XML 문서를 생성합니다. 이 클래스는 XML 스트림을 작성하는 데 필요한 설정을 제공합니다. 예를 들어 출력 파일 이름, 루트 엘리먼트 이름, 네임스페이스 등을 지정할 수 있습니다.

StaxEventItemWriter를 사용하려면 다음과 같은 단계를 수행해야 합니다.

  1. StaxEventItemWriter를 구성합니다. 이 구성 단계에서는 출력 파일 이름, 루트 엘리먼트 이름, 네임스페이스 등을 지정합니다.
  2. ItemReader에서 데이터를 읽어와 ItemProcessor에서 처리합니다.
  3. StaxEventItemWriter.write() 메서드를 호출하여 처리된 데이터를 XML 형식으로 출력 파일에 씁니다. 이 메서드는 쓰기 작업을 버퍼링하고, 일정한 크기가 될 때마다 출력 파일에 씁니다.
  4. 쓰기 작업이 완료되면 StaxEventItemWriter.close() 메서드를 호출하여 출력 파일을 닫습니다.

StaxEventItemWriter는 대용량 XML 파일을 생성하는 데 적합합니다. 이를 통해 파일 생성 및 처리 속도를 높일 수 있습니다. 또한, StaxEventItemWriter는 다른 XML 라이브러리보다 메모리 사용량이 적으며, 대규모 XML 문서를 처리하는 데 최적화되어 있습니다.

JmsItemWriter

JmsItemWriter는 Spring Batch 프레임워크에서 제공하는 ItemWriter 인터페이스를 구현한 클래스 중 하나입니다. 이 클래스는 Java Messaging Service(JMS)를 사용하여 메시지를 보내는 데 사용됩니다.

JmsItemWriter는 JMS 목적지를 구성하는 데 필요한 설정을 제공합니다. 예를 들어 연결 팩토리, 목적지 이름, 전송 모드 등을 지정할 수 있습니다.

JmsItemWriter를 사용하려면 다음과 같은 단계를 수행해야 합니다.

  1. JmsItemWriter를 구성합니다. 이 구성 단계에서는 연결 팩토리, 목적지 이름, 전송 모드 등을 지정합니다.
  2. ItemReader에서 데이터를 읽어와 ItemProcessor에서 처리합니다.
  3. JmsItemWriter.write() 메서드를 호출하여 처리된 데이터를 JMS 메시지로 보냅니다.
  4. 쓰기 작업이 완료되면 JmsItemWriter.close() 메서드를 호출하여 JMS 리소스를 닫습니다.

JmsItemWriter는 대용량 메시지를 처리하는 데 적합합니다. 이를 통해 메시지 전송 속도를 높일 수 있습니다. 또한, JmsItemWriter는 JMS 기반 시스템과 연동하여 데이터를 전송하는 데 유용합니다.

Share