Skip to content

Spring Batch ‐ FlatFileItemWriter

woo jin edited this page Nov 8, 2025 · 2 revisions

📚 Spring Batch ‐ FlatFileItemWriter

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

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

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

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

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

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

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

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

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

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

📖 Java

📖 Kotlin

📖 Coroutine

📖 Spring

📖 Spring Security

📖 Spring Batch

📖 Reactive Programming

📖 Database

📖 MySQL

📖 Redis

📖 JPA

📖 QueryDsl

📖 MSA

📖 Kafka

📖 Apache Flink

  • [Apache Flink - Apache Flink Architecture]
  • [Apache Flink - Stream Processing]
  • [Apache Flink - Data Stream API & Window]
  • [Apache Flink - State Management]

📖 HTTP

📖 AWS

📖 Docker

📖 Kubernetes

📖 CI/CD

📖 Nginx

📖 Monitoring🥈

  • [Monitoring - Log Concept]
  • [Monitoring - Log Level & Filter]
  • [Monitoring - Logback]
  • [Monitoring - Log Collection with ELK Stack]
  • [Monitoring - Log Monitoring with Kibana]
  • [Monitoring - Building a Monitoring System with Spring Boot Actuator]
  • [Monitoring - Server Monitoring with Prometheus and Grafana with Discord Alerts]

📖 Test

📖 Effective Java 3/E

📖 Kotlin Academy - Effective Kotlin

📖 Kotlin Academy - 핵심편

📖 스프링으로 시작하는 리액티브 프로그래밍

📖 가상 면접 사례로 배우는 대규모 시스템 설계 기초 1

📖 가상 면접 사례로 배우는 대규모 시스템 설계 기초 2

📖 Clean Code

📖 리팩토링 2판

📖 주니어 백엔드 개발자가 반드시 알아야 할 실무 지식

📖 GraphQL

Clone this wiki locally