2013년 4월 10일 수요일

[Spring] MVC 흐름

이번에는 스프링을 이용하여 모델 2방식인 MVC의 흐름을 알아보도록 하자.

위의 그림은 MVC의 흐름을 한눈에 살펴볼 수 있도록 되어있다.

순서대로 하나씩 따라가보자.
1. Client의 요청은 항상 DispatcherServlet으로 전달되며 MVC에 있어서 컨트롤타워라고 생각하면 된다. DispatcherServlet이 MVC의 흐름을 총괄하며 다른 컴포넌트에게 해야할 일을 위임한다.
2. 1번으로부터 받은 Client의 요청에 대해 DispatcherServlet은 HandlerMapping을 통해 어떠한 Controller에게 비즈니스로직을 처리해야하는지 문의하게 된다.
3. HandlerMapping을 통해 해당하는 로직을 처리할 Controller에게 요청을 전송하고 Controller는 요청을 처리한다.
4. Controller에 의해 처리된 그 결과를 ModelAndView객체에 실어 응답한다.
5. ViewResolver에 의해 어떠한 뷰를 보여줄 것인지 결정한다.
6. 해당하는 결과를 화면에 표현한다.

위와 같은 일련의 과정을 잘 이해하도록하자!!! 이러한 흐름을 잘 이해하면서 실제로 MVC패턴을 이용한 어플리케이션을 만들어보자.
1. 가장 먼저 web.xml 설정 파일에 웹 어플리케이션에서 사용한 DispatcherServlet을 등록해야한다. 그리고 만약 DispatcherServlet 설정파일이 springapp-servlet.xml이라면 파일이름 중 앞단어를 이용하여 등록시켜야 한다.
예)
<servlet>
    <servlet-name>springapp</servlet-name>
    <servlet-class>
        org.springframework.web.servlet.DispatcherServlet
    </servlet-class>
</servlet>

이어서 어떤 요청에 대해 DispatcherServlet이 처리할 것인가를 명시해 줄 필요가 있다. 따라서 매핑의 과정이 추가된다.
<servlet-mapping>
    <servlet-name>springapp</servlet-name>
    <url-pattern>*.do</url-pattern>
</servlet-mapping>

이렇게 함으로써 .do라는 요청들은 모두 DispatcherServlet이 처리할 것이라는 설정이 완료된다.
2. DispatcherServlet 클래스를 만들어 어노테이션 방식으로 @Controller를 등록하고 WebApplicationContext 설정파일을 이용하여 필요한 객체를 DI기법으로 얻는다.
3. DispatcherServlet 클래스에 어노테이션 방식을 이용하여 @RequestMapping로 요청에 대한 Controller(메소드)를 구현하고 매핑한다. (지금은 디폴트 어노테이션 핸들러 매핑 방식을 사용하겠지만 스프링에는 더 다양한 방법이 여러개 존재한다는 것을 알아두자)
4. Controller를 통해 처리된 데이터는 ModelAndView 객체에 담고 ViewResolver를 통해 뷰를 선택한다.
5. 결과를 출력한다.

만약 여러개의 DispatcherServlet을 설정해야 한다.면 ContextLoaderListener로 설정한다.

댓글 없음:

댓글 쓰기