본문 바로가기

Archived(Programming)/Spring #2(기초)

Spring MVC

# MVC 패턴의 개념

MVC(Model-View-Controller) 패턴은 소프트웨어 공학에서 사용되는 아키텍처 패턴으로 MVC 패턴의 주 목적은 Business logic과 Presentation logic을 구분하기 위함이다.

 

Model : 어플리케이션의 정보(데이터, Business Logic 포함)

View : 사용자에게 제공할 화면(Presentation Logic)

Controller : Model과 View 사이의 상호작용을 관리

MVC 패턴

 

1) Model 컴포넌트

  • 데이터 저장소(DB)와 연동하여 사용자가 입력한 데이터 또는 출력할 데이터를 다룬다
  • 여러 개의 데이터 변경 작업(CRUD)을 하나의 작업으로 묶는 트랜잭션을 다룬다
  • DAO 클래스, Service 클래스, VO(Domain 객체) 등이 해당

2) View 컴포넌트

  • 모델이 처리한 데이터나 그 작업 결과를 가지고 사용자에게 출력할 화면을 만드는 일을 함
  • 생성된 화면은 웹 브라우저가 출력하고, 뷰 컴포넌트는 HTML, CSS, JS를 사용하여 웹 브라우저 UI를 제작
  • HTML가 JSP를 사용하여 작성 가능 (최근에는 View를 만들어주는 기술(Server Template)이 다양하게 사용됨)

3) Controller 컴포넌트

  • 클라이언트의 요청을 받았을 때 그 요청에 대해 실제 업무를 수행하는 모델 컴포넌트를 호출하는 일을 함
  • 클라이언트가 보낸 데이터가 있다면, 모델을 호출할 때 전달하기 쉽게 데이터를 적절히 가공하는 일을 함
  • 모델이 업무 수행을 완료하면, 그 결과를 가지고 화면을 생성하도록 뷰에게 전달
  • Servlet과 JSP를 사용하여 작성 가능

4) Front Controller 패턴 아키텍처

Front Controller 프로세스

  • 컨트롤러를 다시 2 가지로 분리
  • 클라이언트로부터 모든 요청을 받는 컨트롤러를 분리하여 이를 Front Controller
  • Front Controller는 적절한 세부 Controller에게 작업 위임
  • 각각의 애플리케이션 Controller는 클라이언트에게 보낼 뷰를 선택해서 최종 결과를 생성하는 작업
  • Front Controller 패턴은 인증이나 권한 체크처럼 모든 요청에 대하여 공통적으로 처리해야 하는 로직이 있을 경우 전체적으로 클라이언트의 요청을 중앙 집중적으로 관리하고자 할 경우 사용

MVC 패턴 모델2 아키텍처

MVC 패턴 자체를 모델2 아키텍처라고 표현하기도 함(모델1: 기존에 MVC 없는 아키텍처)

 

# Spring MVC

Spring DL이나 AOP 같은 기능 뿐 아니라 서블릿 기반의 웹 개발을 위한 MVC 프레임워크 제공

Spring MVC는 모델2 아키텍처와 Front Controller 패턴을 프레임워크 차원에서 제공 

Spring MVC 프레임워크는 Spring 기반이기에 Spring이 제공하는 트랜잭션 처리나 DI, AOP 손쉽게 사용 가능

Spring MVC에는 DispatcherServlet이라는 Front Controller 존재(Spring Framework의 코어)

 

Spring MVC 주요 구성 요소
Spring MVC 구성요소에 따른 처리 과정

# 실습 - Spring MVC 라이브러리 설정

mvnrepository.com 에서 spring mvc 검색

4.3.9 버전 복사 후 pom.xml의 dependency에 붙여넣기

 

web.xml에 Dispatcher Servlet 추가하기

	<servlet>
		<servlet-name>dispatcherServlet</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>

servlet-context.xml 파일 생성 - SpringMVCTest/src/main/webapp/WEB-INF/spring/appServlet

context:component-scan 기능과 mvc:annotation-driver 기능과 ViewResolver 설정이 필요

servlet-context.xml namespace 체크

<?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">

	<!-- DispatcherServlet Context: defines this servlet's request-processing infrastructure -->
	
	<!-- Enables the Spring MVC @Controller programming model -->
	<annotation-driven />

	<!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory -->
	<resources mapping="/resources/**" location="/resources/" />

	<!-- 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="kr.co.acomp.hello" />
	
	
	
</beans:beans>

 

'Archived(Programming) > Spring #2(기초)' 카테고리의 다른 글

Http 파라미터 처리  (0) 2020.03.12
@Controller  (0) 2020.03.11
Layered Architecture & @Component  (4) 2020.03.10
DI(Dependency Injection)  (0) 2020.03.10
IoC(Inversion of Control)  (0) 2020.03.10