MVC 란?

mvc는 model-view-controller의 약자로 소프트웨어 공학에서 어플리케이션을 구성하는 패턴(pattern) 중 하나이다.

eclipse 에서 Spring MVC 기본 예제 작성

먼저 New -> Other -> Spring Legacy Project -> Spring MVC Project 로 프로젝트를 생성한다.


패키지 이름을 설정한다. com.bbo.[]에서 []에 해당하는 부분이 어플리케이션을 구분하는 Context가 된다.

기본 예제를 통해 MVC의 동작 방식을 살펴보도록 하자.


Spring에서 MVC의 동작 방식과 코드 살펴보기

우선 다음의 사진을 보도록 하자.


(1) 우선 유저로부터의 HTTP Request는 DispatcherServlet이 담당한다.

아래 코드는 web.xml에서 DispatcherServlet을 매핑하는 코드이다. 요청된 url로 / 와 매칭이 되면 appServlet 이라는 이름의 DispatcherServlet으로 넘겨준다.

// web.xml
 
<servlet-mapping>
    <servlet-name>appServlet</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

(2) 넘겨받은 DispatcherServlet은 요청된 URL을 HandlerMapping 오브젝트에 넘기고 호출 대상의 Controller를 얻어 URL에 해당하는 메서드를 실행한다.

아래 코드는 HandlerMapping을 동작하게 하는 코드이다.

/WEB-INF/spring/appServlet/servlet-context.xml 을 이용하여 필요한 컨트롤러를 찾는다.

// web.xml
 
<servlet>
    <servlet-name>appServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

com.bbo.myapp 이라는 패키지에서 컨트롤러를 스캔하는 것을 의미한다.

// servlet-context.xml
 
<context:component-scan base-package="com.bbo.myapp" />

(3) Controller 오브젝트는 비즈니스 로직을 처리하고 뷰에 전달할 오브젝트를 Model 오브젝트에 저장한다. 끝으로 Controller 오브젝트는 처리 결과에 맞는 View 이름을 반환한다.

아래 예제는 http://localhost:8181/myapp 이라고 HTTP Request 가 오면 value="/"이므로 아래 로직을 수행하게 된다.(처음에 패키지 이름 설정시 com.bbo.myapp라면 myapp이 어플리케이션을 구분하는 context가 되므로 myapp까지 root url 이 된다.)

model.addAttribute 를 이용하여 serverTime이라는 Key 에 formattedDate Value를 설정하여 Model 오브젝트에 저장한다.

마지막으로 home 이라는 View name 을 return 한다.

// HomeController.java
 
@RequestMapping(value = "/", method = RequestMethod.GET)
    public String home(Locale locale, Model model) {
        logger.info("Welcome home! The client locale is {}.", locale);
 
        Date date = new Date();
        DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale);
 
        String formattedDate = dateFormat.format(date);
 
        model.addAttribute("serverTime", formattedDate );
 
        return "home";
    }

(4) ViewResolver 로부터 해당 View 오브젝트를 얻는다.

예시를 통해 View의 path는 아래 정의된 prefix + "home" + suffix 가 된다.

// servlet-context.xml
 
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <beans:property name="prefix" value="/WEB-INF/views/" />
    <beans:property name="suffix" value=".jsp" />
</beans:bean>

(5) View 오브젝트에 화면 표시를 Request 한다.

(6) View는 Model 오브젝트로부터 화면 표시에 필요한 오브젝트를 가져와 화면 처리를 실행한다.

정리

eclipse를 통해 spring MVC 프로젝트를 생성하고 기본 예제를 통해 기본적인 동작 방식에 대해 알아보았다.

DispatcherServlet, HandlerMapping, ViewResolver, Model, View 오브젝트는 Spring MVC가 제공해주는 오브젝트이다.

이것저것 구조에 대해서 설명하기 위해 코드를 살펴보았지만 우리는 Controller와 해당 로직, 그리고 뷰를 코딩하면 된다.

'Framework > Spring' 카테고리의 다른 글

Bean의 Scope 지정  (0) 2017.12.28
bean 파일을 이용한 AOP 적용  (0) 2017.12.28
Environment를 이용한 bean 설정  (0) 2017.12.27
Bean 파일을 이용한 DI  (0) 2017.12.27

+ Recent posts