본문 바로가기
스프링/Batch

백만 건 데이터도 끄떡없다! Spring Batch를 써야 하는 진짜 이유 (Chunk 지향 처리)

by 공부 안하고 싶은 사람 2026. 3. 9.
반응형
Batch Processing Masterclass

대규모 데이터의 안정적 처리,
Spring Batch로 완성하기

안녕하세요, code-resting입니다. 매달 수십만 명의 사용자에게 정산 메일을 보내거나, 매일 밤 대량의 로그 데이터를 집계해야 한다면 어떻게 하시겠습니까? 일반적인 API 요청 처리 방식으로 접근했다가는 OutOfMemoryError를 만나기 십상입니다. 오늘은 대용량 데이터를 안전하고 효율적으로 처리하는 Spring Batch를 파헤쳐 봅니다.

1. 스케줄러와 배치는 다릅니다

많은 주니어 개발자들이 Quartz나 @Scheduled를 배치와 혼동하곤 합니다. 하지만 이들은 실행 '시점'을 결정할 뿐, '데이터 처리' 방식에 대해서는 고민하지 않습니다.

  • 🕒 Scheduler: 정해진 시간에 특정 작업을 실행 (언제 실행할 것인가?)
  • ⚙️ Batch: 대량의 데이터를 안정적으로 읽고, 가공하고, 저장 (어떻게 효율적으로 처리할 것인가?)

2. 핵심 원리: Chunk 지향 프로세싱

Spring Batch의 가장 큰 특징은 데이터를 청크(Chunk) 단위로 쪼개어 처리한다는 점입니다. 100만 건의 데이터를 1,000건씩 묶어서 처리하면, 중간에 에러가 나더라도 해당 청크만 롤백하면 됩니다.

  • ItemReader: DB나 파일에서 데이터를 한 건씩 읽어옵니다.
  • ItemProcessor: 읽어온 데이터를 비즈니스 로직에 맞게 가공합니다. (Optional)
  • ItemWriter: Chunk 단위로 쌓인 데이터를 한꺼번에 DB에 씁니다. (Bulk Insert 효과)

3. Spring Batch가 강력한 이유

  1. 재시작 가능성(Restartability): 실패한 지점부터 다시 시작할 수 있는 메타데이터 관리 기능을 제공합니다.
  2. 로깅 및 통계: 얼마나 성공했는지, 실패한 원인은 무엇인지 별도의 테이블(Job Repository)에 자동으로 기록합니다.
  3. 병렬 처리: Multi-threaded Step이나 Partitioning을 통해 대량 작업을 순식간에 끝낼 수 있습니다.

4. Reader 선택의 기술: Paging vs Cursor

배치 성능의 80%는 데이터를 읽어오는 방식에서 결정됩니다.

방식 특징 장점
JdbcCursorItemReader DB와 연결을 유지하며 스트리밍 메모리 사용 최적화, 속도 빠름
JpaPagingItemReader 페이지 단위로 끊어서 SELECT 멀티 스레드 환경에서 안전

💡 결론

단순히 코드가 동작하는 것을 넘어, **장애에 견고(Resilient)**하고 **추적이 가능(Traceable)**한 배치를 만드는 것이 시니어 개발자의 역량입니다. 수만 건 이상의 데이터를 다룬다면, 고민하지 말고 Spring Batch를 도입하세요.

© 2026 code-resting. All rights reserved.
내일은 '효율적인 객체 매핑을 위한 MapStruct vs ModelMapper'를 다뤄봅니다!

반응형

'스프링 > Batch' 카테고리의 다른 글

Spring Batch  (0) 2021.06.28
@Scheduled 핸들러  (0) 2021.06.04

댓글