티스토리 뷰

1) Spring MVC?

MVC?

  • MVC Model-View-Controller의 약자입니다.
    원래는 제록스 연구소에서 일하던 트뤼그베 린즈커그가 처음으로 소개한 개념으로, 데스트톱 어플리케이션용으로 고안되었습니다. 웹 어플리케이션 등에서도 사용하게 되었습니다.
  • Model : 모델은 뷰가 렌더링하는데 필요한 데이터입니다. 예를 들어 사용자가 요청한 상품 목록이나, 주문 내역이 이에 해당합니다.
  • View : 웹 애플리케이션에서 뷰(View)는 실제로 보이는 부분이며, 모델을 사용해 렌더링을 합니다. 뷰는 JSP, JSF, PDF, XML등으로 결과를 표현합니다.
  • Controller : 컨트롤러는 사용자의 액션에 응답하는 컴포넌트입니다. 컨트롤러는 모델을 업데이트하고, 다른 액션을 수행합니다.

MVC Model 1 아키텍처

  • MVC Model이 자바 웹 프로그래밍에서는 두 가지 형태를 갖고 있습니다. 첫 번째는 모델 1 아키텍처입니다.
  • MVC Model 1 아키텍처는 브라우저가 요청을 하게 되면 해당 요청을 JSP가 받게 됩니다. 그래서 요청만큼 JSP 페이지가 존재해야 합니다.
  • 이런 JSP Java로 만들어진 클래스인 Java bean을 이용해서 데이터베이스를 사용하고 결과를 화면에 출력하는 작업을 합니다. 여기에서 이야기하는 Java bean이라고 하는 것은 앞에서 실습했던 JDBC 같은 클래스, JDBC로 작성했던 RoleDao, 이런 클래스가 Java bean과 유사한 클래스라고 생각하시면 됩니다.
  • 그런데 모델 1 아키텍처의 문제점은 JSP 자체에 Java 코드랑 HTML 이런 코드들이 막 섞여있다는 점입니다. 그렇다 보니 유지 보수가 굉장히 어려웠습니다.

MVC Model 2 아키텍처

  • 그래서 유지보수를 좀 더 쉽게하기 위해 나온 또 다른 아키텍처가 Model 2 아키텍처입니다.
  • 모델 2 아키텍처는 요청 자체를 서블릿이 받게 합니다. 서블릿이 Java bean을 이용해서 DB에서 데이터를 꺼내오고 그 결과들을 JSP를 통해서 화면에 보여주게 하는 모델을 사용합니다. 위의 그림에서 서블릿은 요청과 데이터를 처리하는 컨트롤러의 역할을 수행하고 있고 JSP는 모델의 결과를 보여주게 하는 View의 역할을 하고 습니다. 이렇게 해서 로직과 뷰를 분리할 수가 있게 된 것입니다.

MVC Model2 발전형태

  • 위 그림은 MVC Model 2를 조금 더 발전시킨 형태입니다.
  • 그림과 같이 클라이언트가 보내는 모든 요청을 프론트 컨트롤러라고 하는 서블릿 클래스가 다 받습니다. 이 서블릿은 딱 하나만 존재하며 모든 요청을 다 받습니다. 그리고 프론트 컨트롤러는 요청만 받고 실제 일은 처리하지 않습니다. 실제 작업은 여기에 나오는 컨트롤러 클래스에게 위임합니다. 위임받은 컨트롤러 클래스를 컨트롤러 클래스 혹은 핸들러 클래스라고 이야기하기도 합니다.
  • 서블릿은 관련된 요청을 처리하기에 조금 불편한 구조를 가지고 있습니다. 그래서 이런 단점을 해결하기 위해 사용자의 모든 요청은 서블릿이 받고 해당 요청의 실제 처리는 컨트롤러 혹은 핸들러라고 불리는 클래스에게 위임함으로써 관련된 URL을 하나의 클래스에서 다 처리할 수 있도록 합니다.
  • 이런 컨트롤러는 Java bean 등을 이용해서 결과를 만들어내고 만들어진 결과를 모델에다 담고 프론트 컨트롤러에게 보내면 프론트 컨트롤러는 알맞은 뷰에게 모델을 전달해서 그 결과를 출력하게 됩니다.

Spring Web Module

  • Model2 MVC 패턴을 지원하는 Spring Module
  • 앞에서 얘기한 모델 2의 발전된 형태가 Spring 프레임워크 모듈 중에 하나인 Web 모듈에 구현이 되어 있습니다. 이러한 Web 모듈을 보통 Spring MVC라고 합니다.

생각해보기

  • 프론트 컨트롤러(Front Controller)는 모든 요청을 받아 들여 공통적인 작업을 처리해 줍니다. 이를 통해 얻을 수 있는 장점엔 어떤 것이 있을 수 있을까요?

참고 자료

[참고링크] Web MVC framework
https://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/html/mvc.html

[참고링크] MVC Model2 | Opendocs
http://myblog.opendocs.co.kr/archives/tag/mvc-model2

[참고링크] Model 1 and Model 2 (MVC) Architecture
https://www.javatpoint.com/model-1-and-model-2-mvc-architecture

[참고링크] Modules
https://docs.spring.io/spring/docs/3.0.0.M4/reference/html/ch01s02.html

[참고링크] IBM Knowledge Center
https://www.ibm.com/support/knowledgecenter/SSRTLW_9.1.1/com.ibm.etools.struts.doc/topics/cstrdoc001.html

 

'부스트코스 웹 프로그래밍 > 3. 웹 앱 개발: 예약서비스 1' 카테고리의 다른 글

9. Spring MVC - BE (3)  (0) 2019.08.06
9. Spring MVC - BE (2)  (0) 2019.08.06
8. Spring JDBC - BE (2)  (0) 2019.08.04
8. Spring JDBC - BE (1)  (0) 2019.08.04
7. Spring Core - BE (4)  (0) 2019.08.04
Comments