19강 Spring MVC의 개요
학습 목표 :
MVC 패턴의 개념과 모델2 아키텍쳐에 대하여 이해할 수 있다.
Spring MVC 개념에 대하여 이해할 수 있다.
Spring MVC 기반 웹 어플리케이션 개발에대해 이해할 수 있다.
MVC(Model-View-Controller) 패턴의 개념
: 모델-뷰-컨트롤러(MVC)는 소프트웨어 공학에서 사용되는 아키텍쳐 패턴으로 MVC패턴의 주 목적은 Business logic과 Presentation logic을 분리하기 위함이다.
MVC 패턴을 사용하면, 사용자 인터페이스로부터 비즈니스 로직을 분리하여 애플리케이션의 시각적 요소나 그 이면에서 실행되는 비즈니스 로직을 서로 영향 없이 쉽게 고칠 수 있는 애플리케이션을 만들 수 있다.
- Model : 애플리케이션의 정보(데이터, Business Logic 포함)
- View : 사용자에게 제공할 화면(Presentation Logic)
- Controller : Model과 View 사이의 상호 작용을 관리
모델(Model) 컴포넌트
- 데이터 저장소(ex : 데이터베이스 등)와 연동하여 사용자가 입력한 데이터나 사용자에게 출력할 데이터를 다루는 일을 함
- 여러 개의 데이터 변경 작업(추가, 변경, 삭제)을 하나의 작업으로 묶는 트랜잭션을 다루는 일도 함
- DAO 클래스, Service 클래스 해당
뷰(View) 컴포넌트
- 모델이 처리한 데이터나 그 작업 결과를 가지고 사용자에게 출력할 화면을 만드는 일을 함
- 생성된 화면은 웹 브라우저가 출력하고, 뷰 컴포넌트는 HTML과 CSS, Java Script를 사용하여 웹 브라우저가 출력할 UI를 만듦
- Html과 JSP를 사용하여 작성할 수 있음
컨트롤러(Controller) 컴포넌트
- 클라이언트의 요청을 받았을 때 그 요청에 대해 실제로 업무를 수행하는 모델 컴포넌트를 호출하는 일을 함
- 클라이언트가 보낸 데이터가 있다면, 모델을 호출할 때 전달하기 쉽게 데이터를 적절히 가공하는 일을 함
- 모델이 업무 수행을 완료하면, 그 결과를 가지고 화면을 생성하도록 뷰에게 전달(클라이언트 요청에 대해 모델과 뷰를 결저아형 전달)
- Servlet과 JSP를 사용하여 작성할 수 있음
모델 1은 컨트롤러의 역할을 JSP가 담당함. 그래서 컨트롤러 부분에 자바코드가 많이 들어가서 복잡하였음.
(1) : 웹 브라우저가 웹 애플리케이션 실행을 요청하면, 웹 서버가 그 요청을 받아서 서블릿 컨테이너(ex : 톰캣서버)에 넘겨준다. 서블릿 컨테이너는 URL을 확인하여 그 요청을 처리할 서블릿을 찾아서 실행한다.
(2) : 서블릿은 실제 업무를 처리하는 모델 자바 객체의 메서드를 호출한다.
만약 웹 브라우저가 보낸 데이터를 저장하거나 변경해야 한다면 그 데이터를 가공하여 VO 객체(Value Object)를 생성하고, 모델 객체의 메서드를 호출할 때 인자 값으로 넘긴다.
모델 객체는 엔터프라이즈 자바빈일 수도 있고, 일반 자바 객체(POJO)일 수도 있다.
(3) : 모델 객체는 JDBC를 사용하여 매개변수로 넘어온 값 객체를 데이터베이스에 저장하거나, 데이터베이스로부터 질의 결과를 가져와서 VO 객체로 만들어서 반환한다.
(4) : 서블릿은 모델 객체로부터 반환 받은 값을(VO 객체) JSP에 전달한다.
(5) : JSP는 서블릿으로 부터 전달받은 값 객체를 참조하여 웹 브라우저가 출력할 결과 화면을 만들고, 웹 브라우저에 출력함으로써 요청 처리를 완료한다.
(6) : 웹 브라우저는 서버로부터 받은 응답 내용을 화면에 출력한다.
Front Controller 패턴 아키택처
- Front Controller는 클라이언트가 보낸 요청을 받아서 공통적인 작업을 먼저 수행
- Front Controller는 적절한 세부 Controller에게 작업을 위임
- 각각의 애플리케이션 Controller는 클라이언트에게 보낼 뷰를 선택해서 최종 결과를 생성하는 작업
- Front Controller 패턴은 인증이나 권한 체크처럼 모든 요청에 대하여 공통적으로 처리해야 하는 로직이 있을 경우 전체적으로 클라이언트의 요청을 중앙 집중적으로 관리하고자 할 경우에 사용
2. Spring MVC 개념
- Spring은 DI나 AOP 같은 기능뿐만 아니라, 서블릿 기반의 웹 개발을 위한 MVC 프레임워크를 제공
- Spring MVC는 모델2 아키텍쳐와 Front Controller 패턴을 프레임워크 차원에서 제공
- Spring MVC 프레임워크는 Spring을 기반으로 하고 있기 때문에 Spring이 제공하는 트랜잭션 처리나 DI 및 AOP등을 손- 쉽게 사용
- 대부분의 MVC 프레임워크들은 Front Controller 패턴을 적용해서 구현
- Spring MVC도 Front Controller 역할을 하는 DispatcherServlet이라는 클래스를 계층의 맨 앞단에 놓고, 서버로 들어오는 모든 요청을 받아서 처리하도록 구성
- 예외가 발생했을 때 일관된 방식으로 처리하는 것도 Front Controller의 역할
DispatcherServlet 클래스
- Front Controller 패턴 적용
- web.xml에 설정
- 클라이언트로부터의 모든 요청을 전달 받음
- Controller나 View와 같은 Spring MVC의 구성요소를 이용하여 클라이언트에게 서비스를 제공
(1) : 클라이언트의 요청이 DispatcherServlet에 전달된다.
(2) : DispatcherServlet은 HandlerMapping을 사용하여 클라이언트의 요청을 처리할 Controller을 획득한다.
(3) : DispatcherServlet은 Controller 객체를 이용하여 클라이언트의 요청을 처리한다.
(4) : Controller는 클라이언트 요청 처리 결과와 View 페이지 정보를 담은 ModelAndView 객체를 반환한다.
(5) : DispatcherServlet은 ViewResolver로부터 응답 결과를 생성할 View 객체를 구한다.
(6) : View는 클라이언트에 전송할 응답을 생성한다.
Spring MVC 기반 웹어플리케이션 개발
댓글