chap18 MVC 패턴 구현
모델1 구조
웹 브라우저의 요청을 JSP가 직접 처리한다. 웹 브라우저의 요청을 받은 JSP는 자바빈이나 서비스 클래스를 사용해서 웹 브라우저가 요청한 작업을 처리하고 그 결과를 클라이언트에 출력한다.
모델2 구조
웹 브라우저의 요청을 하나의 서블릿이 받는다. 서블릿은 웹 브라우저의 요청을 알맞게 처리한 후 그 결과를 보여줄 JSP 페이지로 포워딩한다. 포워딩을 통해 요청 흐름을 받은 JSP 페이지는 결과 화면을 클라이언트에 전송한다.
MVC(Model-View-Controller) 패턴
모델 == 로직 처리 클래스, 자바빈 : 비즈니스 영역의 로직을 처리한다.
뷰 == JSP : 비즈니스 영역에 대한 프레젠테이션 뷰(즉, 사용자가 보게 될 화면)를 담당한다.
컨트롤러 == 서블릿 : 사요자의 입력 처리와 흐름 제어를 담당한다.
명령어 전달
컨트롤러 서블릿이 해야할 두번째 작업은 사용자가 어떤 기능을 요청했는지 분석하는 것이다.
- 특정 이름의 파라미터에 명령어 정보를 전달한다.
예) http://localhost:8080/chap18/controllerUsingFile?cmd=hello
단점은 컨트롤러 URL이 사용자에게 노출되어 명령어 변경을 통해 악용이 가능하다.
- 요청 URI 자체를 명령어로 사용한다.
예) http://localhost:8080/chap18/hello.do
파라미터로 명령어를 전달할 때 발생하는 사용자의 악의적인 잘못된 명령어 입력을 일차적 예방이 가능하다.
또한, URL 자체가 의미가 있으므로 자연스럽게 기능을 설명할 수도 있다.
모델1과 모델2의 장단점
모델 |
장점 |
단점 |
모델1 |
- 배우기 쉽다. - 자바언어를 몰라도 어느 정도 구현 가능하다. - 기능과 JSP가 직관적으로 연결된다. |
- 로직 코드와 뷰 코드가 혼합되어 JSP 코드가 복잡해진다. - 뷰 변경 시 논리 코드의 빈번한 복사가 발생해서 코드 중복이 발생하가 쉽다. 즉, 유지보수가 힘드어진다. |
모델2 |
- 로직 코드와 뷰 코드를 분리해서 유지보수가 쉬워진다. - 컨트롤러 서블릿에서 권한 검사나 인증과 같은 공통 기능 처리가 가능하다. - 확자잉 용이하다. |
- 자바 언어에 친숙하지 않으면 접근하기가 쉽지 않다. - 작업량이 많다. (커맨드 클래스 + 뷰 JSP) |
18장 실습소스 : https://github.com/KihyunLim/chap18.git