Spring-MVC

1 분 소요

MVC란?

  • MVC는 Model-View-Controller의 약자입니다.
  • 원래는 제록스 연구소에서 일하던 트뤼그베 린즈커그가 처음으로 소개한 개념으로, 데스트톱 어플리케이션용으로 고안되었습니다.
  • Model : 모델은 뷰가 렌더링하는데 필요한 데이터입니다. 예를 들어 사용자가 요청한 상품 목록이나, 주문 내역이 이에 해당합니다.
  • View : 웹 애플리케이션에서 뷰(View)는 실제로 보이는 부분이며, 모델을 사용해 렌더링을 합니다. 뷰는 JSP, JSF, PDF, XML등으로 결과를 표현합니다.
  • Controller : 컨트롤러는 사용자의 액션에 응답하는 컴포넌트입니다. 컨트롤러는 모델을 업데이트하고, 다른 액션을 수행합니다. url요청을 처리한다.

MVC Model 1 아키텍처

  • JSP페이지에 JAVA와 HTML에 섞여있어서 유지보수가 어려움.

MVC Model 2 아키텍처

  • 이렇게 함으로써 로직(Servlet)과 뷰(JSP)를 분리할 수 있게 되었다.

MVC Model2 발전형태

  • 프론트 컨트롤러라는 서블릿은 딱 하나만 존재하며 모든 요청을 다 받는다.
  • 하지만 요청만 받고 실제 일은 처리하지 않는다.
  • 실제 일은 컨트롤러 클래스 (핸들러 클래스)에게 위임한다.

Spring Web module

Spring MVC 기본 동작 흐름

  1. 요청을 보내면 모든 요청을 Dispatcher Servlet 클래스가 받는다.
  2. Dispatcher Servlet 클래스는 요청을 처리해줄 컨트롤러와 메소드가 무엇인지 Handler Mapping에게 묻고 알아낸다.
  3. 안 상태에서 Handler Adapter에게 실행을 요청한다.
  4. 그 때 결정된 컨트롤러와 해당 메소드가 실행된다.
  5. 그 결과를 모델에 받아서 Dispatcher Servlet에게 전달한다. 이 때 Dispatcher Servlet은 컨트롤러가 리턴한 view name을 알아오게 된다.
  6. 컨트롤러가 리턴한 view name을 가지고
  7. 적절한 View Resolver를 통해서 뷰를 선택하여
  8. 그 뷰를 출력한다.
  • Spring MVC를 이해한다는 것은 Dispatcher Servlet이 어떻게 동작하는지를 이해하는 것과 같을 정도로 Dispatcher Servlet이 중요한다.

  • 프론트 컨트롤러 (Front Controller)
    • 회사 대표번호같은 아이이다.
    • 대표번호로 전화해서 총무부 바꿔주세요, 기획부 바꿔주세요 하면 그 쪽 전화기로 통신을 넘겨주는 역할의 아이이다.
  • 클라이언트의 모든 요청을 받은 후 이를 처리할 핸들러에게 넘기고 핸들러가 처리한 결과를 받아 사용자에게 응답 결과를 보여준다.
  • DispathcerServlet은 여러 컴포넌트를 이용해 작업을 처리한다.
  • DispatcherServlet 내부 동작흐름

  • DispatcherServlet이 FrontController로써 역할을 수행할 수 있도록 설정을 해야한다는 것이 매우 매우 중요함. → web.xml로 설정한다.
      <!DOCTYPE web-app PUBLIC
       "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
       "http://java.sun.com/dtd/web-app_2_3.dtd" >
      <web-app>
        <display-name>Spring JavaConfig Sample</display-name>
        
        <servlet>
          <servlet-name>mvc</servlet-name>
          <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
          <init-param>
            <param-name>contextClass</param-name>
            <param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value>
          </init-param>
          <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>kr.or.connect.mvcexam.config.WebMvcContextConfiguration</param-value>
          </init-param>
          <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet-mapping>
          <servlet-name>mvc</servlet-name>
          <url-pattern>/</url-pattern>
        </servlet-mapping>
      </web-app>
    
  • pom.xml
      <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <groupId>kr.or.connect</groupId>
        <artifactId>mvcexam</artifactId>
        <packaging>war</packaging>
        <version>0.0.1-SNAPSHOT</version>
        <name>mvcexam Maven Webapp</name>
        <url>http://maven.apache.org</url>
        <properties>
                      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
                      <spring.version>4.3.5.RELEASE</spring.version>
              </properties>
        
              <dependencies>
                      <!-- Spring -->
                      <dependency>
                              <groupId>org.springframework</groupId>
                              <artifactId>spring-context</artifactId>
                              <version>${spring.version}</version>
                      </dependency>
                        
                      <dependency>
                              <groupId>org.springframework</groupId>
                              <artifactId>spring-webmvc</artifactId>
                              <version>${spring.version}</version>
                      </dependency>
        
                      <dependency>
                              <groupId>javax.servlet</groupId>
                              <artifactId>javax.servlet-api</artifactId>
                              <version>3.1.0</version>
                              <scope>provided</scope>
                      </dependency>
        
                      <dependency>
                              <groupId>javax.servlet</groupId>
                              <artifactId>jstl</artifactId>
                              <version>1.2</version>
                      </dependency>
                        
                      <dependency>
                              <groupId>junit</groupId>
                              <artifactId>junit</artifactId>
                              <version>3.8.1</version>
                              <scope>test</scope>
                      </dependency>
                        
              </dependencies>
                
        <build>
          <finalName>mvcexam</finalName>
          <plugins>
              <plugin>
                  <groupId>org.apache.maven.plugins</groupId>
                  <artifactId>maven-compiler-plugin</artifactId>
                  <version>3.6.1</version>
                  <configuration>
                      <source>1.8</source>
                      <target>1.8</target>
                  </configuration>
              </plugin>
          </plugins>
        </build>
      </project>
    

카테고리:

업데이트:

댓글남기기