inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

토비의 스프링 부트 - 이해와 원리

@Configuration과 proxyBeanMethods

질문드립니다.

해결된 질문

527

오개발

작성한 질문수 44

0

 안녕하세여 초보적인 질문드려서 죄송합니다..

Configuration ProxyBeanMethods 값을 false 를 주면 호출 할때마다 새로운 객체를 생성하게 되는데.. 다시 말해 싱글톤임을 보장 받을수 없게 되는걸로 이해하였습니다. 아마 false주는 경우는 없을듯합니다만 혹시 사례가 있을까요?

'굳이' 라는 말을 강의에서 계속 하셔서 사례라고 하면 생각해봤을때 싱글톤의 단점인것을 보안하기 위해 사용되는건지? 아니면 성능적인것 때문에 그런지 궁금합니다.

마지막 내용에 spring 에 실제 사용된 내용으로 봤을떈, 단순한 Configuration 일땐 false를 주면 될듯한데. 디테일한 사례가 궁금합니다.

 

감사합니다.

 

 

spring spring-boot spring-jdbc

답변 1

3

토비

최근 추세는 proxyBeanMethods를 @Bean 메소드 직접 호출로 의존 오브젝트를 가져오는 방식을 쓰지 않는 경우라면 false로 세팅하는 겁니다. 대부분의 경우 빈 오브젝트를 생성하는 메소드 호출은 스프링 컨테이너가 담당하기 때문에 문제가 되지 않습니다.

팩토리 메소드 스타일로 빈을 생성하는 방식이 싱글톤을 보장하기 위해서 프록시 클래스를 만들어서 캐싱을 하게 해야하는데, 이런 클래스 프록시 생성은 동적으로 일어나기 때문에 스프링 6의 네이티브 컴파일 등을 적용할 때 문제가 됩니다. 물론 스프링은 이를 처리할 수 있는 방법을 만들기는 했지만, cglib 등의 사용은 점차 줄어드는 것이 자연스러운 결과라고 봅니다.

특히 자바 코드를 봤을 때 예상할 수 있는 동작과 실제 스프링 위에서 런타임에서 동작되는 방식에 차이가 생기는 것은 비직관적입니다. 스프링 컨테이너가 있고 없고에 따라서 평범한 코드가 다른 방식으로 동작하는 것은 좋은 설계라고 볼 수 없습니다. 나름 자바 코드를 이용한 빈 설정을 단순하게 만들기 위해서 등장한 방식이지만 프록시 클래스의 생성은 가능한 피하는 것이 좋다고 봅니다.

앞으로 스프링이 어떻게 이를 이용하는지 주목해볼만합니다. 프록시 팩토리 빈 설정을 false로 주었을 때 문제가 되는 경우가 어떤게 있는지 한번 확인해보세요. 메소드 직접 호출을 통해서 빈을 가져오는 게 아니라면 싱글톤으로 빈이 주입되는 것 자체에는 아무런 문제가 없습니다.

11강에서 cmd에서 spring shell에 $ init 하면 Fail 메세지

0

75

2

TestRestTemplate 을 통해 테스트 실행시 웹 요청 정보가 콘솔에 표시되지 않습니다.

0

85

1

섹션7. 자동구성 정보파일분리 강의 질문(@MyAutoConfiguration 붙힌 이유)

0

201

2

WebApplicationContext를 DispatcherServlet에 this로 넘기는 것

0

279

2

인프라 빈 구성 정보의 분리에서 EnableMyAutoConfiguration 질문드립니다.

0

210

2

질문드립니다.

0

232

2

spring boot 3.3.7로 학습중입니다.

0

369

2

Serverproperties 객체 생성 후 @Impor 어노테이션 사용 이유 용도

0

162

2

spring start io 에서 이제더이상 2.x버전은 지원하지 않는 것 같습니다.

1

296

2

Springboot 3.2 이상에서 파라미터 추론관련

0

913

4

binding error

0

220

3

Arrays.copyOf 메서드의 타입 세이프

1

155

2

MyOnClassCondition에 있는 matches method의 Invoke 횟수

1

233

3

인용구의 출처가 궁금합니다.

0

259

1

프로퍼티 빈의 후처리기 도입 AnnotationUtils의 사용

0

236

2

SimpleCacheConfiguration과 빈 등록

0

168

2

MyAutoConfigImportSelector 에서 생성자로 ClassLoader를 주입받을 수 있는 점

0

244

1

IntelliJ project jenerator spring initailizr

0

150

1

강의 자료 레퍼지토리에 업로드

0

216

1

강의자료

0

388

1

Hikari 라이브러리가 없으면 오류가 나는거 아닌가요

0

314

2

Tomcat 포트 프로퍼티 미설정시 랜덤 포트 설정 문의

0

476

5

@Import 로 Bean을 등록해야하는 기준이 뭔지 궁금합니다.

0

340

2

application.properties파일내 프로퍼티 이름

0

210

1