빈 생성 관련 질문드립니다.

72 views
Skip to first unread message

codeS

unread,
Mar 4, 2011, 5:49:10 AM3/4/11
to Korea Spring User Group
AbstractController와 같은 컨트롤러를 상속받아 구현할때
구현하는 클래스에서 맴버변수를 사용한다면 문제가 발생하는지 궁금합니다.

또한 이것을 직접 테스트해보고 확인 할 수 있는 방법이 있는지요...

스프링 웹프로젝트 중에 쓰레드와 관련하여 주의사항이 있는지 매우 궁금합니다.

너무 길어지는 내용이라면 링크라도 걸어주시면 감사히 참조하겠습니다.

바쁘시겠지만 도움 부탁드립니다.

감사합니다.

고종봉

unread,
Mar 4, 2011, 5:54:41 AM3/4/11
to ks...@googlegroups.com
질문이 이렇게 3가지가 되는 거죠? ㅎ

2011년 3월 4일 오후 7:49, codeS <lena...@naver.com>님의 말:

AbstractController와 같은 컨트롤러를 상속받아 구현할때
 
 1. 구현하는 클래스에서 맴버변수를 사용한다면 문제가 발생하는지 궁금합니다.
--> 상속 받은 클래스에서 멤버 변수를 사용하는게 문제가 될까요..?

 2. 또한 이것을 직접 테스트해보고 확인 할 수 있는 방법이 있는지요...
--> 멤버 변수를 테스트?? 변수 값?? 변수를 사용하는 메서드??

 3. 스프링 웹프로젝트 중에 쓰레드와 관련하여 주의사항이 있는지 매우 궁금합니다.



너무 길어지는 내용이라면 링크라도 걸어주시면 감사히 참조하겠습니다.

바쁘시겠지만 도움 부탁드립니다.

감사합니다.

--
Google 그룹스 'Korea Spring User Group' 그룹에 가입했으므로 본 메일이 전송되었습니다.
이 그룹에 게시하려면 ks...@googlegroups.com(으)로 이메일을 보내세요.
그룹에서 탈퇴하려면 ksug+uns...@googlegroups.com로 이메일을 보내주세요.
더 많은 옵션을 보려면 http://groups.google.com/group/ksug?hl=ko에서 그룹을 방문하세요.


Sungchul Park

unread,
Mar 4, 2011, 7:01:41 AM3/4/11
to ks...@googlegroups.com
아마 동시성 때문에 걱정이 돼서 하시는 질문 같네요.


 1. 구현하는 클래스에서 맴버변수를 사용한다면 문제가 발생하는지 궁금합니다.
한 인스턴스를 공유하는 형식이므로 객체에 상태가 있다면 충돌할 가능성이 있습니다. 무상태로 유지하셔야 합니다. 그런데 컨트롤러에 멤버 변수를 두려는 이유가 뭔가요? 세션 스코프 빈 같은 대안이 가능합니다만...

 2. 또한 이것을 직접 테스트해보고 확인 할 수 있는 방법이 있는지요...
동시성은 테스트하기 어렵습니다.
저는 일정시간 과격하게 멀티 쓰레드를 돌려 확률적으로 문제가 일어나는지 알아보는 방법 밖에 모르지만, 김창준님은 켄트벡의 TDD 책을 번역하면서 역자주로 CSP라 는 모델을 활용하면 동시성의 복잡한 문제를 테스트 가능한 수준으로 단순화시킬 수 있다고 말합니다. 한글 번역판 P26을 참고하십시오.


 3. 스프링 웹프로젝트 중에 쓰레드와 관련하여 주의사항이 있는지 매우 궁금합니다.
스프링이 워낙 방대해서 특별히 주의해야 한다는 사항 보다는 그냥 일반적인 주의 사항을 지키시면 될 듯 합니다. 즉, 쓰레드에서 안전한지 확인하고 쓰시라는...

즐거운 주말 되십시오.

Sanghyuk Jung

unread,
Mar 4, 2011, 7:02:08 AM3/4/11
to ks...@googlegroups.com, 고종봉
기본 bean의 scope는 singleton이기 때문에, servlet이나 Struts1처럼 사용자마다 다른 값을 가질 수 있는 것은 멤버변수로 쓰지 않는다고 보시는 편이 편합니다. 멤버변수로는 thread-safe한 것들만 들어가야하겠죠.
 
 물론 bean scope를 다르게 정의하거나, deprecate예정이지만 ThrowawayController같은 것을 쓰면 가능하기도 합니다만, Spring @MVC에서는 메소드 파라미터를 최대한 활용하는 방식이기 때문에, 특별한 상황이 아니라면 멤버 변수를 활용할 필요가 없습니다.
 
 
 


 
2011년 3월 4일 오후 7:54, 고종봉 <mercu...@gmail.com>님의 말:

Sanghyuk Jung

unread,
Mar 4, 2011, 7:07:07 AM3/4/11
to ks...@googlegroups.com

아 그리고 참고로 동시성 테스트는 contest라는 툴이 있기도합니다.
 
 
저희 회사에서는 쓰고 있는데, 돈을 주고 사야합니다;

 
2011년 3월 4일 오후 9:02, Sanghyuk Jung <ben...@gmail.com>님의 말:

고종봉

unread,
Mar 4, 2011, 7:11:33 AM3/4/11
to ks...@googlegroups.com

아항, 그런 질문이었군요ㅋ

싱글턴 빈이될 컨트롤러에서 멤버변수 사용시 스레드 세이프할지..

상혁님 말씀처럼 컨트롤러서 멤버변수 사용은 지양해야할것 같습니다

나의 GalaxyS로부터...

2011. 3. 4. 오후 9:02에 "Sanghyuk Jung" <ben...@gmail.com>님이 작성:

> 기본 bean의 scope는 singleton이기 때문에, servlet이나 Struts1처럼 사용자마다 다른 값을 가질 수 있는 것은
> 멤버변수로 쓰지 않는다고 보시는 편이 편합니다. 멤버변수로는 thread-safe한 것들만 들어가야하겠죠.
>
> 물론 bean scope를 다르게 정의하거나, deprecate예정이지만 ThrowawayController같은 것을 쓰면 가능하기도
> 합니다만, Spring @MVC에서는 메소드 파라미터를 최대한 활용하는 방식이기 때문에, 특별한 상황이 아니라면 멤버 변수를 활용할
> 필요가 없습니다.
>
>
>
>
>
>
> 2011년 3월 4일 오후 7:54, 고종봉 <mercu...@gmail.com>님의 말:
>
>> 질문이 이렇게 3가지가 되는 거죠? ㅎ
>>
>> 2011년 3월 4일 오후 7:49, codeS <lena...@naver.com>님의 말:
>>
>> AbstractController와 같은 컨트롤러를 상속받아 구현할때
>>
>>
>> * 1. 구현하는 클래스에서 맴버변수를 사용한다면 문제가 발생하는지 궁금합니다.*

>> --> 상속 받은 클래스에서 멤버 변수를 사용하는게 문제가 될까요..?
>>
>> * 2. 또한 이것을 직접 테스트해보고 확인 할 수 있는 방법이 있는지요...*

>> --> 멤버 변수를 테스트?? 변수 값?? 변수를 사용하는 메서드??
>>
>> * 3. 스프링 웹프로젝트 중에 쓰레드와 관련하여 주의사항이 있는지 매우 궁금합니다.*
>> *
>> *
>> *
>> *
Reply all
Reply to author
Forward
0 new messages