본문 바로가기
Web programming/Servlet & JSP

MVC (Model View Controller)

by Skilly 2020. 4. 29.

 

재스퍼를 사용해서 서블릿을 만들 수 있는데, 만들 때에는 jsp 파일에 코드 블록을 넣어 작업한다.
하지만 jsp를 잘못 만들면 코드 블록이 상당히 복잡해지고, 유지·보수가 어려울 수 있다. (스파게티 코드)
이러한 점을 개선하고자 나온 게 MVC이다. MVC란 애플리케이션을 세 가지의 역할로 구분한 개발 방법론이다.

 

 

Model View Controller 

-Model (출력 데이터)

 : 어떠한 동작을 수행하는 코드로, 사용자에게 어떻게 보일지에 대해 신경쓰지 않아도 된다.


-View (출력 담당 / HTML 코드)

 : MVC에서 모델은 여러 개의 뷰(view)를 가질 수 있다. 뷰는 모델에게 질의를 하여 모델로 부터 값을 가져와 사용자에게 보여준다.


-Controller (입력·제어 담당 / JAVA 코드)
MVC의 뷰는 여러 개의 컨트롤러를 가지고 있다. 사용자는 컨트롤러를 사용하여 모델의 상태를 바꾸는데, 모델의 상태가 바뀌면 모델은 등록된 뷰에 자신의 상태가 바뀌었다는 것을 알리고 뷰는 거기에 맞게 사용자에게 모델의 상태를 보여 준다. (위키피디아 참고)

 


 

위 그림의 개념을 웹에 적용해보자. 

  1. 사용자가 웹사이트에 접속한다. (Uses)
  2. Controller는 사용자가 요청한 웹페이지를 서비스 하기 위해서 모델을 호출한다. (Manipulates)
  3. 모델은 데이터베이스나 파일과 같은 데이터 소스를 제어한 후에 그 결과를 리턴한다.
  4. Controller는 Model이 리턴한 결과를 View에 반영한다. (Updates)
  5. 데이터가 반영된 VIew는 사용자에게 보여진다. (Sees)

 (출처 : 오픈튜토리얼) 더 알아보려면 클릭! 


 

 

MVC의 작성 방법을 알아보자.

1. Model을 이용해 HTML 코드와 JAVA 코드를 분리

2. HTML 코드와 JAVA 코드를 물리적으로 분리

 

 

Model 1. 컨트롤러와 뷰가 물리적으로 분리되지 않는 방식!

(Jsp 서블릿 파일 내에서 모델 변수로 분리)

입력 코드 블럭에는 출력에 관한 코드문을 모두 넣고, 출력 코드 블럭에는 산출물인 간단한 변수<%=model%>만 넣는다. (반드시 model이라고 명명하는 것이 아니라, 변수명이기 때문에 다른 명으로 사용할 수 있다)
즉, 코드 블럭 자체가 줄어듦으로서 입·출력 관리가 쉬어져 유지 보수에 용이하다.

 

지역적으로 서블릿 파일을 하나만 만들면(스파게티, model1) 하나의 파일 안의 코드가 복잡해질 것인데, 나눠서 만들면(model2) 개별적으로 유지관리하거나 협업할 수 있다.

 


Model 2. 컨트롤러와 뷰가 물리적으로 분리된 방식!

(디스패치 서블릿을 별도로 분리하고 포워딩 / 알아야 할 키워드 : Dispatcher, Forword)

Model 1과 다르게 물리적으로 분리하는 방식이다. Jsp 서블릿 파일 내에 있는 (<%=model 관련 출력 코드%>가 포함된) HTML 코드만 남겨두고 제어하는 컨트롤하는 영역의 코드를 다른 서블릿 파일로(doGet 오버라이드 한 상태로) 분리한다.
그리고 분리된 두 개의 서블릿 파일을 연결해 주는 것(저장소)이 필요한데 이때 forwording해준다.



 

 

 

 

반응형