본문 바로가기
Spring/Spring

[Spring] 스프링을 이용한 MVC패턴 구현(2) - 프로젝트 초기 설정 방법

by J4J 2021. 2. 11.
300x250
반응형

개요

 

들어가기에 앞서
Dispatcher Servlet 실행 흐름
Handler Mapping
Handler Adapter
View Resolver
View
프로젝트 초기 설정
Dispatcher Servlet 설정 코드

 

 

 

안녕하세요. J4J입니다.

 

이번 포스팅은 스프링을 이용한 MVC패턴 구현 중 두 번째인 프로젝트 초기 설정 방법에 대해 적어보는 시간을 가져보려고 합니다.

 

 

들어가기에 앞서

 

 

이번 포스팅에서는 위의 MVC구조에서 빨간 박스에 포함된 내용에 대해 적어보고자 합니다.

 

또한 카트에 물건 담기라는 주제를 가지고 스프링으로 구현해보고자 합니다.

 

프로젝트 설정부터 시작하여 step by step으로 포스팅하겠습니다.

 

 

Dispatcher Servlet 실행 흐름

 

앞서 포스팅에서 dispatcher servlet은 웹 사이트의 모든 요청을 받아 처리하는 프론트 컨트롤러(Front Controller)로 사용자의 모든 요청과 응답을 관리하는 역할을 수행한다고 말한 바가 있습니다.

 

그럼 dispatcher servlet은 사용자의 요청을 받아 어떤 실행 흐름을 가질까요?

 

 

Handler Mapping

 

handler mapping은 사용자가 요청한 handler name이 컨트롤러에 존재하는지 확인하는 역할을 담당합니다.

 

그렇기 때문에 사용자의 요청을 받은 dispatcher servlet은 가장 먼저 handler mapping에 요청사항을 전달하고 만약 존재하지 않는 handler name일 경우에는 에러를 발생시킵니다.

 

 

Handler Adapter

 

handler adapter는 handler mapping에서 찾은 컨트롤러를 호출하는 역할을 담당합니다

 

handler mapping은 단순히 컨트롤러의 존재유무에 대한 판단만 내립니다.

 

handler mapping으로부터 확인된 컨트롤러의 직접적은 호출은 handler adapter에서 담당하며 이렇게 호출된 컨트롤러는 Service, Repository, DB를 거치며 비즈니스 로직 처리가 이루어지게 됩니다.

 

 

View Resolver

 

view resolver의 역할은 컨트롤러로부터 전달받은 단순한 view의 논리적인 이름을 view 오브젝트로 변환시켜주는 일을 담당합니다.

 

handler adapter에 의해 호출된 컨트롤러는 비즈니스 로직처리가 이루어지고 model과 view name을 리턴합니다.

 

물론 컨트롤러에서 view name을 view 오브젝트의 형태로 리턴할수도 있습니다.

 

하지만 그럴경우 리턴하고자 하는 view의 경로를 모든 controller마다 지정해줘야 되기 때문에 이런 단순 노동을 view resolver가 해결해주는 겁니다.

 

 

반응형

 

 

View

 

view는 사용자 인터페이스 화면입니다.

 

controller로부터 전달받은 model을 화면에 뿌려주며 사용자들이 보게 될 화면이 만들어집니다.

 

만들어진 화면은 사용자에게 응답하여 전달되고 사용자는 해당 화면을 웹/앱을 통해 보게 됩니다.

 

 

프로젝트 초기 설정

 

※ 스프링과 관련된 코드는 모두 STS-3.9.12.RELEASE 버전을 기준으로 작성되었습니다.

 

이제부터 위에서 언급된 개념들에 대한 설정을 해보겠습니다.

 

[ 1. Spring Legacy Project 선택 ]

 

 

 

 

[ 2. Project name은 mvc 입력, Templates은 Spring MVC Project 선택 후 Next ]

 

 

 

 

[ 3. 패키지명은 com.spring.mvc 입력 후 Finish ]

 

 

 

 

[ 4. 파일구성 확인 ]

 

 

 

 

파일 구성에 대해 위에서부터 간단하게 설명을 드리겠습니다.

 

i) src/main/java: 자바 파일들을 작성하는 곳

ii) src/main/resources: 자바 파일에서 사용되는 DB 쿼리를 위한 xml 등의 자바 리소스 파일들이 저장되는 곳

iii) src/test/java, src/test/resources: 단위 테스트를 위한 곳, 각각의 역할은 위와 동일

iV) servlet-context.xml: dispatcher-servlet 설정 파일

V) root-context.xml: DB와 관련된 설정 파일

Vi) src/main/webapp/WEB-INF/views: 사용자에게 보일 화면(JSP파일)들을 작성하는 곳

