사용자 인터페이스, 데이터 및 논리 제어를 구현하는데 널리 사용 되는 소프트웨어 디자인 패턴
소프트웨어의 비즈니스 로직과 화면을 구분하는데 중점을 둔다
간단한게 Model, View, Controller로 분리하여 개발하는 디자인 패턴
데이터 저장소(데이터베이스)와 연동하여 사용자가 입력한 데이터나 사용자에게 출력할 데이터를 다루는 일을 한다.
여러 개의 데이터 변경 작업(추가, 변경, 삭제)을 하나의 작업으로 묶는 트랜잭션을 다루는 일을 한다
DAO클래스 Service 클래스에 해당
모델이 처리한 데이터나 그 작업 결과를 가지고 사용자에게 출력할 화면을 만듦
생성된 화면은 웹 브라우저가 출력하고, View 는 HTML/CSS/JS 를 사용해서 웹 브라우저가 출력할 UI 를 만듬
클라이언트의 요청을 받았을 때 그 요청에 대해 실제 업무를 수행하는 모델을 호출하는 일을 한다
클라이언트가 보낸 데이터가 있으면, 모델을 호출할 때 전달하기 쉽게 데이터를 적절히 가공하는 일을 함
모델이 업무 수행을 완료하면, 그결과를 가지고 화면을 생성하도록 뷰에게 전달
DispatcherServlet:
HTTP 프로토콜로 들어오는 모든 요청을 가장 먼저 받아 적합한 컨트롤러에 위임해주는 프론트 컨트롤러(Front Controller)
HandlerMapping:
HTTP 요청정보를 이용해서 컨트롤러를 찾아주는 기능을 수행
HandlerAdapter:
HandlerMapping을 통해 찾은 컨트롤러를 직접 실행하는 기능을 수행
Controller:
클라이언트의 요청을 처리한 뒤, 결과를 DispatcherServlet에게 리턴
ModelAndView:
컨트롤러가 처리한 결과 정보 및 뷰 선택에 필요한 정보를 담음
ViewResolver:
컨트롤러의 처리 결과를 생성할 뷰를 결정
MVC패턴을 사용하면, 사용자 인터페이스로부터 비지니스 로직을 분리하여 애플리케이션의 시각적 요소나 그 이면에서 실행되는 비지니스 로직을 서로 영향 없이 쉽게 고칠 수 있는 애플리케이션을 만들 수 있음
MVC 패턴의 주 목적은 Business logic과 Presentation logic을 분리하기 위해서 이다