서블릿으로 개발할 때는 뷰(View) 화면을 위한 HTML을 만드는 작업이 자바 코드에 섞여서 지저분하고 복잡했다.
이러한 문제를 JSP를 사용함으로써 뷰를 생성하는 HTML 작업을 깔끔하게 가져가고 동적으로 변경이 필요한 부분에만 자바 코드를 적용했다. 그런데 이렇게 해도 몇 가지 고민이 해결되지 않는다.
우선 JSP 파일엔 자바 코드, 데이터를 조회하는 리포지토리 등 다양한 코드가 JSP에 노출되어 있다. 그리고 JSP 파일이 너무 많은 역할을 한다.
하나의 JSP나 서블릿으로 비즈니스 로직과 뷰 렌더링까지 모두 처리하면 너무 많은 역할을 하기 때문에 유지보수가 어려워진다.
굉장히 중요한 개념으로 둘 사이에 변경의 라이브 사이클이 다르다는 것이다. 예를 들어 UI 일부를 수정하는 것과 비즈니스 로직을 수정하는 것은 각각 다르게 일어날 확률이 매우 높다. 즉, 변경의 라이프사이클이 다른 부분을 하나의 코드로 관리하는 것은 유지보수하기 좋지 않다.
하나의 서블릿이나 하나의 JSP로 처리하던 것을 컨트롤러(Controller)와 뷰(View)의 영역으로 역할을 나눈 것을 의미한다.
추가적으로 form URL을 입력할 때 '/경로' 로 적지 않고 '경로' 로 슬래시 없이 적으면 상대경로로 경로가 적용되어 현재 디렉토리에서 경로로 이동한다.