[Spring] Spring Batch 꿀팁 노트 - 1

민스킴·2024년 8월 30일
0

Spring

목록 보기
12/12
post-thumbnail

개요

회사에서 곧 투입 될 프로젝트에서 스프링 배치를 사용한 배치 작업을 맡게 될 것이라고 하셔서 공부를 시작하게 되었다.

대용량 데이터를 처리하기 위해 안정성 있는 프레임 워크로 Spring Batch를 많이 사용하는 것 같다.

공부하면서 배운 내용을 기록용으로 적어보려고 한다. 따라서 spring batch에 관련된 기본 내용들은 생략한다.

@JobScope, @StepScope 그리고 Late Binding

@JobScope와 @StepScope를 사용하면 스프링 컨테이너가 빈을 등록하는 시점이 아닌, 실행하는 시점에 빈이 생성됩니다.
이를 Late Binding이라고 하는데, 늦은 바인딩 또는 동적 바인딩이라고 부릅니다.

왜 동적 바인딩을 사용하나요?

그거야 다 장점이 있기 때문입니다.

  1. 스프링 컨테이너에는 프록시 객체를 등록하고, 필요한 시점에 빈을 생성해서 프록시 객체에 설정하기 때문에 리소스를 절약할 수 있습니다.

  2. JobParameter를 특정 메서드가 실행하는 시점까지 지연시켜 할당할 수 있습니다. 따라서 비즈니스 로직이 실행되는 시점에 JobParameter를 할당하고 동적으로 빈으로 생성하기에 유연한 설계가 가능합니다.

JobParameters 주의사항

JobParameters는 @Value를 통해서 사용 주입합니다. 따라서 빈으로 등록되어 있어야 하고, @JobScope 또는 @StepScope를 사용해서 동적 바인딩 되어야 합니다.

BATCH_JOB_EXECUTION

JOB_EXECUTION와 JOB_INSTANCE는 부모-자식 관계입니다.
JOB_EXECUTION은 부모인 JOB_INSTANCE가 성공/실패했던 모든 내역을 갖고 있습니다.

여기서 재밌는 점은 동일한 Job Paramenter로 2번 이상 실행한 내역이 저장될 수 있다는 것입니다.
Job Instance는 Job Parameter로 식별되기 때문에 같은 Parameter로 중복 실행이 불가능하다고 했는데 어찌된 일이죠?

이유는 Spring Batch가 동일한 Job Parameter로 성공한 기록일 있을 때만 재수행이 안된다는 것 입니다.

나만 알아보는 Job Flow 메모

빨간색 : Job 구간 (어떤 step 실행하나)
파란색 : 조건 구간 (어떤 조건의 분기점)
초록색 : Flow 구간 (어떤 step들의 흐름)

profile
Boys, be ambitious!

0개의 댓글