1. MVC(Model-View-Controller) 패턴의 개념
모델-뷰-컨트롤러(Model-View-Controller, MVC)는 소프트웨어 공학에서 사용되는
아키텍처 패턴으로 MVC 패턴의 주목적은 business logic과 presentation logic을 분리하기 위함이다.
MVC 패턴을 사용하면, 사용자 인터페이스로부터 비즈니트 로직을 분리하여 애플리케이션의 시각적 요소나
그 이면에서 실행되는 비즈니스 로직을 서로 영향 없이 쉽게 고칠수 있는 애플리케이션을 만들수 있다.
- Model : 애플리케이션의 정보(데이터, Business Logic 포함)
- View : 사용자에게 제공할 화면(Presentation Logic)
- Controller : Model과 View 사이의 상호 작용을 관리
2. MVC 컴포넌트의 역할
1. 모델(Model) 컴포넌트
- 데이터 저장소(db)와 연동하여 사용자가 입력한 데이터나 사용자에게 출력할 데이터를 다루는 일을 한다.
- 여러개의 데이터 변경 작업(추가, 변경, 삭제)을 하나의 작업으로 묶는 트랜젝션을 다루는 일도 한다.
- DAO 클래스, Service 클래스에 해당한다.
2. 뷰(View) 컴포넌트
- 모델이 처리한 데이터나 그 작업 결과를 가지고 사용자에게 출력할 화면을 만드는 일을 한다.
- 생성된 화면은 웹 브라우저가 출력하고, 뷰 컴포넌트는 HTML, CSS, JS로 웹브라우저가 출력할 UI를 만든다.
- HTML, JSP 등이 사용된다.
3. 컨트롤러(Controller) 컴포넌트
- 클라이언트의 요청을 받았을 떄 그 요청에 대해 실제 업무를 수행하는 모델 컴포넌트를 호출하는 일을 한다.
- 클라이언트가 보낸 데이터가 있다면, 모델을 호출할 때 전달하기 쉽게 데이터를 적절히 가공하는 일을 한다.
- 모델이 업무 수행을 완료하면, 그 결과를 가지고 화면을 생성하도록 뷰에 전달한다.
- Servlet과 JSP를 사용하여 작성할수 있다.
3. 모델1,2, FrontController 아키텍처
- 모델 1 아키텍처 : Controller 역할을 JSP가 담당한다.
- 모델 2 아키텍처 : Controller 역할을 Servlet이 담당한다.
- FrontController 패턴 아키텍처
- Front Controller는 클라이언트가 보낸 요청을 받아서 공통적인 작업을 먼저 수행한다.
- Front Controller는 적절한 세부 Controller에게 작업을 위임한다.
- 각각의 애플리케이션 Controller는 클라이언트에게 보낼 뷰를 선택해서 최종 결과를 생성한다.
- Front Controller 패턴은 인증니나 권한 체크처럼 모든 요청에 대하여 공통적으로 처리해야 하는
로직이 있을 경우 전체적으로 클라이언트의 요청을 중앙 집중적으로 관리하고자 할 경우에 사용한다.
4. Spring MVC의 특징
- Spring은 DI나 AOP 같은 기능뿐만 아니라, 서블릿 기반의 웹 개발을 위한 MVC 프레임워크를 제공한다.
- Spring MVC는 모델2 아키텍처와 Front Controller 패턴을 프레임워크 차원에서 제공한다.
- Spring MVC 프레임워크는 Spring을 기반으로 하고 있기 때문에 Spring이 제공하는 트랜젝션 처리나 DI, AOP등을 손쉽게 사용한다.
- 대부분의 MVC 프레임워크들은 Front COntroller 패턴을 적용해서 구현한다.
- Spring MVC도 Front Controller 역할을 하는 DispatherServlet 이라는 클래스를 계층의 맨 앞단에 놓고,
서버로 들어오는 모든 요청을 받아서 처리하도록 구성한다.
- 예외가 발생했을 때 일관된 방식으로 처리하는 것도 Front Controller의 역할이다.
5. DipatcherServlet 클래스
- Front Controller 패턴 적용했다.
- web.xml에서 설정한다.
- 클라이언트로부터의 모든요청을 전달 받는다.
- Controller나 View와 같은 Spring MVC의 구성요소를 이용하여 클라이언트에게 서비스를 제공한다.
1. Spring MVC 처리과정 및 구성요소
DispathcerServlet
- 클라이언트의 요청을 받아서 Controller에게 클라이언트의 요청을 전달하고 리턴한 결과값을 View에게
전달하여 알맞은 응답을 생성한다.
HadlerMapping
- URL과 요청정보를 기준으로 어떤 핸들러 객체를 사용할 지 결정하는 객체이며, DispathcerServlet은 하나 이상의
핸들러 매핑을 가질 수 있다.
Controller
- 클라이언트의 요청을 처리한 뒤, Model을 호출하고 그 결과를 DispathcerServlet에게 알려준다.
ModelAndView
- Controller가 처리한 데이터 및 화면에 대한 정보를 보유한 객체이다.
View
- Controller의 처리 결과 화면에 대한 정보를 보유한 객체이다.
ViewResolver
- Controller가 리턴한 뷰 이름을 기반으로 Controller 처리 결과를 생성할 뷰를 결정한다.
spring mvc 테스트 코드 첨부
'전체 > Spring' 카테고리의 다른 글
REST, RESTful API개념, 기존 방식과의 차이점 (0) | 2019.02.24 |
---|---|
Spring AOP, Aspect 개념 특징, AOP 용어 정리 (1) | 2019.02.24 |
MyBatis 개념, 특징, DB 액세스 아키텍처, 데이터 액세스 계층 흐름도, 주요 컴포넌트 역할 정리 (0) | 2019.02.24 |
Bean 등록 전략(XML 단독 사용, 어노테이션 XML 혼용 사용, 어노테이션 단독 사용) (0) | 2019.02.23 |
Bean 등록 및 의존관계 주입 Annotation 종류 (0) | 2019.02.23 |