Whiteship's Note

Spring MVC에서 사용하는 ApplicationContext와 WebApplicationContext



보통 스프링 설정 파일이 최소한 두 개이상 있을 겁니다. xxx-servlet.xml 과 나머지로 나눌 수 있습니다. 그중에서 xxx-servlet.xml은 DispatcherServlet이 WebApplicationContext를 만들 때 사용하고, 나머지는  ContextLoaderListener 또는 ContextLoaderServlet이 일반적인 ApplicationContext를 만들 때 사용합니다.

이게 끝이 아닙니다. WebApplicationContext는 바로 이 ApplicationContext를 상속받아서 여러 서블릿들이 공통으로 사용하는 빈들을 사용할 수 있게 되는 겁니다. 따라서 만들어지는 순서도 중요한데, Listener가 아니라 ContextLoaderServlet을 사용했을 때는 load 머시기 설정 값에 1을 줘서 DispatcherServlet보다 먼저 만들게 해야 합니다. 그래서 WebApplicationContext를 만들 때 해당 ApplicationContext를 상속받아서 그 안에 있는 빈들을 사용할 수 있게 되겠죠.

이런 구조로 설계한 건, DispatcherServlet이 하나의 웹 애플리케이션에서 여러 개일 수 있기 때문입니다. 여러 개의 DispatcherServlet에서 공통으로 사용할 빈들을 상위에 있는 ApplicationContext에 선언해두고 공유할 수 있게 하는 거죠.

사용자 삽입 이미지

자. 그럼 여기서 문제

만약에 스프링 2.5 컨트롤러를 사용하고 있고 이 컨트롤러에 특정 @Aspect를 적용하고 싶을 때 해당 AOP 관련 설정(aop:autoproxy 머시기 엘리먼트 + @Aspect 빈 등록)은 xxx-servlet.xml과 applicationContext.xml 둘 중 어디에 둬야 할까요?

xxx-servlet.xml에는 컨트롤러 설정, 뷰 리졸버, 핸들러 맵퍼 등의 설정이 되어 있고, applicationContext.xml에는 서비스, DAO 등의 설정이 들어있습니다.
 
ㄱ. xxx-servlet.xml
ㄴ. applicationContext.xml
ㄷ. 어디에 두든지 상관없다.
ㄹ. 스프링 2.5 컨트롤러에는 Spring AOP를 사용할 수 없다.

정답은?? ㄱ 입니다. 왜냐면, applicationContext.xml을 사용해서 ApplicationContext를 만드는 순간에는 컨트롤러들이 미쳐 빈으로 등록되어 있지도 않기 때문에, 프록시를 만들 대상이 없습니다. 다시 말해, AOP 빈은 있지만, 이 AOP를 적용할 대상이 되는 빈이 없는겁니다. 따라서 컨트롤러들과 관련된 설정이 있는 xxx-servlet.xml에 해당 설정을 위치해야 합니다.

'Spring MVC > 3장 Spring MVC' 카테고리의 다른 글

Spring MVC에서 사용하는 ApplicationContext와 WebApplicationContext  (6) 2008.07.03
Service Layer  (2) 2006.12.13
Web Layer  (0) 2006.12.12
User Interface Layer  (0) 2006.10.09
Layers of Abstractions  (0) 2006.10.08
top

  1. 이철우 2009.12.16 07:17 PERM. MOD/DEL REPLY

    순전히 제 생각인데요, ㄷ 같은데요. 이유는 ㄹ은 아닌것 같고, 처음 스프링 MVC 이용해서 간단한 Web Application 만들적에 xxx-servlet.xml 만 사용해서도 만들었거든요.
    하지만 비즈니스 로직은 ApplicationContext.xml 에 주로 두므로 ㄴ?

    저 혹시 AOP 에 관한 포스팅도 있나요? 개념은 20% 정도 이해 한것 같구요. 어떻게 구현하는지는 영 모르겠네요.

    좋은 하루 되세요.

    Favicon of http://whiteship.me BlogIcon 기선 2009.12.16 10:57 PERM MOD/DEL

    하핫 오래전에 낸 문제라 저도 잊었는데 이제야 푸시는 분이 등장하셨네요!! 정말 감사합니다.

    하지만, 정답은 본문 아래 빈공간에 적어두었습니다. 마우스로 드래그 해보세요.

    AOP 구현 방법에 대해서는 이따 살짝 올릴꼐요.

  2. 이철우 2009.12.16 15:05 PERM. MOD/DEL REPLY

    답변 감사합니다. 많이 배웠습니다.

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2009.12.16 15:12 신고 PERM MOD/DEL

    아 맞다; AOP 구현 써야겠네요;

  3. 이철우 2009.12.18 02:41 PERM. MOD/DEL REPLY

    AOP 엄청 좋은 거였네요.

    어제, SpringSource University (http://www.springsource.com/training/freeonline) 에서 Developing Aspects with AOP (http://www.springsource.com/training/freeonline/download?sid=246444) by Jeff Brown 라는 강의를 봤는데요, AOP 기초 개념을 아주 쉽게 설명해 주는군요. 오늘 한번 써볼려고 합니다.

    또 다른 공짜 강의가 있는데요 OSGi, Spring-dm, Spring-dm Server 에 관한 거구요, 제 많은 의문점들을 풀어주더군요. OSGi Training: OSGi and Modular Applications ( http://s3.springsource.com/MRKT/training/online-screencast-final.mp4 ) by Joris Kuipers

    Spring source tool suite 에서 스프링 디엠 서버 쓰기가 참 쉽군요. 그냥 '드래그 인 드랍' 하면 디플로이가 되니깐 말이죠. 그런데 greenpages 샘플에서 웹사이트가 접근이 않되는군요. 리소스를 몾찾겠다고 그러네요, 뭐가 문젠가 시간좀 보내야 겠네요.

    좋은 하루 되세요.

    Favicon of http://whiteship.me BlogIcon 기선 2009.12.18 10:26 PERM MOD/DEL

    넹 좋아요!

    우와;; 그새 저 많은 걸 보시다니;; 멋지세요.

Write a comment.




: 1 : 2 : 3 : 4 : 5 :