Spring/기초튼튼

Spring Framework Web MVC(Model, View, Controller) Pattern - 스프링 프레임워크 웹 MVC(모델, 뷰, 컨트롤러) 패턴

carrotweb 2022. 6. 13. 18:34
728x90
반응형

Spring Framework(스프링 프레임워크)를 기반으로 개발하면 MVC로 개발할 수 있다고 했는데 MVC가 어떻게 Spring Framework에 적용되어 있는지 간단하게 알아보겠습니다.

 

우선, Framework(프레임워크)부터 알아보겠습니다.

 

Framework 란

Frame(프레임 - 틀, 구조, 규칙) + work(워크 - 일)로 일(여기서는 애플리케이션 개발)을 하는 데 있어 효과적인 틀(여기서는 애플리케이션 개발에 필요한 프로세스 및 라이브러리)을 정의하고 제공합니다.

 

즉, 애플리케이션을 개발할 때 공통적으로 사용될 표준 프로세스, 구현에 필요한 클래스, 공통 라이브러리(화면 처리, DB 연동 처리) 들을 제공하여 동일한 개발 환경으로 개발을 할 수 있게 합니다. 그래서 프레임워크를 사용하면 개발 시간과 비용이 절감되어 생산성이 높아집니다.

 

 

Spring Framework 란

Java Platform(자바 플랫폼)을 위한 오픈 소스 애플리케이션 프레임워크로 Java EE(Java Platform, Enterprise Edition)에서 제공하는 대부분의 기능을 지원하여 엔터프라이즈급 애플리케이션 개발에 필요한 기능들과 구조를 제공합니다. 간단히 Spring(스프링)이라고도 합니다.

 

 

Spring Framework Web MVC

Spring Framework은 웹 응용프로그램(동적인 웹 사이트) 개발 시 MVC(모델-뷰-컨트롤러) 패턴을 사용합니다.

 

Spring Framework Web MVC에서는 DispatcherServlet이 Central Servlet(중앙 서블릿)으로 Controller 역할을 하여 모든 요청(Request)을 받고 요청 URL과 매핑된 Controller로 연결시켜(서비스별로 분산 시켜) 주고 처리된 결과(Model)를 화면(View)으로 처리(Rendering) 하여 응답(Response) 합니다.

 

DispatcherServlet은 Spring Framework Web MVC에서 제일 중요한 역할을 합니다.

 

이처럼 DispatcherServlet은 Central Servlet(중앙 서블릿)으로 Front Controller Pattern(프론트 컨트롤러 패턴)을 적용하여 설계되고 개발되었습니다. 그래서 DispatcherServlet을 Front Controller이라고 합니다.

 

위에서 설명한 것을 MVC로 구분하여 설명하겠습니다.

  • Controller (컨트롤) : 모든 요청(Request)을 받고 요청 URL과 매핑된 Controller로 연결시켜 처리하고 결과를 Model(모델)에 담아 View(뷰)에 전달하고 생성된 HTML를 응답(Response) 합니다. - Servlet
  • Model (모델) : Controller(컨트롤)에서 처리된 결과를 관리합니다. - Java Beans
  • View (뷰) : Model(모델)을 Rendering 하여 HTML 생성하여 Controller(컨트롤)에 전달합니다. - JSP

 

DispatcherServlet의 프로세스로 MVC를 설명하겠습니다.

 

1. 클라이언트 요청(Http Request)을 DispatcherServlet에서 요청에 매핑된 Controller 검색 (HandlerMapping에서 검색하여 HandlerAdapter로 Controller에 전달)

2. 검색된 Controller에서 RequestMapping된 메서드를 호출하여 처리

3. 출력할 View의 이름으로 View 검색하여 View에 Model 전달 (ViewResolver로 View 객체 검색)

4. Model를 이용하여 View 처리(웹 페이지 생성) 후 DispatcherServlet에 전달

5. 클라이언트에 응답(Http Response)

 

Spring Framework에서는 Model(모델)은 Controller(컨트롤)에서 View(뷰)로 전달되는 데이터로만 사용되고 Business Logic(비즈니스 로직)과 데이터 처리는 각각 Service(서비스)와 Repository(리포지토리)로 분리되어 처리됩니다.

 

Spring Framework에서는 Annotation(어노테이션 - 주석)으로 @Controller과 @RequestMapping을 클래스와 메서드에 적용하여 쉽게 Controller(컨트롤)를 만들 수 있습니다. 그리고 @Service, @Repository Annotation을 클래스에 적용하여 사용하면 Business Logic(비즈니스 로직)과 데이터 처리로 분리하여 개발할 수 있습니다.

 

다음은 Annotation(어노테이션)을 적용하여 생성한 Controller, Service, Dao 클래스를 MVC와 Layered Architecture Pattern(계층화된 아키텍처 패턴)으로 구분하였습니다.

 

Architecture Pattern(계층화된 아키텍처 패턴)에서는 JSP는 Presentation Layer(프리젠테이션 레이어), Controller과 Service는 Business Layer(비즈니스 레이어), Dao는 Persistence Layer(퍼시스턴스 레이어), Database는 Database Layer(데이터베이스 레이어)입니다.

 

MVC 중 Controller의 영역을 Controller 클래스뿐만 아니라 Service, Dao 클래스까지 포함할 수 있습니다.

 

다른 의견 중에는 Model의 영역을 Controller에서 View로 전달되는 Java Beans뿐만 아니라 Service, Dao 클래스까지 포함하는 의견도 있습니다. 그렇지만 개인적으로는 Service, Dao 클래스는 Business Logic과 데이터를 저장하고 관리하기 때문에 Model보다는 Controller에 가깝지 않나 생각합니다.

 

Annotation(어노테이션)을 적용한 Controller, Service, Dao 클래스는 향후 개발을 통해서 알아보겠습니다.

728x90
반응형