JSP 웹 어플리케이션 설계에서 흔히 사용되는 두가지 디자인 모델이 있는데 그 중 모델 1과 모델 2가 있다. 모델 1과 모델 2의 차이는 JSP에서 모든 로직과 출력을 처리하느냐 아니느냐로 구분 할 수 있다. 추가로, 개발자라면 꼭 ! 필수로 알아야 하는 MVC 패턴에 대해 정리해보기로 한다.
모델 1 구조
모델 1은 JSP를 이용한 단순한 모델이다. 클라이언트의 요청과 응답을 JSP페이지가 담당하는 구조로 되어있다.
JSP페이지에 비즈니스 로직 처리를 위한 코드와 웹 브라우저 출력 관련 코드가 뒤섞여 있고, 웹 브라우저의 요청이 곧바로 JSP에 전달된다.
- 장점 : 배우기 쉽고, 기능과 JSP가 직관적으로 연결된다.
- 단점 : 로직 코드와 뷰 코드가 혼합되어 JSP 코드가 복잡해진다. 그리고 복잡해질수록 유지보수가 어려워진다.
모델 2 구조
모델 2 구조는 모델 1 구조와 달리 웹 브라우저의 요청을 하나의 서블릿이 받는다. 서블릿은 웹 브라우저의 요청을 알맞게 처리한 후, 그 결과를 보여줄 JSP페이지로 포워딩한다. 포워딩을 통해 요청 흐름을 받은 JSP 페이지는 결과 화면을 클라이언트에 전송한다.
모델 2 구조의 특징은, 웹 브라우저의 모든 요청이 단일 진입점, 즉 하나의 서블릿에서 처리한다는 점이다. 그리고 MVC 패턴과 모델 2 구조와는 완벽하게 일치한다.
- 장점 :
- 로직코드와 뷰 코드가 분리되어 유지보드가 쉬워진다.
- 컨트롤러 서블릿에서 권한 검사 및 인증과 같은 공통 기능 처리가 가능해진다.
- 확장이 용이하다.
- 단점 :
- 작업량이 많다(컨트롤러와 뷰를 동시 개발)
MVC 패턴
MVC 패턴은 크게 모델, 뷰, 컨트롤러 세 부분으로 구성되어 있으며, 각각의 요소는 다음과 같은 역할을 담당한다.
- 모델 : 비즈니스 영역의 로직을 처리한다.
- 뷰 : 비즈니스 영역에 대한 프레젠 테이션 뷰(사용자가 보여져야 할 화면)를 담당한다.
- 컨트롤러 : 사용자의 입력 처리와 흐름 제어를 담당한다.
MVC 패턴의 핵심은,
- 비즈니스 로직을 처리하는 모델과 결과 화면을 보여주는 뷰를 분리한다.
- 어플리케이션의 흐름 제어나 사용자의 처리 요청은 컨트롤러에게 집중된다.
이렇게 각각의 역할에 집중하여 다른 역할을 침범하지 않도록 기능을 수행하도록 할 수 있으며, 이렇게 MVC 패턴을 사용함으로써 유지보수 작업이 쉬워지고 어플리케이션을 쉽게 확장할 수 있다.
MVC 패턴의 컨트롤러 : 서블릿
모델 2 구조에서 서블릿은 MVC 패턴의 컨트롤러 역할을 한다. 서블릿은 웹 브라우저의 요청과 웹 어플리케이션의 전체적인 흐름을 제어한다. 간략하게 컨트롤러 역할을 하는 서블릿이 어떤 순서로 실행되는지 확인해보자.
- HTTP 요청 받음
- 클라이언트가 요구하는 기능 분석
- 요청한 비즈니스 로직을 처리하는 모델 사용
- 결과를 request 또는 session에 저장
- 알맞은 뷰 선택 후, 뷰로 포워딩 또는 리다이렉트
MVC의 모델
컨트롤러는 서블릿을 통해 구현되고, 뷰는 JSP를 통해서 구현되는데 모델은 명확하게 어떤 것을 통해 구현한다는 규칙이 없다. 비즈니스 로직을 처리해주면 모델이 될 수 있다. 모델이 제공해야 하는 기능은 웹 브라우저의 요청을 처리하는데 필요한 기능이다. 예를 들어, 글 조회 요청이 온다면 DB에서 글 리스트를 읽어오는 기능을 제공하는 모델이 있을 수 있다. 간략하게 모델은 아래의 순서로 실행된다고 볼 수 있다.
- 컨트롤러부터 요청 받음
- 비즈니스 로직 수행
- 수행 결과를 컨트롤러에 리턴
모델은 보통 서비스 클래스나 DAO등을 통해 구현된다.
참고 자료 :