Dev/Spring

Spring Batch

호나우지규 2021. 9. 24. 09:53

배치 원칙 및 가이드

  1. 일반적으로 같은 서비스 환경에서 동작하는 서비스와 배치는 서로에게 영향을 미칠 수 있기 때문에 배치와 서비스에 영향을 최소화 할 수 있도록 구조와 환경에 맞게 디자인해야 함.
  2. 배치 어플리케이션 내에세 가능ㅇ한한 복잡한 로직은 피하고 단순하게 설계해야 함.
  3. 데이터 처리하는 곳과 데이터의 저장소는 물리적으로 가능한한 가까운 곳에 위치하도록 함.
  4. 데이터 베이스 I/O, 네트워크 I/O, 파일 I/O 등의 시스템 리소스의 사용을 최소화 하고 최대한 많은 데이터를 메모리 위에서 처리하도록 함.
  5. 처리 시간이 많이 걸리는 작업을 시작하기 전에 메모리 재할당에 소모되는 시간으르 피하기 위해 충분한 메모리를 할당함.
  6. 데이터 무결성을 위해서 적절한 검사 및 기록하는 코드를 추가함.

 

스프링 배치는 비즈니스 로직만 작성한다고 정상적으로 실행되지 않음.

스프링 배치에서는 작업을 수행하면서 일련의 상태에 관한 메타 데이터들을 메타 테이블에 저장해서 실패한 작업에 대한 기록을 남겨 실패에 대한 대비를 준비할 수 있게 도와주는 역할을 하게 됨.

 

  • Job : 배치 처리과정을 하나의 단위로 만들어 표현한 객체이고 여러 Step 인스턴스를 포함하는 컨테이너
  • Step : 실질적인 배치 처리를 정의하고 제어 하는데 필요한 모든 정보가 있는 도메인 객체
  • Tasklet : Step안에서 수행될 비즈니스 로직 전략의 인터페이스

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

 

@Scheduiled 어노테이션을 이용하여 일정한 주기마다 작성한 Job 실행되도록 설정 가능

 

출처 : https://deeplify.dev/back-end/spring/batch-tutorial