2021. 6. 15. 02:09ㆍSpring
이번에는 Spring freamwork mvc 구조를 이해 해봅시다.
mvc
mvc 는 Model, View, Controller 로써, 각각의 기능을 가지고 있습니다.
Model : 데이터의 집합 ( 데이터는 Model 이 가지고 있습니다 )
View : 사용자에게 보여지는 화면 입니다.
Controller : Model 과 View 를 왔다 갔다하면서 어떤 기능을 수행하는지 등의 로직 컨트롤러 입니다.
기본적으로 Spring의 mvc 구조를 이해하기 위해서는, JSP의 MVC2 를 학습하고 오는 편이 이해하기가 쉽습니다.
JSP 에서 mvc2 는 URL 매핑을 통해서, Servlet 과 연결하고, Servlet 에 Controller 를 만들어서, 각각의 기능을 하는 서비스를 만듭니다.
Controller 는 어떤 URL 을 통해서 접근했는지에 따라서, 어떤 기능(서비스) 을 실행할지를 정하고, 필요하다면 데이터(모델) 에 접근해서 데이터의 추가, 수정, 삭제 등을 합니다.
서비스에서 이러한 과정들을 마쳤다면, 모델에서 가지고 나온 데이터가 있다면, Dispatcher 를 이용해서 forward 를 통해 View 화면으로 넘겨줍니다.
View 에서는 Controller 를 통해서 넘어온 데이터를 화면에 나타냅니다.
전체적으로 이러한 구조를 가진 JSP MVC2 를 Spring 에서도 사용하게 되는데요
Spring 에서는 아래의 구조를 가지고 있습니다.
Spring 에서는 DispatcherServlet , HandlerMapping, HandlerAdapter, ViewResolver 을 처음에 설정한 후에는 알아서 작동을 하게 되고, 저희가 할 것은, Controller, Moder, View 를 짜는 것만 하면 됩니다.
그래도, 기본적으로 Spring 의 mvc 구조를 알고 있어야 효율적인 코딩을 할 수 있다고 해요.
1. 클라이언트의 요청 -> DispatcherServlet : 클라이언트(사용자) 로부터 어떠한 입력(요청)이 들어오면, DispatcherServlet 이 클라이언트의 요청을 가져갑니다. ( URL 매핑 )
2. DispatcherServlet -> HandlerMapping : DispatcherServlet 은 클라이언트의 요청에 맞는 Controller 를 찾아달라고 HandlerMapping 에게 부탁합니다.
3. HandlerMapping -> HandlerAdapter : 요청을 수행하기 위해 알맞는 Controller 를 검색한 HandlerMapping 은 HandlerAdapter 에게 요청에 알맞은 컨트롤러의 메서드를 실행을 요청하게 됩니다.
4. HandlerAdapter -> Controller -> Service -> Model : Controller 는 HandlerAdapter 의 요청에 따라 정해진 Bussiness 로직을 실행하게 됩니다 ( Controller -> Service -> Model )
5. Controller -> HandlerAdapter : Controller 는 메서드를 실행한 후에 HandlerAdapter 에게 사용자 응답에 필요한 데이터 정보와 뷰정보(JSP파일)가 담겨있는 ModelAndView 객체를 반환 합니다.
6. HandlerAdapter -> DispatcherServlet -> ViewResolver : ModelAndView 객체를 DispatcherServlet 에게 넘깁니다. DispatcherServlet 은 ViewResolver 에게 어떤 View 로 갈 것인지 물어 봅니다.
7. ViewResolver -> View : ViewResolver 는 1~6 까지의 과정들을 통해서 넘어온 데이터가 어떤 View 에서 사용될 것인지 정하고 , 정해진 View 로 넘어가서 사용자에게 보여지는 화면을 나타냅니다.
위의 이러한 일련의 과정들을 프로젝트로 만들어 봅시다
먼저, mvc 는 서버를 통해서 작동을 하기 때문에, 서버를 사용합니다.
저희는 앞서 JSP 에서 사용했던 것 처럼 Tomcat 을 사용합니다.
Tomcat 을 서버에 연결하고, "Dynamic Web Project" 를 생성합니다.
※ 프로젝트를 만드는데 다소 시간이 소요됩니다.
프로젝트가 만들어졌다면 아래의 그림처럼 만들어 집니다.
프로젝트가 완성 되었다면, 프로젝트의 우클릭 한 후에 아래처럼 Maven Project 로 변경합니다.
Group Id : 회사이름
Artifact Id : 프로젝트 이름
Version : 0.0.1 -SNAPSHOT
paclagomg : war
Maven 프로젝트로 변경하게 되면 구조가 아래처럼 변경 됩니다.
"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
https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.simple</groupId>
<artifactId>SpringTest</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<!-- 자바 버전 or 스프링 버전을 통일해서 사용할 수 있도록 변수 선언 -->
<properties>
<java-version>1.8</java-version>
<org.springframework-version>5.0.7.RELEASE</org.springframework-version>
</properties>
<!-- pom.xml 은 dependency 태그를 이용해서 원격에 저장소에서 필요한 라이브러리를 다운로드 -->
<dependencies>
<!-- 스프링 설정, 코어 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<!-- 스프링 web mvc 모듈 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${org.springframework-version}</version>
</dependency>
</dependencies>
<!-- 메이븐 빌드 툴 -->
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>${java-version}</source>
<target>${java-version}</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.3</version>
<configuration>
<warSourceDirectory>webapp</warSourceDirectory>
</configuration>
</plugin>
</plugins>
</build>
</project>
"pom.xml" 을 수정완료 했다면, 저장한 후에 프로젝트 우클릭을 한 후 업데이트 시켜 줍니다.
"Libraries" 에 Maven Dependencies 가 생성이 되었다면 완료 입니다.
"web.xml" 파일에 아래의 코드를 작성합니다.
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
<!-- 스프링 클래스를 디스패처 서블릿 등록 -->
<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/config/spring-servlet.xml</param-value>
</init-param>
</servlet>
<!-- 모든 요청에 대해서 appServlet을 연결한다 -->
<servlet-mapping>
<servlet-name>appServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
"webapp" 폴더 아래에 "resource" 폴더를 만듭니다.
"WEB_INF" 폴더 아래에 "config" 폴더를 만들고, "spring-servlet.xml" 파일을 만듭니다.
"spring-servlet.xml" 파일 안에 아래와 같은 코드를 작성합니다.
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
<!-- 핸들러 어댑터, 핸들러 맵핑, 스프링의 다양한 어노테이션기능을 활성화 -->
<mvc:annotation-driven />
<!-- 정적자원 맵핑 경로 설정 css, js, html파일은 직접 경로로 맵핑 -->
<mvc:resources location="/resource/" mapping="/resource/**"></mvc:resources>
<!-- 뷰 리졸버 - controller 에서 돌아온 문자열 경로를 최종적으로 합성해주는 역할 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
<!-- 컨트롤러 패키지를 읽어서 bean 으로 생성 -->
<context:component-scan base-package="com.simple.controller" />
</beans>
"Java Resources" -> "src/main/java" 폴더 아래에 패키지를 만들고, 컨트롤러를 만들어 줍니다.
컨트롤러에는 아래처럼 만들어 줍니다.
"WEB-INF" 폴더 아래에 "jsp" 폴더를 만들고, "home.jsp" 폴더를 만들어 줍니다.
"home.jsp" 파일에는 hello 월드를 적어 줍시다.
서버를 실행하고 "localhost:포트번호/프로젝트명/" 을 쳤을 때 아래처럼 나오면 됩니다.
'Spring' 카테고리의 다른 글
Day84 - [Spring]컨트롤러 객체의 구현 (0) | 2021.06.16 |
---|---|
Day84 - [Spring]개발환경 구축(Spring 프로젝트 생성) (0) | 2021.06.15 |
Day83 - [Spring]xml 파일을 JAVA 파일로 변경하기 (0) | 2021.06.14 |
Day83 - [Spring]의존객체 자동주입(어노테이션) (0) | 2021.06.14 |
Day82 - [Spring]Spring 프로젝트 맛보기 (0) | 2021.06.13 |