인프런 커뮤니티 질문&답변

gurumong님의 프로필 이미지
gurumong

작성한 질문수

스프링 배치

JobInstance

batch 관련 빈들을 proxy 객체로 생성하는 이유가 뭘까요?

작성

·

467

0

안녕하세요
batch 관련 빈들을 proxy 객체로 생성하는 이유가 뭘까요?

@EnableBatchProcessing 어노테이션에 의해 SimpleBatchConfiguration.java 설정이 적용되는데요!
이 설정에서 배치와 관련한 중요 빈들을 생성하는것을 볼 수 있는데

* jobRepository
* jobLauncher
* jobBuilderFactory
* stepBuilderFactory

궁금한점은 이 빈들에 대해 왜 프록시로(createLazyProxy()) 생성하는걸까요?
보통 프록시로 생성되어야 하는 빈들은 빈후처리기에 의해서 필요에 따라 선택되는걸로 알고있거든요
아마도, 빈초기화 시점에 BatchConfigurer.class와 과련이 있어 보이는데, 정확히 알지 못하겠습니다.

답변 1

3

정수원님의 프로필 이미지
정수원
지식공유자

프록시로 생성하는 이유는 여러가지가 있습니다.

createLazyProxy 에서 알 수 있듯이 객체의 생성시점을 런타임 시점으로 지연하기 위한 목적일 수 있습니다.그렇게 되면 특별한 상황에 따라 객체를 전략적으로 변경해서 운영할 수도 있습니다.
즉 전략패턴이라 할 수 있습니다.

또한 프록시 객체에서 실제 객체의 실행 전.후 공통적인 기능을 처리 하기 위한 목적도 있을 수 있습니다.
AOP 라고 할 수 있습니다.

그리고 프록시 객체는 하나의 빈으로 생성하고 실제 객체는 스레드별 혹은 특정한 주체에 따라 독립적인 Target 객체로 개별 생성해서 제어하기 위한 목적일 수도 있습니다.
스레드에 안전한 객체를 만드는 방법 중 하나입니다.

질문하신 것처럼 스프링 배치에서 Proxy 객체로 만든 이유를 정확하게 짚을 수는 없으나 개인적인 생각으로는 런타임 시점에 특정 대상을 실행하기 위한 목적이 있다고 보여집니다.
즉 컴파일 시점에 실행할 대상을 특정하지 않도록 말입니다.
정확한 답변이라기 보다는 참고 정도로 해 주시면 됩니다.

gurumong님의 프로필 이미지
gurumong
질문자

정수원 선생님, 답변 감사합니다 (_ _)
Spring Security에 이어 Spring Batch도 너무 잘 듣고 있습니다!!

OAuth 강의 준비하신다고 들었는데, 혹시 그 다음 강의 준비하실때 Spring Integration 이나 Spring Cloud도 한번 고려 부탁 드려봅니다~~

gurumong님의 프로필 이미지
gurumong

작성한 질문수

질문하기