inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

스프링 배치

JobInstance

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

571

gurumong

작성한 질문수 2

0

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

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

* jobRepository
* jobLauncher
* jobBuilderFactory
* stepBuilderFactory

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

spring-boot spring-batch

답변 1

3

정수원

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

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

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

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

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

0

gurumong

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

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

스프링 배치 버전 질문

0

120

1

소스코드가 어디에 있나요?

0

96

2

트랜잭션 예외

0

90

1

질문이 있습니다.

0

129

2

ChunkListener 에서 beforeChunk 의 실행 시점 관련 질문

0

124

2

여러 JOB 설정하는법

0

150

2

강의 자료 다른 방법 있을까요?

0

154

1

JobExecution과 JobExecutionContext와의 관계

0

186

2

특정 job만 실행

1

251

1

Batch 성능 질문

0

152

1

ItemReaderAdapter 종료

0

79

1

[ 강좌 Git 브랜치 문의 ] 섹션 9 > JdbcCursorItemReader, JpaCursorItemReader

0

179

2

Spring Batch 배포 질문

0

245

2

spring batch 버전

0

236

2

retry count 관련 질문

0

171

2

StepExecutionListener 의 afterStep 에서 return ExitStatus.FAILED 에 의한 동작에 의문이 갑니다.

0

330

2

jdbc, jpa 커서방식 조회 방식 차이 질문 (강사님께 답변 받고 싶습니다)

0

235

2

Multithread step과 AsyncItemProcessor

0

202

2

job 재실행

0

250

2

bean 생명주기 문제 도와주세요(@Scope("step"), @Autowired)

0

183

1

Multi-threaded-step과 Partitioning 차이 확인

0

174

2

jdbcCursorReader, jdbcPagingReader 질문

0

145

1

step muti-thread 질문

0

109

1

itemSteam open update close 질문

0

110

1