MVC 패턴
- 비즈니스 로직과 프레젠테이션 로직의 분리하기 위한 아키텍쳐 패턴
Model 컴포넌트
- 데이터 저장소와 연동해 입력받거나 출력할 데이터 처리
- DAO, Service 클래스에 해당된다.
- 여러 트랜잭션을 다루는 일도 한다.
View 컴포넌트
- 모델이 처리한 데이터, 작업 결과를 가지고 출력할 화면을 만드는 일
- HTML, CSS, JS를 사용해 웹 브라우저가 출력할 UI 만듬
Controller 컴포넌트
- 클라이언트 요청을 받았을 때 요청에 대해 실제 업무 수행하는 모델 컴포넌트 호출
- 클라이언트가 보낸 데이터를 호출 시 전달하기 쉽게 데이터 가공
- 모델이 업무 수행 완료 시 결과를 뷰를 결정 후 전달
- Servlet JSP 사용해 작성
모델1 & 모델2
모델1
뷰와 컨트롤러 역할을 JSP 페이지에서 모두 처리하는 구조
모델2
JSP는 뷰의 역할만하고 컨트롤러 역할을 하는 Servlet을 구현
모델2 호출 순서
Front Controller 패턴
- Front Controller가 클라이언트 요청을 받아 공통적인 작업을 먼저 수행 후 적절한 세부 Controller에게 작업 위임
- 세부 Controller는 클라이언트에게 보낼 뷰 선택, 최종 결과 생성
- 인증, 권한 체크 등 공통 처리할 로직이 있을 경우 사용
Spring MVC
특징
- 서블릿 기반 웹 개발을 위한 MVC 프레임워크 제공
- 모델 2 아키텍쳐와 Front Controller 패턴 제공
- Front Controller 역할은 DispatcherServlet이 하며 모든 요청을 받아 처리하도록 구성
- Spring 기반이기 때문에 DI, AOP 등 쉽게 이용
구성 요소
DispatcherServlet
클라이언트 요청을 받아 Controller에 요청 전달, 리턴 결과 값을 View에게 전달해 응답생성
HandlerMapping
URL 요청정보를 받아 어떤 핸들러 객체 사용할 지 결정
Controller
클라이언트 요청 처리 후 Model 호출, 결과를 DispatcherServlet에 알려줌
ModelAndView
Controller가 처리한 데이터 및 화면 정보 객체
View
Controller 처리 결과 화면에 대한 정보 보유한 객체
ViewResolver
Controller가 반환한 뷰 이름 기반으로 Controller 처리 결과 생성할 View 결정
처리 과정
- DispatcherServlet에 클라이언트 요청 전달
- DispathcerServlet이 HandlerMapping 사용해 Controller 객체 선택 후 요청 처리
- Controller는 클라이언트 요청처리 결과와 View 페이지 정보를 ModelAndView 객체에 담아 반환
- DispatcherServlet은 ViewResolver로 부터 응답 결과 생성할 View 객체 구함
- View는 클라이언트에게 전송할 응답 생성
웹 어플리케이션 작성 절차
- 클라이언트 요청 받는 DispatcherServlet web.xml에 설정
- 클라이언트 요청 처리할 Controller 작성
- Spring Bean으로 Controller 등록
- JSP를 이용해 View 영역 코드 작성
- 브라우저 상에서 JSP 실행