정적 컨텐츠: 정적 페이지를 띄어주는 것
MVC, 템플릿: 서버에서 jsp 등의 html을 동적 페이지로 띄어주는 것
API: json으로 클라이언트에게 데이터를 전달하는 것
어플리케이션을 Model, View, Controller로 구분한 디자인 패턴(=개발 방법론)
사용자 인터페이스(html, jsp)와 비즈니스 로직(java, servlet)을 분리하는 것이 중점임
Model과 View를 연결하는 부분
Model에게 데이터를 요청하고, 반환 받은 데이터를 View에 반영함
Controller는 데이터 요청을 담당하며, Service 계층을 별도로 만들어 비즈니스 로직을 처리하도록 함
MVC 데이터 처리 순서
- 사용자가 웹 사이트에 접속
- Controller는 사용자가 요청한 웹 페이지의 데이터를 가져오기 위해 Model 호출
- Model은 Service(비즈니스 로직), Dao(DB 제어)를 거쳐 결과를 리턴
- Controller는 Model이 리턴한 결과를 View에 반영
- 사용자는 데이터가 반영된 View를 보게됨
개발 로직과 디자인 로직을 구분하여 개발함으로써 서로의 의존성을 낮춤
기능의 세분화로 확장성이 좋고 유지보수에 용이함
1) 하나의 Controller에 수많은 View와 Model이 연결됨으로 Controller 부하가 커지게 됨
2) 자연스럽게 Model과 View의 의존성을 완전히 분리할 수 없게 됨
3) Controller에 중복, 불필요한 코드가 많아짐
가. forward, ViewPath 중복
request.getRequestDispatcher("/WEB-INF/guestbook/guestbooks.jsp"); rd.forward(request, response);
나. 불필요한 코드 중복
: HttpServlet을 상속 받으므로 불필요한 메서드 파라미터를 Override하게 됨
protected void doPost(HttpServletRequest request, HttpServletResponse response)
다. 공통 기능 처리 불가
: 로깅 처리를 위해 Controller마다 코드를 구현해야 하고 결국 중복 코드 발생
Massive-View-Controller
MVP, MVVP, Flux, Redux 등의 디자인 패턴 발생
Spring MVC 도입
출처