모델 1 | 모델 2 구조
* JSP 웹 어플리케이션의 구조는 크게 모델 1 (JSP에서 모든 로직과 출력 처리) / 모델 2 (JSP 에서 출력만 처리) 구조로 나뉜다.
1) 모델 1 구조
* JSP를 이용한 단순한 모델로 웹 브라우저의 요청을 JSP가 직접 처리한다. 요청을 받은 JSP는 자바빈이나 서비스 클래스를 사용해서 웹 브라우저가 요청한 작업을 처리하고 그 결과를 클라이언트에게 출력한다.
* 이는 JSP 페이지에 비즈니스 로직을 처리하기 위한 코드와 웹 브라우저에 결과를 출력하는 코드가 섞인다는 것을 의미한다.
2) 모델 2 구조
* 웹 브라우저의 요청을 하나의 서블릿이 받는다. 서블릿은 받은 요청을 알맞게 처리한 후 그 결과를 보여줄 JSP 페이지로 포워딩하고 이를 통해 요청 흐름을 받은 JSP 페이지는 결과 화면을 클라이언트에게 전송한다.
* 즉 로직은 서블릿이 처리하고 JSP는 결과를 출력하는 것만 담당한다.
* 웹 브라우저의 모든 요청을 하나의 서블릿에서 처리한다는 것 때문에 서블릿은 웹 브라우저의 요청을 구분하는 방법이 필요하다. 서블릿은 요청을 구분해 처리후 그 결과를 출력할 JSP 페이지를 선책하는데, 이러한 특성때문에 MVC 패턴을 이용해 웹 어플리케이션을 구현할 때 모델 2 구조를 사용하게된다.
3) 장단점
모델 |
장점 |
단점 |
모델 1 |
- 배우기 쉽다. - Java를 몰라도 어느 정도 구현 가능 - 기능과 JSP가 직관적으로 연결 |
- 로직코드와 뷰코드가 혼합되어 JSP 코드가 복잡하다. - 뷰 변경 시 논리 코드의 빈번한 복사가 발생하여 코드 중목이 발생하기 쉽다. 따라서 유지보수가 힘들어 진다. |
모델 2 |
- 로직코드와 뷰코드가 분리되어 유지보수가 쉽다. - 컨트롤러 서블릿에서 권한 검사나 인증과 같은 공통 기능 처리가 가능하다. - 확장이 용이 |
- Java를 모르면 접근하기 쉽지 않다. - 작업량이 많다 |
MVC 패턴
* Model-View-Controller
* 웹 어플리케이션 개발 영역에 보편적으로 사용되고 있다.
* 크게 모델, 뷰, 컨트롤러 세 부분으로 구성된다.
▷모델 : 비즈니스 영역의 로직을 처리한다
▷ 뷰 : 비즈니스 영역에 대한 사용자가 보게될 결과 화면을 담당한다.
▷ 컨트롤러 : 사용자의 입력 처리와 흐름을 제어한다.
* 사용자의 요청을 받은 컨트롤러는 모델을 이용해 받은 모든 요청을 처리하고 알맞은 비즈니스 로직을 수행한 후 사용자에게 보여줄 뷰를 선택한다.
* 선택된 뷰는 사용자에게 알맞은 결과 화면을 보여주고, 이 때 필요한 데이터는 컨트롤러를 통해 전달받는다.
1) 특징
* 로직을 처리하는 모델과, 결과 화면은 보여주는 뷰를 분리
* 어플리케이션의 흐름 제어, 사용자의 처리 요청은 컨트롤러에 집중
2) MVC 패턴과 모델2 구조 매핑
* MVC 패턴과 모델 2 구조의 요청,응답 처리 방식은 위 두 그림을 보면 완전히 같다.
3) MVC 컨트롤러 : 서블릿
* 모델 2 구조의 서블릿은 MVC 패턴의 컨트롤러와 같은 역할을 한다. 클라이언트의 요처와 웹 어플리케이션의 전체적인 흐름을 제어한다.
* 모델에서 비즈니스 로직이 처리되기 때문에 서블릿은 모델에서 내부적으로 비즈니스 로직을 어덯게 처리하는가에 대한 것을 알 필요가 없고, 그저 클라이언트의 요청에 따라 알맞게 모델을 사용해 요청에 대한 기능을 실행하고, 그 결과를 뷰인 JSP에게 전달하면 된다.
* 컨트롤러 서블릿은 알맞은 JSP 페이지를 선택하고, 이 때 요청 처리 결과를 request나 session에 저장해서 결과 화면을 보여줄 JSP 페이지에게 전달한다.
4) MVC 뷰 : JSP
* 모델 2 구조의 JSP는 뷰 역할을 담당
* 컨트롤러에서 request 객체나 session 객체에 저장한 데이터를 사용하여 클라이언트에게 알맞은 결과 화면을 출력한다.
* 클라이언트의 요청을 컨트롤러에게 전달하는 매개체가 되기도 한다.
5) MVC의 모델
* 비즈니스 로직을 처리해주는 것이 모델이 될 수 있다.
* 컨트롤러 서블릿이 클라이언트의 요청을 분석해 알맞은 모델을 호출하면 모델은 요청한 작업을 처리 후 결과를 보통 자바빈 객체에 저장 후 컨트롤러에게 전달한다.
*
'WEB > JSP Servlet' 카테고리의 다른 글
커넥션 풀 (0) | 2016.12.06 |
---|---|
JDBC : 트랜잭션 (0) | 2016.12.06 |
서블릿 : 초기화 (0) | 2016.11.22 |
서블릿 : 기본 (0) | 2016.11.21 |
JDBC : 기초 (0) | 2016.11.21 |