MVC란 무엇인가
MVC란 Model, View, Controller의 약자로서 하나의 애플리케이션, 프로젝트를 구성할 때 그 구성 요소를 세가지의 역할로 구분한 패턴이다.
모델(Model)
어플리케이션이 무엇을 할 것인지 정의한다. 내부 비즈니스 로직을 처리하기 위한 역할을 한다. 즉, 데이터 저장소(DB)와 연동하여 사용자가 입력한 데이터나 사용자에게 출력할 데이터를 다룬다.
Model은 다른 컴포넌트들에 대해 알지 못한다. 자기 자신이 무엇을 수행하는지만 알고 있다.
뷰(View)
최종 사용자에게 무엇을 화면(UI)로 보여준다. 화면에 무엇을 보여주기 위한 역할을 한다. 즉, 모델이 처리한 데이터나 그 작업 결과를 가지고 사용자에게 출력할 화면을 만든다. 만든 화면은 웹 브라우저가 출력한다.
View 역시도 다른 컴포넌트들에 대해 알지 못한다. 자기 자신이 무엇을 수행하는지만 알고 있다.
컨트롤러(Controller)
Model과 View 사이에 있는 *컴포넌트이다. Model이 데이터를 어떻게 처리할지 알려주는 역할을 한다. 클라이언트의 요청을 받으면 해당 요청에 대한 실제 업무를 수행하는 Model을 호출한다. 클라이언트가 보낸 데이터가 있다면, 모델을 호출할 때 전달하기 쉽게 적절히 가공한다. Model이 업무 수행을 완료하면 그 결과를 가지고 화면을 생성하도록 View를 결정하여 전달하는 일종의 조정자로서의 일을 한다.
Controller는 다른 컴포넌트들에 대해 알고 있다. 자기 자신 외에 Model과 View가 무엇을 수행하는지 알고 있다.
InputView를 통해 사용자로부터 입력을 받고, Model을 통해 내부 비즈니스 로직을 처리하고, OutputView를 통해 사용자에게 화면을 출력한다.
*컴포넌트 란?
컴포넌트(Component)란 프로그래밍에 있어 재사용이 가능한 각각의 독립된 모듈을 뜻한다.
그림에서 확인 할 수 있듯이 컴포넌트 기반 프로그래밍을 하면 마치 레고 블록처럼 이미 만들어진 컴포넌들을 조합하여 화면을 구성할 수 있다.
DispatcherServlet
클라이언트의 요청을 받아 컨트롤러에게 전달, 컨트롤러가 리턴한 결과값을 View에 전달하여 알맞은 응답을 생성하도록 한다.
Handlermapping
클라이언트의 요청 URL을 어떤 컨트롤러가 처리할지 결정한다.
HandlerAdapter
DispatcherServlet의 처리 요청을 변환해서 컨트롤러에게 전달, 그 응답결과를 DispatcherServlet이 요구하는 형식으로 변환한다.
Controller
클라이언트의 요청을 처리한 뒤, 결과를 리턴한다.
ModelAndView
컨트롤러가 처리한 결과 정보 및 뷰 선택에 필요한 정보를 담는다.
ViewResolver
컨트롤러의 처리 결과를 보여줄 뷰를 결정한다.
View
컨트롤러의 처리 결과 화면을 생성한다. JSP 템플릿 파일등을 이용한다.