Skip to content

sjh9391985/spring-batch-example

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

spring-batch-example

스프링 배치란?

  • batch processing: 일괄처리라는 의미를 가짐. 일련의 작업을 정해진 로직으로 수행하는 것.

    • 일괄 처리가 필요한 경우
      1. 대용량 비즈니스 데이터를 복잡한 작업으로 처리해야하는 경우
      2. 특정 시점에 스케줄러를 통해 자동화된 작업이 필요한 경우(ex. 알림, 월 별 리포트 등등…)
      3. 대용량 데이터의 포맷을 변경, 유효성 검사 등의 작업을 트랜잭션 안에서 처리 후 기록해야하는 경우



배치의 일반적인 사용 시나리오

DB, 파일 또는 큐에서 데이터 읽기

데이터를 정의한 방식으로 처리

처리된 데이터를 데이터 쓰기

  • 스프링 배치는 사용자 상호작용 없이 반복적으로 데이터를 트랜잭션 단위로 처리할 수 있도록 구현되어 있음.

  • 개발자는 데이터 처리에 대한 비즈니스 로직에만 집중하여 배치 프로세스를 작성가능.



스프링 배치가 제공하는 비즈니스 시나리오

  1. 주기적 배치 프로세스
  2. 동시적 배치 프로세스: 작업 병렬 처리
  3. 단계별 엔터프라이즈 메시지 기반 처리
  4. 대규모 작업에 대한 병렬 배치 프로세스
  5. 실패 후 수동 or 예약 된 재시작
  6. 단계별 순차 처리
  7. 부분 처리: 레코드 건너 뛰기(ex, 롤백)
  8. 배치 작업 처리의 단위가 작은 경우, 기존 저장 프로시저/스크립트가 있는 경우 전체 배치에 대한 트랜잭션 처리



스프링 배치 계층 구조

Application: 개발자가 작성한 모든 배치 작업, 사용자 정의 코드 포함.

Batch Core: 배치 작업을 시작하고 제어하는데 필요한 핵심 런타임 클래스 포함.

Batch Infrastructure: 개발자와 어플리케이션에서 사용하는 일반적인 Reader, Writer 그리고 RetryTemplate과 같은 서비스를 포함.



배치 원칙 및 가이드

일반적으로 같은 서비스 환경에서 동작하는 서비스와 배치는 서로에게 영향을 미칠 수 있기 때문에 배치와 서비스에 영향을 최소화 할 수 있도록 구조와 환경에 맞게 디자인해야함.

배치 어플리케이션 내에서 가능한한 복잡한 로직은 피하고 단순하게 설계해야함.

데이터 처리하는 곳과 데이터의 저장소는 물리적으로 가능한한 가까운 곳에 위치.

데이터 베이스 I/O, 네트워크 I/O, 파일 I/O 등의 시스템 리소스의 사용을 최소화하고 최대한 많은 데이터를 메모리 위에서 처리.

처리 시간이 많이 걸리는 작업을 시작하기 전에 메모리 재할당에 소모되는 시간을 피하기 위해 충분한 메모리를 할당.

데이터 무결성을 위해서 적절한 검사 및 기록하는 코드를 추가.

일반적으로 스프링 배치는 대용량 데이터를 다루는 경우가 많아서 Tasklet보다 상대적으로 트랜잭션의 단위를 짧게 하여 처리할 수 있는 Reader, Proccessor, Writer를 이용한 Chunk 지향 프로세싱을 이용함.