MVC패턴의 개념과 모델 2 아키텍처
MVC(Model-View-Controlle) 패턴의 개념
- 모델-뷰-컨트롤러는 소프트웨어 공학에서 사용되는 아키텍처 패턴으로 MVC 패턴의 주목적은 비즈니스 로직과 presentaiton 로직을 분리하기 위함이다.
- MVC 패턴을 사용하면, 사용자 인터페이스로부터 비지니스 로직을 분리하여 애플리케이션의 시각적 요소나 그 이면에서 실행되는 비즈니스 로직을 서로 영향 없이 쉽게 고칠 수 있는 애플리케이션을 만들 수 있다.
- Model 애플리케이션의 정보 (데이터, 비즈니스 로직 포함)
- View 사용자에게 제공할 화면 (Presentation Logic)
- Controller Model과 View 사이의 상호작용을 관리
MVC 패턴의 개념
각각의 MVC 컴포넌트 역할
모델 컴포넌트
- 데이터 저장소 (DB) 와 연동하여 사용자가 입력한 데이터나 사용자에게 출력할 데이터를 다루는 일
- 여러 개의 데이터 변경 작업 (추가 변경 삭제)을 하나의 작업으로 묶는 트랜잭션을 다루는 일도 함
- DAO 클래스, Service 클래스에 해당
뷰 컴포넌트
- 모델이 처리한 데이터나 그 작업 결과를 가지고 사용자에게 출력할 화면을 만드는 일
- 생성된 화면은 웹 브라우저가 출력하고 뷰 컴포넌트는 html, css, 자바 스크립트를 사용하여 UI 제작
- html, jsp를 이용하여 제작
컨트롤러 컴포넌트
- 클라이언트의 요청을 받았을 때 그 요청에 대해 실제 업무를 수행하는 모델 컴포넌트 호출
- 클라이언트가 보낸 데이터가 있다면, 모델 호출 시 전달하기 쉽게 데이터를 적절히 가공
- 모델이 업무수행을 완료하면 그 결과를 가지고 화면을 생성하도록 뷰에게 전달
- Sevlet과 JSP를 사용하여 작성
모델 2 아키텍쳐 개념
모델 1 아키텍쳐
- Controller 역할을 JSP가 담당함
- JSP에 자바 코드가 들어가게 되어 복잡해짐.
모델 2 아키텍쳐
- 모델 2 아키텍쳐 : Controller 역할을 Servlet 이 담당함
모델2 아키텍처의 호출 순서
- 웹브라우저가 웹 애플리케이션 실행을 요청하면, 웹 서버가 그 요청을 받아 서블릿 컨테이너 (톰캣 서버)에 넘겨준다. 서블릿 컨테이너는 URL을 확인하여 그 요청을 처리할 서블릿을 찾아서 실행한다.
- 서블릿은 실제 업무를 처리하는 모델 자바 객체의 메서드를 호출한다. 만약 웹브라우저가 보낸 데이터를 저장하거나 변경해야 한다면 그 데이터를 가공하여 VO 객체를 생성하고, 모델 객체의 메서드를 호출할 때 그 인자 값으로 넘긴다. 모델 객체는 엔터프라이즈 자바 빈 일 수도 있고, 일반 자바 객체 (POJO로 된 서비스 , DAO object) 일 수도 있다.
- 모델 객체는 JDBC를 사용하여 매개변수로 넘어온 값 객체를 데이터베이스에 저장하거나, 질의 결과를 가져와 VO 객체로 만들어 반환한다.
- 서블릿은 모델 객체로부터 반환 값을 JSP에 전달한다.
- JSP는 서블릿으로부터 받은 값 객체를 참조하여 웹 브라우저가 출력할 결과 화면을 만들고 요청 처리 완료
- 웹 브라우저는 서버로부터 받은 응답 내용을 화면에 출력한다.
Front Controller 패턴 아키텍처
Front Controller 프로세스
- 클라이언트가 보낸 요청을 받아 공통적인 작업을 먼저 수행
- 적절한 세부 Controller에게 작업을 위임
- 각각의 애플리케이션 컨트롤러는 클라이언트에게 보낼 뷰를 선택하여 최종 결과를 생성
- 인증이나 권한 체크처럼 모든 요청에 대해 공통적으로 처리해야 하는 로직이 있을 경우 전체적으로 클라이언트의 요청을 중앙 집중적으로 관리하고자 할 경우에 사용
Spring MVC 개념
Spring MVC 특징
- DI나 AOP 같은 기능뿐만 아니라, 서블릿 기반의 웹 개발을 위한 MVC 프레임워크 제공
- 모델 2 아키텍처와 Front Controller 패턴을 프레임워크 차원에서 제공
- Spring을 기반으로 하고 있기에 트랜잭션 처리나 DI AOP를 손쉽게 사용
Spring MVC와 Front Controller 패턴
- 대부분의 MVC 프레임워크들은 Front Controller 패턴을 적용해서 구현
- Spring MVC 도 Front Controller 역할을 하는 DispatcherServlet이라는 클래스를 계층의 맨 앞단에 놓고, 서버로 들어오는 모든 요청을 받아서 처리하도록 구성됨
- 예외가 발생했을 때 일관된 방식으로 처리하는 것도 Front Controller의 역할
DispatcherServlet 클래스
- Front Controller 패턴 적용
- web.xml 에 설정
- 클라이언트로부터의 모든 요청을 전달받음
- Controller 나 View와 같은 Spring MVC 구성요소를 이용하여 클라이언트에게 서비스 제공
호출 순서
- 앞단에서 DispatcherServlet 이 들어오는 요청을 받는다.
- 개발자가 작성한 컨트롤러 클래스에게 요청을 위임한다.
- 컨트롤러 클래스는 해당되는 요청을 처리, 데이터베이스를 다녀와 model 객체에 담아줌
- 컨트롤러는 DispatcherServlet에게 model 전달
- DispatcherServlet은 View template에게 model 전달
- View template은 model을 이용하여 화면을 그리고 결괏값을 DispatcherServlet 에게 전달
- DispatcherServlet 최종 응답을 브라우저에게 전달
Spring MVC의 주요 구성 요소
DispatcherServlet
- 클라이언트의 요청을 받아 컨트롤러에게 클라이언트의 요청을 전달하고, 리턴한 결과값을 View에게 전달하여 알맞은 응답을 생성
HandlerMapping
- URL과 요청 정보를 기준으로 어떤 핸들러 객체를 사용할지 결정하는 객체이며, DispatcherServlet은 하나 이상의 핸들러 매핑을 가질 수 있다.
Controller
- 클라이언트의 요청을 처리한 뒤, 모델을 호출하고 결과를 DispatcherServlet에게 알려줌
ModelAndView
- Controller 가 처리한 데이터 및 화면에 대한 정보를 보유한 객체
View
- Controller의 처리 결과 화면에 대한 정보를 보유한 객체
ViewResolver
- Controller가 리턴한 뷰 이름을 기반으로 Controller 처리 결과를 생성할 뷰를 결정
Spring MVC의 주요 구성 요소의 요청 처리 과정
- 클라이언트의 요청이 DispatcherServlet에게 전달된다.
- DispatcherServlet은 HandlerMapping을 사용하여 클라이언트 요청을 처리할 Controller 획득
- DispatcherServlet은 Controller 객체를 이용하여 클라이언트의 요청 처리
- Controller는 클라이언트의 요청 처리 결과와 View 페이지 정보를 담은 ModelAndView 객체를 반환
- DispatcherServlet은 ViewResolver로부터 응답 결과를 생성할 View 객체 구현
- View는 클라이언트에게 전송할 응답을 생성
Spring MVC 기반 웹 애플리케이션 개발
Spring MVC 기반 웹 어플리케이션 작성 절차
- 클라이언트의 요청을 받는 DispatcherServlet을 web.xml에 설정
- 클라이언트의 요청을 처리할 Controller 작성
- Spring Bean으로 Controller 등록
- JSP를 이용한 View 영역의 코드 작성
- Browser 상에서 JSP 실행
'Back-end > Spring' 카테고리의 다른 글
Spring MVC 어플리케이션 작성(1) (0) | 2021.06.14 |
---|---|
Spring MVC 환경설정 (0) | 2021.06.14 |
MyBatis 어플리케이션 작성(2) (0) | 2021.06.14 |
MyBatis 어플리케이션 작성(1) (0) | 2021.06.14 |
MyBatis 개요 (0) | 2021.06.11 |