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 패턴의 컨트롤러 역할을 한다. 서블릿은 웹 브라우저의 요청과 웹 어플리케이션의 전체적인 흐름을 제어한다. 간략하게 컨트롤러 역할을 하는 서블릿이 어떤 순서로 실행되는지 확인해보자.

  1. HTTP 요청 받음
  2. 클라이언트가 요구하는 기능 분석
  3. 요청한 비즈니스 로직을 처리하는 모델 사용
  4. 결과를 request 또는 session에 저장
  5. 알맞은 뷰 선택 후, 뷰로 포워딩 또는 리다이렉트

MVC의 모델

컨트롤러는 서블릿을 통해 구현되고, 뷰는 JSP를 통해서 구현되는데 모델은 명확하게 어떤 것을 통해 구현한다는 규칙이 없다. 비즈니스 로직을 처리해주면 모델이 될 수 있다. 모델이 제공해야 하는 기능은 웹 브라우저의 요청을 처리하는데 필요한 기능이다. 예를 들어, 글 조회 요청이 온다면 DB에서 글 리스트를 읽어오는 기능을 제공하는 모델이 있을 수 있다. 간략하게 모델은 아래의 순서로 실행된다고 볼 수 있다.

  1. 컨트롤러부터 요청 받음
  2. 비즈니스 로직 수행
  3. 수행 결과를 컨트롤러에 리턴

모델은 보통 서비스 클래스나 DAO등을 통해 구현된다.


참고 자료 :

  1. 최범균의 JSP 2.3 웹 프로그래밍: 기초부터 중급까지 CHAPTER 18 : MVC 패턴 구현

oksusutea's blog

꾸준히 기록하려고 만든 블로그