-> 우리가 흔히 말하는 UI를 만들며 SSR에 사용된다.
템플릿 엔진이 나온 이유는 자바코드로 HTML을 만들어내는 것이 아닌 HTML 문서에 동적으로 변경해야하는 부분만 자바 코드를 넣기때문에.
대표적인 템플릿 엔진
- Thymeleaf : 스프링과 통합이 잘 되어있고, 다양한 기능 포함
Servlet만 사용하면 화면을 그리는 view 영역과 비지니스 로직이 다 섞여있음. 책임감이 너무 큼
JSP는 Servlet에서 HTML을 만드는 부분 View가 분리됨. 그래도 책임이 커서 유지보수 어려움
그래서 생성하게 된 MVC(Model View Controller)영역.
1) HTTP Request를 전달받아 파라미터를 검증한다.
2) 비지니스 로직을 실행한다.
- 비지니스 로직을 Controller에 포함하게되면 Controller가 너무 많은 역할을 담당하게 되어 일반적으로 Service Layer를 별도로 만들어서 처리한다.
- Database와 상호작용 하는 Layer를 따로 구분하여 Repository Layer를 추가로 구성한다.
- 위와 관련된 자세한 내용인 Layered Architecture는 다음 강의에서 알아보자.
- Controller도 비지니스 로직을 포함할 수 있지만 일반적으로 Service Layer를 호출하는 역할을 담당한다.
3) View에 전달할 결과를 조회하여 Model 객체에 임시로 저장한다.
1) View에 출력할 Data를 저장하는 객체이다.
2) View는 비지니스 로직이나 Data 접근을 몰라도 되고 View Rendering에만 집중하면 된다.(책임 분리)
1) Model 객체에 담겨져 있는 Data를 사용하여 화면을 Rendering 한다.
MVC 패턴을 적용 후 View의 역할은 필요한 데이터를 Model 에서 참조하여 화면을 그리는 역할만 수행하면 된다. 하지만 Controller에 해당하는 부분은 여전히 문제를 가지고 있다.
문제점
dispatcher.forward(request, response)
View로 이동하는 forward가 항상 중복 호출된다.String path= “/WEB-INF/views/new-form.jsp”
View의 path를 입력(중복 작업)한다.HttpServletResponse
객체를 사용하는 경우가 적다. (JSP에서 모두 해결하기 때문)공통 기능 처리
Servlet(Controller)이 호출되기 전에 공통 기능을 하나의 Servlet에서 처리해주는 패턴이다.
-> 입구가 오직 하나, 프론트 컨트롤러(Servlet)에서 공통기능을 처리하면 된다.
프론트 컨트롤러의 역할
HttpServlet
을 상속받거나, @WebServlet
을 사용하지 않아도 된다.