Spring MVC 소개

bacccine·2022년 6월 27일
0

spring

목록 보기
7/10

MVC 패턴이란?

Application을 모델-뷰-컨트롤러로 나누어서 개발하는 방식
아키텍처 패턴 중 하나로, 주 목적은 Business logic과 Presentation logic을 분리하기 위함
Presentation logic과 관련된 패턴이다
웹에서 많이 사용한다

Model2 아키텍처라고도 한다
MVC 패턴을 적용하지 않은 상태가 Model1 아키텍처

MVC 패턴을 사용할 때의 이점

MVC 패턴을 사용하면 사용자 인터페이스로부터 비즈니스 로직을 분리하여 Application의 시각적 요소나 그 이면에서 실행되는 비즈니스 로직을 서로 영향없이 쉽게 고칠 수 있다

M(model)이란?

Application의 정보로, 데이터와 Business logic을 포함한다
contoller로부터 요청을 받아서 수행
Service와 DAO 클래스에 해당한다

Model 컴포넌트의 역할

데이터 저장소와 연동하여 사용자가 입력한 데이터나 사용자에게 출력할 데이터를 다루는 일을 수행
여러 개의 CRUD 변경 작업(추가,변경,삭제)을 하나의 작업으로 묶는 트랜잭션을 다룬다

V(view)란?

사용자에게 제공할 화면, Presentation Logic
HTML 등이 해당된다

View 컴포넌트의 역할

Model이 처리한 데이터나 그 작업 결과를 가지고 사용자에게 출력할 화면을 만든다
생성된 화면은 웹 브라우저가 출력하고, View 컴포넌트는 HTML과 CSS, JavaScript를 사용하여 웹 브라우저가 출력할 UI를 만든다
☞ 일반적으로 CSS와 JavaScript는 static한 resource로 인식하여 서버에서 실행되지 않고 보관만 하고 있다
클라이언트가 요청해야 클라이언트로 보내준다
HTML과 JSP 등을 사용하여 작성 가능
서버 사이드에서 view를 만들어주는 기술을 서버 템플릿이라고 한다. 대표적인 것이 Thyme leaf

C(controller)란?

Model과 View 사이의 상호작용을 관리한다
클라이언트는 controller와 통신하게 된다.
사용자로부터 요청을 받고, 응답을 돌려주는 것을 제어한다

Controller 컴포넌트의 역할

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

Front Controller 패턴 아키텍처

Spring의 MVC 패턴, 미리 내장되어 있다
Spring에서 @Controller를 작성할 때 기본적인 내용은 Front Controller가 수행해주기 때문에 작성이 쉬워진다

Front Controller는 클라이언트가 보낸 모든 요청을 받아서 공통적인 작업을 먼저 수행
적절한 세부 Controller에게 작업을 위임하는 역할
각각의 Application Controller는 클라이언트에게 보낼 View를 선택해서 최종 결과를 생성한다

Front Controller 패턴은 인증이나 권한 체크처럼 모든 요청에 대해 공통적으로 처리해야 하는 로직이 있을 경우 전체적으로 클라이언트의 요청을 중앙집중적으로 관리하고자 할 때 사용한다

Spring MVC의 특징

Spring은 DI나 AOP 같은 기능 뿐만 아니라, Servlet 기반의 웹 개발을 위한 MVC 프레임워크를 제공
Spring MVC는 Model2 아키텍처와 Front Controller 패턴을 프레임워크 차원에서 제공
Spring을 기반으로 하고 있기 때문에 트랜잭션 처리나 AOP 등을 쉽게 사용할 수 있다

Spring MVC와 Front Controller 패턴

대부분의 MVC 프레임워크들은 Front Controller 패턴을 적용해서 구현한다
Spring MVC도 Front Controller 역할을 하는 DispatcherServlet이라는 클래스를 계층의 맨 앞단에 놓고, 서버로 들어오는 모든 요청을 받아서 처리하도록 구성
예외가 발생했을 때 일관된 방식으로 처리하는 것도 Front Controller의 역할

Spring MVC의 주요 구성 요소

  구성요소   설명 
DispatcherServlet클라이언트의 요청을 받아 Controller에게 클라이언트의 요청을 전달하고, 결과 값을 View에게 전달하여 응답을 생성
HandlerMappingURL과 요청 정보를 기준으로 어떤 핸들러 객체를 사용할지 결정하는 객체. DispatcherServlet은 하나 이상의 핸들러 매핑을 가질 수 있다
Controller클라이언트의 요청을 처리한 뒤 Model을 호출하고 결과를 DispatcherServlet에게 알려줌
ModelAndViewController가 처리한 데이터 및 화면에 대한 정보를 보유한 객체, Controller의 리턴 타입
ViewController의 처리 결과 화면에 대한 정보를 보유한 객체
ViewResolverController가 리턴한 View 이름을 기반으로 Controller 처리 결과를 생성할 View를 결정. View를 쉽게 찾아서 클라이언트로 응답을 줄 수 있다

Spring MVC의 주요 구성 요소의 요청 처리 과정

  1. Spring MVC는 DispatcherServlet이 Front Controller로써 작동한다
  2. 먼저 Handler Mapping을 통해 어떤 Controller를 요청해야 할 지 질의한다
  3. 결정이 되었으면 실제 Controller를 요청한다. 개발자가 실제로 개발해야하는 부분
  4. Controller는 DispatcherServlet에게 ModelAndView를 응답, ModelAndView에는 데이터와 View의 이름이 들어가 있다
  5. DispatcherServlet은 ViewResolver를 통해 View를 확보
  6. DispatcherServlet은 View를 응답

Spring MVC에서 DispatchrerServlet 설정

  1. DispatcherServlet은 <servlet>태그로 Web.xml에 등록한다
<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/config/spring/dispatcherServlet.xml</param-value>
	</init-param>
</servlet>
<servlet-mapping>
	<servlet-name>dispatcherServlet</servlet-name>
	<url-pattern>/</url-pattern>
</servlet-mapping>

<filter>
	<filter-name>encodingFilter</filter-name>
	<filter-class>org.springframework.web.filter.CharacterEncodigFilter<filter-class>
	<init-param>
		<param-name>encoding</param-name>
		<param-value>UTF-8</param-value>
	</init-param>
	<filter-mapping>
			<filter-name>encodingFilter</filter-name>
			<url-pattern>*</url-pattern>
	</filter-mapping>
</filter>
  1. WEB-INF 폴더 하위에 spring 폴더를 만들고 Spring Bean Configuration File로 새로 만들기를 선택하여
    servlet-context.xml 파일을 만든다

  2. servlet-context.xml에 컴포넌트를 자동 스캔할 수 있는 <context:component-scan>과 controller를 자동으로 찾아주는
    <mvc:annotation-driven/>, viewResolver를 설정한다

  3. Namespaces에서 context,mvc 체크표시 후 base-package에 패키지명을 입력

  4. viewResolver는 <bean>으로 설정

	<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/WEB-INF/views/"></property>
		<property name="suffix" value=".jsp"></property>
	</bean>

6.encoding 방식이 없으면 요청 시 글자가 깨진다. 한글 깨짐을 방지하기 위해 <filter>를 통해 encoding 방식을 지정한다

0개의 댓글