Vii) web.xml: web application의 환경 설정 파일

Viii) pom.xml: maven 설정 파일, 사용할 라이브러리를 등록만 하면 다운로드를 해주기 때문에 라이브러리 파일을 따로 다운로드할 필요 없이 pom.xml에 등록만 해주면 됨

 

 

 

[ 5. pom.xml에서 java, spring 등의 버전을 최신 버전으로 수정 ]

 

<?xml version="1.0" encoding="UTF-8"?>
<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/maven-v4_0_0.xsd">
	
    ...
    
    <properties>
        <java-version>1.8</java-version>
        <org.springframework-version>5.2.11.RELEASE</org.springframework-version>
        <org.aspectj-version>1.9.6</org.aspectj-version>
        <org.slf4j-version>1.7.30</org.slf4j-version>
    </properties>
	
    ...
    
    <build>
        <plugins>
            
            ...
            
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.5.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <compilerArgument>-Xlint:all</compilerArgument>
                    <showWarnings>true</showWarnings>
                    <showDeprecation>true</showDeprecation>
                </configuration>
            </plugin>
            
            ...
            
        </plugins>
    </build>
</project>

 

 

728x90

 

 

[ 6. mvc라는 이름으로 생성된 프로젝트를 우클릭하여 maven update 진행 (pom.xml 변경이 일어나면 항상 해줘야함) ]

 

 

 

 

 

[ 7. Servers탭에 tomcat등록 (Servers탭이 보이지 않으면 STS상단의 Window → Show View → Servers 클릭) ]

 

 

 

[ 7-1. Servers내부 우클릭 → New → Server ]

 

 

 

[ 7-2. 설치한 tomcat버전 선택 후 Next ]

 

 

 

 

[ 7-3. Browse클릭 → 설치한 tomcat폴더 등록 → Finish (tomcat은 따로 설치 하셔야 됩니다.) ]

 

 

 

 

[ 8. 서버 실행하기 ]

 

 

 

[ 8-1. mvc이름으로 생성한 프로젝트 우 클릭 후 Run as → Run on Server 클릭 ]

 

 

8-2. 등록한 tomcat 선택 후 Finish

 

 

 

 

[ 9. 실행화면 확인 (home.jsp) ]

 

 

 

 

 

Dispatcher Servlet 설정 코드

 

spring legacy project를 생성할 경우 dispatcher servlet의 실행 흐름을 위한 설정이 기본적으로 되어있습니다.

 

[ 1. web.xml ]

 

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee https://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    
    	...

	<!-- Processes application requests -->
	<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>
		
	<servlet-mapping>
		<servlet-name>appServlet</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>
</web-app>

 

web.xml에 등록되어 있는 코드를 보면 dispatcher servlet을 위한 파일로 servlet-context.xml 파일을 등록해놨습니다.

 

그리고 url-pattern태그로 /가 되어있는데 설정한 dispatcher servlet에 관련된 내용을 스프링에서 동작하는 모든 url에 적용을 하겠다는 겁니다.

 

 

 

[ 2. servlet-context.xml ]

 

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/mvc"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:beans="http://www.springframework.org/schema/beans"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd
		http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
	
	<!-- Enables the Spring MVC @Controller programming model -->
	<annotation-driven />
    
    	...

	<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
	<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>
	
	<context:component-scan base-package="com.spring.mvc" />
</beans:beans>

 

i) annotation-driven: handler mapping, handler adapter를 빈으로 등록

ii) InternalResourceViewResolver: view resolver 설정, 컨트롤러에서 home이라는 view name만 리턴하면 view resolver가 /WEB-INF/views/home.jsp인 view 오브젝트를 생성

iii) component-scan: servlet-context.xml파일에 등록된 설정이 com.spring.mvc패키지의 하위 클래스들에 적용

 

 

참조

 

[스프링 프레임워크]좐의 좐니쉬운 스프링 06_ViewResolver, View

 

[spring] HandlerMapping, HandlerAdapter, HandlerInterceptor

 

스프링(Spring) 프로젝트의 폴더 구조

 

[Spring] mvc:annotation-driven

 

 

정리

 

Dispatcher Servlet 흐름 관여: Handler Mapping / Adapter, View / Resolver
Handler Mapping은 사용자가 요청한 handler name이 존재하는지 확인
Handler Adapter는 handler name에 매핑되는 컨트롤러를 실행
View Resolver는 view name을 view 오브젝트로 변환
View는 사용자 인터페이스 화면

 

 

 

이상으로 스프링을 이용한 MVC패턴 구현 중 두 번째인 프로젝트 초기 설정 방법에 대해 간단하게 알아보는 시간이었습니다.

 

읽어주셔서 감사합니다.

728x90
반응형

댓글