Spring MVC란?

2020-07-03

해당 Post는 실습을 통해 Spring MVC을 정리한 파일입니다.

Spring 프레임워크에서 웹 어플리케이션 작성을 위해 제공하는 Web MVC모듈에 대해 알아보도록 하겠습니다.


MVC란?

MVC는 Model-View-Controller의 약자입니다.

원래는 제록스 연구소에서 일하던 트뤼그베 린즈커그가 처음으로 소개한 개념으로, 데스트톱 어플리케이션용으로 고안되었습니다.

  • Model : 모델은 뷰가 렌더링하는데 필요한 데이터입니다. 예를 들어 사용자가 요청한 상품 목록이나, 주문 내역이 이에 해당합니다.
  • View : 웹 애플리케이션에서 뷰(View)는 실제로 보이는 부분이며, 모델을 사용해 렌더링을 합니다. 뷰는 JSP, JSF, PDF, XML등으로 결과를 표현합니다.
  • Controller : 컨트롤러는 사용자의 액션에 응답하는 컴포넌트입니다. 컨트롤러는 모델을 업데이트하고, 다른 액션을 수행합니다.

MVC Model 1 아키텍처

MVC Model 1 아키텍처는 브라우저가 요청을 하게 되면 해당 요청을 JSP가 받게 됩니다.

그러니까 따라서 요청만큼 JSP 페이지가 존재해야겠죠.

이런 JSP는 Java로 만들어진 클래스인 Java bean을 이용해서 데이터베이스를 사용하게 됩니다.

이 결과를 화면에 출력하는 이런 일을 하게 되는 거죠.

여기에서 이야기하는 Java bean이라고 하는 것은 JDBC로 작성했던 Role Dao 이런 클래스가 Java bean. 이런 거랑 유사한 클래스라고 생각하시면 됩니다.

그런데 이제 이런 방식으로 처리했을 때의 문제점은 JSP 자체에 Java 코드랑 HTML 이런 코드들이 막 섞여있기에 유지 보수가 굉장히 좀 어려웠겠죠.

이런 방식들을 해결하기 위해서 나온 또 다른 아키텍처가 Model 2 아키텍처입니다.

MVC Model 2 아키텍처

모델 2 아키텍처 같은 경우는 요청 자체를 서블릿이 받게 하고요.

서블릿이 Java bean을 이용해서 DB에서 데이터를 꺼내오고 이런 결과들을 JSP를 통해서 결과를 화면에 보여주게 하는 이런 모델을 사용합니다.

이 그림에서 서블릿은 요청과 데이터를 처리하는 컨트롤러의 역할을 수행하고 있습니다.

JSP는 모델의 결과를 보여주게 하는 View의 역할을 하고 있는 것을 볼 수 있겠죠.

이렇게 함으로써 로직과 뷰를 분리할 수가 있게 됩니다.

MVC Model2 발전형태

앞선 MVC Model 2를 조금 더 발전을 시키면은 지금 이런 그림의 형태로 발전이 되는데요.

이때 클라이언트가 보내는 모든 요청을 프론터 컨트롤러라고 하는 서블릿 클래스가 다 받습니다.

이 서블릿은 딱 하나만 존재합니다. 이게 모든 요청을 다 받게 됩니다.

그리고 프론트 컨트롤러는 요청만 받고 실제 일은 처리하지 않습니다.

실제 일은 여기에 나오는 컨트롤러 클래스에게 위임합니다.

이런 컨트롤러 클래스를 가리켜서 컨트롤러 클래스 혹은 핸들러 클래스라고 이야기하기도 합니다.

서블릿은 관련된 요청을 처리하기에 조금 불편한 구조를 가지고 있어요.

이런 단점을 해결하기 위해서 사용자의 모든 요청은 서블릿이 받고 그 요청의 실제 처리는

컨트롤러 혹은 핸들러라고 불리는 클래스에게 위임함으로써 관련된 URL을 하나의 클래스에서 다 처리할 수 있도록 하게 됩니다.

이런 컨트롤러는 Java bean 등을 이용해서 결과를 만들어내고 그 결과를 모델에다 담고

프론트 컨트롤러에게 보내면 프론트 컨트롤러는 알맞은 뷰에게 모델을 전달해서 그 결과를 출력하게 됩니다.

Spring Web Module

앞에서 얘기한 모델 2의 발전된 형태가 Spring 프레임워크 모듈 중에 하나인 Web 모듈에 구현이 되어 있습니다.

이러한 Web 모듈을 보통 Spring MVC라고 합니다.