본문 바로가기

개발/JAVA

[JAVA&JSP] #01. MVC 구조 :: MODEL 1 & MODEL 2

MVC 패턴

우선 JSP 기반 웹 어플리케이션의 구조에는 MVC1패턴과 MVC2패턴 구조가 있다.
JSP에서 모든 로직과 출력을 처리하느냐, 아니면 JSP에서는 출력만 처리하느냐에 따라서 모델 1 구조와 모델 2 구조로 구분된다.

우선 모델 1 구조에 대해서 알아보자.

(1) 모델 1 구조

- JSP로 구현한 기존 웹 어플리케이션은 모델 1 구조로 웹 브라우저의 요청을 JSP 페이지가 받아서 처리하는 구조이다.

 

 

- JSP 페이지에 비즈니스 로직을 처리하기 위한 코드와 웹 브라우저에 결과를 보여주기 위한 출력 관련 코드가 뒤섞여 있는 구조이다.

즉, HoShop과 같이 웹 브라우저의 요청이 곧바로 JSP에 전달된다. 웹 브라우저의 요청을 받은 JSP는 자바빈이나 서비스 클래스를 사용해서 웹 브라우저가 요청한 작업을 처리하고 그 결과를 클라이언트에 출력해준다.

JSP 페이지에서 웹 브라우저가 요청한 것들을 처리한다는 것은 JSP 페이지에 비즈니스 로직을 처리하기 위한 코드와 웹 브라우저에 결과를 보여줄 출력 관련 코드가 섞인다는 것을 의미한다.

프로그래밍 수업시간에 다뤘던것처럼, 하나의 JSP 페이지에서 서비스 클래스를 통해서 원하는 작업을 수행하고 그 결과를 출력하는 경우가 많았는데, 이것이 모델 1 구조의 전형적인 예이다.

- 이러한 구조는 JSP 페이지 안에서 모든 정보를 표현(View)하고 저장(Model)하고 처리(Control)되므로 재사용이 힘들고, 읽기도 힘들어 가독성이 떨어진다.

더보기

● 모델 1 구조 정리

- 정의 : 모든 클라이언트 요청과 응답을 JSP가 담당하는 구조이다.

- 장점 : 단순한 페이지 작성으로 쉽게 구현 가능하다. 중소형 프로젝트에 적합하다.

- 단점 : 웹 애플리케이션이 복잡해지면 유지보수 문제가 발생된다.


(2) 모델 2 구조

모델 2 구조는 모델 1 구조와 달리 웹 브라우저의 요청을 하나의 서블릿이 받게 된다. 서블릿은 웹 브라우저의 요청을 알맞게 처리한 후 그 결과를 보여줄 JSP 페이지로 포워딩한다.

포워딩을 통해서 요청 흐름을 받은 JSP 페이지는 결과 화면을 클라이언트에 전송한다. 즉, 서블릿이 비즈니스 로직 부분을 처리하게 되는 것이다.

모델 2 구조의 특징은 웹 브라우저의 모든 요청이 단일 진입점, 즉 하나의 서블릿에서 처리된다는 점이다.

하나의 서블릿이 웹 브라우저의 모든 요청을 받기 때문에, 서블릿은 웹 브라우저의 요청을 구분할 수 있는 방법을 필요로 하며, 서블릿은 웹 브라우저의 요청을 처리한 후 웹 브라우저에 보여줄 JSP를 선택하게 된다.

모델 2 구조의 이러한 특징 때문에 MVC(Model - View - Controller)패턴에 기반을 두어 웹 어플리케이션을 구현할 때는 모델 2 구조를 주로 사용한다. 

 

 

 

- 모델 1은 컨트롤러가 모델이나 뷰를 포함한 MV 형태를 띄고 있고, 모델 2는 완전한 MVC 형태를 적용하고 있다고 볼 수 있다.

 

더보기

● 모델 2 구조 정리

-  정의 : 클라이언트의 요청처리와 응답처리, 비즈니스 로직 처리하는 부분을 모듈화시킨 구조이다.

-  장점 : 처리작업의 분리로 인해 유지보수와 확장이 용이하다.

-  단점 : 구조 설계를 위한 시간이 많이 소요되므로 개발 기간이 증가한다.

 


(3) MVC 패턴

● 모델(Model) : 페이지의 이동간에 파라미터나 값들을 넘겨줄때 이러한 값들을 담은 인스턴스를 의미한다.

뷰(View) : 비즈니스 영역에 대한 프레젠테이션 뷰(즉, 사용자가 보게 될 결과 화면)를 담당한다.

컨트롤러(Controller) : 사용자의 입력 및 흐름 제어를 담당한다.

사용자는 원하는 기능을 처리하기 위한 모든 요청을 단일 컨트롤러에 보낸다. 모델은 비즈니스와 관련된 상태 정보 및 관련 기능을 제공하는데, 컨트롤러는 이 모델을 통해서 사용자의 요청을 처리한다.

모델을 사용하여 알맞은 비즈니스 로직을 수행한 후 컨트롤러는 사용자에게 보여줄 뷰를 선택하며, 선택된 뷰는 사용자에게 알맞은 결과 화면을 보여준다. 

뷰가 사용자에게 결과 화면을 보여줄 때에는 결과 정보가 필요한데, 컨트롤러가 이 정보를 뷰에 전달해 준다.

 


👍 MVC 패턴의 핵심은 다음과 같다.

-비즈니스 로직을 처리하는 모델결과 화면을 보여주는 가 분리되어 있다.

-어플리케이션의 흐름 제어나 사용자의 처리 요청컨트롤러에 집중된다.

즉, 모델은 오직 비즈니스와 관련된 부분을 처리하면 될 뿐 사용자에게 보여줄 화면이나 흐름 제어에 대해서는 처리할 필요가 없다. 반대로 뷰는 사용자에게 알맞은 화면을 보여주는 역할만 수행하면 될 뿐, 비즈니스 로직이나 흐름 제어 등을 신경 쓸 필요가 없다.

이렇게 모델과 뷰가 분리되어 있기 때문에 모델의 내부 로직이 변경된다 하더라도 뷰는 영향을 받지 않으며, 뷰와 모델이 결합되어 있지 않기 때문에 뷰를 어렵지 않게 변경할 수 있다.

또한, 컨트롤러는 사용자의 요청에 대해서 알맞은 모델을 사용하고 사용자에게 보여줄 뷰를 선택하기만 하면 된다. 

 

만일 필요시 컨트롤러나 모델에 상관없이 새로운 뷰를 추가해 주면 된다. 즉, MVC 패턴을 사용함으로써 유지 보수 작업이 간단해지고 어플리케이션을 쉽게 확장할 수 있게 되는 것이다.


정리를 하자면, 모델 2 구조에서 서블릿은 MVC 패턴의 컨트롤러 역할을 한다. 서블릿은 웹 브라우저의 요청과 웹 어플리케이션의 전체적인 흐름을 제어하게 된다. 또한, 모델 2 구조에서 JSP는 뷰의 역할을 담당한다. 비즈니스 로직과 관련된 코드가 없는 점을 제외하면 일반 JSP와 거의 동일한 형태를 취한다는 것이다.