Spring-MVC
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 기본 동작 흐름
- 요청을 보내면 모든 요청을 Dispatcher Servlet 클래스가 받는다.
- Dispatcher Servlet 클래스는 요청을 처리해줄 컨트롤러와 메소드가 무엇인지 Handler Mapping에게 묻고 알아낸다.
- 안 상태에서 Handler Adapter에게 실행을 요청한다.
- 그 때 결정된 컨트롤러와 해당 메소드가 실행된다.
- 그 결과를 모델에 받아서 Dispatcher Servlet에게 전달한다. 이 때 Dispatcher Servlet은 컨트롤러가 리턴한 view name을 알아오게 된다.
- 컨트롤러가 리턴한 view name을 가지고
- 적절한 View Resolver를 통해서 뷰를 선택하여
- 그 뷰를 출력한다.
- 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>
댓글남기기