웹 MVC 모델의 흐름

SungBum Park·2019년 10월 21일
3

웹 개발을 하다보면 MVC 패턴을 쉽게 접한다. 특히 스프링으로 개발을 하면 스프링 MVC 모델도 존재한다. 하지만 이전 JSP를 사용할 때부터 어떻게 스프링 MVC 패턴까지 하나씩 살펴보자.

JSP Model-1

모델 1은 클라이언트의 요청을 하나의 JSP 페이지에서 뷰와 로직을 모두 처리한다.

JSP_model1.png

위 구조를 보면 알 수 있듯이 모델 1은 크게 JSP 페이지자바빈 혹은 서비스 클래스 로 이루어져있다. 먼저 JSP 페이지에서는 로직을 처리하는 코드와 출력을 위한 코드가 함께 있다는 것을 예상할 수 있다. 예를 들어 아래의 코드를 보면 유저의 리스트를 보여주는 로직과 출력을 담당하는 JSP 페이지를 볼 수 있다. html 페이지에 자바 코드를 직접 삽입하는 형식이다.

<table>    
   <tr align="center">
       <td id=title>아이디</td>
       <td id=title>비밀번호</td>
       <td id=title>이름</td>
       <td id=title>성별</td>
       <td id=title>생년월일</td>
       <td id=title>이메일</td>
       <td id=title>전화</td>
       <td id=title>주소</td>
       <td id=title>가입일</td>
   </tr>

<%
   for( MemberBean member : memberList){
%>            
   <tr>
       <td><%=member.getId() %></td>
       <td><%=member.getPassword() %></td>
       <td><%=member.getName() %></td>
       <td><%=member.getGender() %></td>
       <td><%=member.getBirth() %></td>
       <td><%=member.getMail() %></td>
       <td><%=member.getPhone() %></td>
       <td><%=member.getAddress() %></td>
       <td><%=member.getReg() %></td>
   </tr>
<%} %>    
</table>

위 처럼 모델 1에서는 브라우저(클라이언트)에서 요청이 오면 JSP 페이지는 자신이 직접 자바빈이나 서비스 클래스를 사용하여 작업을 처리하고, 그 결과를 클라이언트에게 출력한다. 이 모델은 과거에 많이 사용했으며, 지금도 간단한 페이지를 구성할 때 사용할 수 있다.

JSP Model-2

모델 2는 MVC 패턴을 적용한 모델이다. 아래 그림을 보자.

JSP_model2.png

MVC 패턴을 적용한 만큼 JSP 모델 2는 크게 세 가지로 나뉜다.

  • 자바빈 혹은 서비스 클래스(Model)
  • JSP(View)
  • 서블릿(Controller)

그러면 여기서 잠깐 MVC에 대해 살펴보자.

MVC 패턴

MVC 패턴은 Model View Controller의 약자로 에플리케이션을 세가지의 역할로 구분한 개발 방법론이다. 각각의 역할은 다음과 같다.

  • Model: 서버에서 수행하는 실질적인 비즈니스 로직
  • View: Controller에서 전달받은 데이터를 사용자에게 보여주기 위해 출력하는 역할
  • Controller: 사용자의 입력 처리와 전체적인 흐름을 제어하는 역할

MVC_Pattern.png

모델 2는 MVC 패턴과 같이 브라우저에서 요청이 들어오면 서블릿(Controller)이 전체 흐름을 담당하며, 해당 요청을 처리할 자바빈 혹은 서비스 클래스(Model)를 선택한다. 로직을 모두 처리하면 이를 클라이언트에 출력해주기 위해 JSP 페이지를 응답한다.

스프링 MVC

스프링 MVC 프레임워크는 구조는 위에서 살펴본 JSP 모델 2와 Front Controller 패턴을 사용한 모습이라고 볼 수 있다. 스프링 MVC를 이용함으로써 웹 어플리케이션의 Model, View, Controller 사이의 의존 관계를 DI 컨테이너에서 관리하면서 유연한 웹 어플리케이션을 구축할 수 있다.

Front Controller Pattern

프론트 컨트롤 패턴은 모든 리소스 요청을 처리해주는 하나의 컨트롤러를 두는 패턴이다. 이는 주로 웹 애플리케이션에서 사용하는 MVC 패턴과 같이 사용된다. 이를 사용하는 장점은 다음과 같다.

  • 모든 요청(Request)을 하나의 컨트롤러를 통해 받으므로 한 곳에서 모든 작업을 처리할 수 있다.
  • 추적(Tracking)이나 보안(Security)을 적용할 때 하나의 컨트롤러에만 적용하면 된다.
  • 파일 구조가 바뀌어도 URL을 유지할 수 있다.

Spring_MVC_model.png

구성 요소설명
DispatcherServlet클라이언트의 요청을 전달받아 요청에 맞는 컨트롤러가 리턴한 결과값을 View에 전달하여 알맞은 응답을 생성
HandlerMapping클라이언트의 요청 URL을 어떤 Controller가 처리할지 결정
Controller클라이언트의 요청을 처리한 뒤, 결과를 DispatcherServlet에게 리턴
ModelAndViewController가 처리한 결과 정보 및 View 선택에 필요한 정보를 담음
ViewResolverController의 처리 결과를 생성할 View를 결정
ViewController의 처리 결과 화면을 생성

참고자료

profile
https://parker1609.github.io/ 블로그 이전

0개의 댓글