참조한 강의 : Spring & Hibernate For Beginners (www.udemy.com/course/spring-hibernate-tutorial/)
이 포스팅에서는 MVC 가 무엇인지, Spring MVC 를 어떻게 설정하는지 등을 알아본다.
- MVC
MVC 는 디자인 패턴 중 하나로, Model View Controller 의 약자이다.
Model 은 데이터를 나타내고 (Bean),
View 는 단어 그대로, 보여지는 부분 (JSP)
Controller 는 Model 과 View 사이의 매개체 역할을 하는 비즈니스 로직 부분이다 (Servlet).
스프링에서의 MVC 는 대략 이런 구조를 갖고 있다.
브라우저에서 해당 사이트에 대한 요청이 들어오면,
Controller 가 이를 받아서, 프로그래머가 정의한 비즈니스 로직을 처리한다.
처리하는 과정에서 데이터 부분을 담당하기위한, Bean 을 만들어내고, 이 Bean 이 DB 와 연결하여 필요한 데이터를 추려낸다.
그 데이터 값들을 Controller 에 넘겨 주며, Controller 에서 이에 대한 비즈니스 로직을 처리한뒤, View 로 넘긴다
View 에서는 이 결과물들을 사용자에게 보여주기 위한 JSP 를 만들고, 이를 사용자에게 보여준다.
여기에 추가적으로 spring 에는 front controller (=dispatcher servlet) 이란게 있다.
* Dispatcher Servlet
사용자로 부터 요청이 들어올때, 제일 먼저 요청을 받아서 처리하는 컨트롤러이다.
이 Dispatcher Servlet 은 "org.springframework.web.servlet.DispatcherServlet" 에 정의되어 있으며, 스프링에서 기본적으로 제공하는 클래스 이다.
이것을 사용하는 이유는, 이 서블릿이 없었을때는, 다른 모든 서블릿에 대해서 URL 을 매핑하기 위해 일일이 전부 web.xml 에 등록해야 했지만, 이 서블릿을 정의하면, 각 요청에 매칭되는 서블릿을 매칭 시켜주기 때문에, 각 컨트롤러에 대한 URL 매핑을 좀 더 편하게 할 수 있어서 도입되었다.
- Spring MVC 설정
이클립스에서 Spring MVC 를 설정하는 방법은 다음과 같다
먼저 새 프로젝트를 만들때, "Dynamic Web Project" 로 선택해서 생성한다.
만들고 나면 위와 같은 하위 폴더가 생성된다.
그리고 앞선 포스팅에서 했던 것 처럼
아래의 사이트에 가서
사용할 스프링 버전에 맞는 JAR 파일을 받아와야 한다 (~dist.zip 파일)
repo.spring.io/release/org/springframework/spring/
JAR 파일들을 받은뒤, 프로젝트의 WEB-INF/lib 폴더에 다가 JAR 파일들을 복사해서 넣어준다.
그리고 나서
"javax.servlet.jsp.jstl-1.2.1.jar" 파일과 "javax.servlet.jsp.jstl-api-1.2.1.jar" 두개의 파일을 구글에서 검색해서 추가로 다운 받은 후 lib 폴더에 넣어줘야한다.
다음으로 두 개의 xml 파일을 정의해야한다
1) 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_3_1.xsd"
id="WebApp_ID" version="3.1">
<display-name>spring-mvc-demo</display-name>
<absolute-ordering />
<!-- Spring MVC Configs -->
<!-- Step 1: Configure Spring MVC Dispatcher Servlet -->
<servlet>
<servlet-name>dispatcher</servlet-name> <!-- define front controller (= dispatcher servlet) -->
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring-mvc-demo-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- Step 2: Set up URL mapping for Spring MVC Dispatcher Servlet -->
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
|
cs |
14 ~ 22 번줄은 Front Controller 에 대한 정의 부분이며, 19번 줄은 이 서블릿 설정을 어떤 파일에 했는지 알려주는 부분이다.
25 ~ 28 번줄은 DispatcherServlet 의 URL 매핑을 지정하는 부분으로 여기선 / 로 지정했다
이는 home 주소로 설정한것이어서 모든 요청이 이 서블릿을 거쳐가게 만든 것이다.
2) spring-mvc-demo-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:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="
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.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!-- Step 3: Add support for component scanning -->
<context:component-scan base-package="com.luv2code.springdemo" />
<!-- Step 4: Add support for conversion, formatting and validation support -->
<mvc:annotation-driven/>
<!-- Step 5: Define Spring MVC view resolver -->
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/view/" />
<property name="suffix" value=".jsp" />
</bean>
</beans>
|
cs |
15 번줄은 스프링 컨테이너가 어떤 패키지에서 bean 을 스캔할 것인지 정의하는 부분이며,
18 번줄은 Spring MVC 가 @Controller 에게 요청을 보내기 위해서는 별도의 다른 Bean 들이 필요하다
HandlerMapping 과 HandlerAdapter 가 이에 해당하고 이 둘을 스프링에서 다뤄주게 하기 위한 구문이다.
이들을 통해서 요청으로 들어오는 URL 과 각 컨트롤러들을 매칭 할 수 있다.
21 ~ 25 번 줄은 View 를 어떻게 설정할지에 대한 부분을 담고 있다.
prefix 는 view 파일들이 어디에 위치하는지 명시하는 부분이고
suffix 는 view 파일의 확장자명을 설정한다. (JSP)
(xml 파일없이 순수 자바 코드로 spring mvc 를 설정하는 방법도 존재하지만, 이 부분은 나중에 또 포스팅함)
여기까지 이클립스를 통해서 spring mvc 를 설정하는 방법에 대해 알아봤다
다음은 MVC 관련 예제 코드를 직접 작성해본다.
- References)
1. MVC Architecture : gmlwjd9405.github.io/2018/11/05/mvc-architecture.html
2. DispatcherServlet : mangkyu.tistory.com/18
3. mvc-annotation driven : gmlwjd9405.github.io/2018/12/18/spring-annotation-enable.html
'Spring' 카테고리의 다른 글
Spring Framework - Spring MVC Form Tag (0) | 2021.01.28 |
---|---|
Spring Framework - MVC 코드 예제 (0) | 2021.01.27 |
Spring Framework - XML 파일 없이 스프링 설정하기 (0) | 2021.01.22 |
Spring Framework - Annotation (0) | 2021.01.20 |
Spring Framework - Bean Scope, Life Cycle (0) | 2021.01.19 |