Spring Batch ‐ FlatFileItemWriter - dnwls16071/Backend_Summary GitHub Wiki

📚 Spring Batch ‐ FlatFileItemWriter

  • 데이터를 플랫 파일 형식으로 쓰는 작업을 담당한다

필드 추출 : 도메인 객체에서 필드를 추출하는 역할

public interface FieldExtractor<T> {
    Object[] extract(T item);
}

문자열 결합 : FieldExtractor에서 추출한 데이터들을 하나의 문자열로 결합하는 역할

public interface LineAggregator<T> {
    String aggregate(T item);
}

📚 Spring Batch ‐ FlatFileItemWriter의 롤백 전략: 버퍼링을 통한 안전한 파일 쓰기

  • DB와 달리 파일은 이미 쓰여진 데이터를 롤백할 수 없다는 문제가 있다.
  • 이 문제를 해결하기 위해 FlatFileItemWriter는 데이터를 즉시 파일에 쓰지 않고 내부 버퍼에 일시적으로 저장해둔다.
  • 이 후 청크 처리가 정상적으로 완료되어 트랜잭션이 커밋되려고 할 때, 즉 beforeCommit() 콜백이 호출될 때 비로소 버퍼의 데이터를 파일에 쓴다.

📚 Spring Batch ‐ 파일 쓰기와 OS 캐시: forceSync 옵션

  • OS는 성능을 위해 매번 디스크에 직접 쓰지 않고 메모리 캐시에 데이터를 먼저 저장한다.
  • 디스크 I/O는 비용이 크기 때문이다.
  • 그러나 이로 인해 OS가 갑자기 중단되면 캐시의 데이터가 디스크에 쓰이지 못하고 유실될 수 있다.
  • FlatFileItemWriterBuilder는 이러한 동작을 개발자가 손쉽게 제어할 수 있도록 forceSync() 메서드를 제공한다.
  • 이 값을 true로 설정하면 캐시가 아닌 디스크에 즉시 동기화되어 OS 중단이나 파일 시스템 문제가 발생해도 데이터 손실 위험이 줄어든다.
  • 다만 잦은 동기화로 인해 성능 저하가 발생할 수 있다는 점을 기억하자. 기본값은 false이다.

📚 FlatFileItemWriter 관련 공식문서 레퍼런스