Spring의 scoped-proxy bean, 다른 대안은?

2015-03-30 13:40

제가 이해하고 있는 spring bean은 객체를 빈으로 등록하여 spring Container에서 관리하는 방식입니다. 각각의 bean은 무상태이기 때문에 동시적인 Http Request에서 공유되어 동작이 가능하구요.

만약 singleTon scope의 빈에서 request, session scope의 빈을 reference할 경우라면 스프링에서는 scoped-proxy의 개념으로 빈을 등록할 수 있도록 제공해줍니다. AOP를 통해 bean의 scope에 따라 바꿔치기 해주는 방식이지요.

하지만 이 방식은 매 요청마다 객체를 새로 만들어야 하는 request scope의 A라는 빈이 있다면, A라는 빈과 구조상 관계를 맺고 있는 다른 SingleTon Scope B, C, D와 같은 빈에 새로운 A를 Injection 해줘야 할텐데 이러한 작업들은 서버 성능상 아주 많은 영향을 줄것이라 생각됩니다.

질문1. 그렇다면 request scope 빈을 사용하기 보다는 request별 전역공간 (예를들어 container에 의해 생성되는 요청 Thread와 같은 곳)에 저장하고, 필요한 곳에서 빈을 참조하는게 아닌 전역공간에서 직접 가져오는 형태가 더 낫지 않을까요?

질문2. 어떤 경우에 request bean을 사용하게 되는 걸까요? 머릿속으로 쉽게 그려지지 않는데 사용경험이 있다면 공유를 부탁드릴게요!

2개의 의견 from SLiPP

2015-03-30 13:42

현재 개인적으로 진행하는 프로젝트 코딩중, 위의 내용이 궁금해진 배경은 다음과 같습니다. Controller 영역[requestMapping되는 메서드] 에서 View 영역[@ResponseBody의 데이터를 처리하는 messageConverter를 custom하게 구현한 클래스]으로 데이터를 전달해주고 싶은데,

이 과정에서 어차피 매 요청마다 messageConverter에서 생성하는 A라는 인스턴스를 request scope 빈으로 등록해서 데이터를 공유하는 객체로도 사용하자 하는 생각이 들었습니다.

구현하는 단계에서 page scope bean의 효율과, 그 대안은 어떤게 있을까 고민하게 되었으며 그 과정에서 bean의 동작방식에 대해 궁금하게 되었습니다.

의견 추가하기

연관태그

← 목록으로