MVC Pattern이란?
MVC ( Model - View - Controller ) 는 사용자 인터페이스, 데이터 및 논리 제어를 구현하는데 널리 사용되는 소프트웨어 디자인 패턴입니다. MVC 패턴은 애플리케이션의 개발 영역을 각각 Model, View, Controller로 구분하여 역할에 맞게 코드를 작성하고 소프트웨어의 비즈니스 로직과 화면을 구분하는데 중점을 두고 있습니다. 이러한 "관심사 분리"는 더 나은 업무의 분리와 향상된 관리를 제공합니다.
이러한 MVC 패턴의 특징은 컴포넌트의 변경이 다른 컴포넌트에 영향을 미치지 않아 유지보수가 용이하고, 컴포넌트 간의 결합성이 낮아 프로그램 수정이 용이해 확장성이 뛰어납니다.
Model
Model은 소프트웨어나 애플리케이션에서 정보 및 데이터 부분을 의미합니다. 이는 Controller에게 받은 데이터를 조작(가공)하는 역할을 수행한다고 볼 수 있습니다. 즉, 데이터와 관련된 부분을 담당하며 값과 기능을 가지는 객체라고 보면 됩니다.
- 어플리케이션 상태의 캡슐화
- 상태 쿼리에 대한 응답
- 어플리케이션의 기능 표현
- 변경을 View에 통지
View
View는 사용자 인터페이스(UI) 요소를 나타냅니다. 이는 Controller에게 받은 Model의 데이터를 사용자에게 시각적으로 보여주기 위한 역할을 수행합니다. 사용자에게 보여지는 화면이라고 볼 수 있습니다.
- Model을 화면에 시각적으로 표현
- Model에게 업데이트 요청
- 사용자의 입력을 Controller에게 전달
- Controller가 View를 선택하도록 허용
Controller
Controller는 Model과 View 사이에서 데이터 흐름을 제어합니다. 사용자가 접근한 URL에 따라 요청을 파악하고 URL에 적절한 Method를 호출하여 Service에서 비즈니스 로직을 처리합니다. 이후 결과를 Model에 적재하여 View에게 전달하는 역할을 수행합니다. 결국 Controller는 Model과 View의 역할을 분리하는 중요한 요소입니다.
- 어플리케이션의 행위 정의
- 사용자 액션을 모델 업데이트와 mapping
- 응답에 대한 View 선택
MVC Pattern의 장단점
장점
- 각 구성 요소의 역할이 명확하게 분리되어 있어, 코드의 가독성과 유지 관리가 용이합니다.
- 구성 요소간의 낮은 결합도로 코드의 재사용성이 높고, 개별 구성 요소를 독립적으로 개발, 수정 및 테스트 할 수 있습니다.
- 동일한 모델을 여러 뷰에서 사용할 수 있으므로 어플리케이션의 유연성이 향상됩니다.
단점
- 프로젝트의 규모가 커지면 복잡해질 수 있습니다.
- 여러 파일로 나누어서 개발을 하기 때문에 유지보수 시간이 길어질 수 있습니다.
MVC1과 MVC2
MVC1
- MVC1 패턴은 View와 Controller를 JSP가 담당하는 형태입니다.
- 간단하고 빠르게 개발할 수 있으며, 작은 규모의 웹 애플리케이션에 적합합니다.
- JSP에서 MVC가 모두 이루어져 재사용성, 가독성이 떨어져 유지보수성이 낮다는 단점이 있습니다.
MVC2
- MVC2 패턴은 MVC1 패턴을 보완한 개발 패턴으로 Model, View, Controller의 역할이 분리되어 있습니다.
- 각 역할별로 분리되어 있어 유지보수성이 높습니다.
- 코드의 모듈화와 재사용성이 향상되어 유지보수가 용이하고 대규모 프로젝트에 적합합니다.
Spring MVC
Spring MVC란?
Spring MVC는 Spring에서 제공하는 웹 모듈로 Model, View, Controller의 세가지 구성요소를 사용해 사용자의 다양한 Http Request를 처리하고 다양한 응답을 할 수 있도록 만든 프레임워크 입니다. Spring MVC는 Model2가 기반이 됩니다.
Spring MVC의 특징
- Spring은 DI(Dependency Injection)나 AOP(Aspect Oriented Programming) 같은 기능 뿐만 아니라 Servlet 기반의 Web 개발을 위한 MVC Framework를 제공
- Spring MVC는 Model2 Architecture와 Front Controller Pattern을 Framework 차원에서 제공
- Spring MVC Framework는 Spring을 기반으로 하고 있기 때문에 Spring이 제공하는 기능을 사용
Spring MVC의 구성요소
DispatcherServlet(Front Controller)
- DispatcherServlet은 클라이언트의 요청을 전달 받습니다.
- Controller에게 클라이언트의 요청을 전달하고, Controller가 리턴한 결과값을 View에 전달하여 알맞은 응답을 생성하도록 합니다.
- DispatcherServlet은 HttpServlet을 상속받아 사용하고, 서블릿으로 동작합니다.
- Controller의 Controller 이기 때문에 Front Controller라고 불리기도 합니다.
HandlerMapping
- HandlerMapping은 클라이언트의 요청 URL을 어떤 컨트롤러가 처리할지 결정하는 기능을 합니다.
Controller
- Controller는 클라이언트의 요청을 처리한 뒤 Model을 호출하고 그 결과를 DispatcherServlet에 알려줍니다.
ModelAndView
- Controller가 처리한 데이터 및 화면에 대한 정보를 보유한 객체입니다.
ViewResolver
- Controller가 리턴한 뷰 이름을 기반으로 Controller의 처리 결과를 보여줄 View를 결정합니다.
View
- Controller의 처리결과를 보여줄 응답 화면
Spring MVC의 요청 흐름 및 실행 순서
1. DispatchServlet이 요청을 수신
- 단일 Front Controller Servlet
- 요청을 수신하여 처리를 다른 컴포넌트에 위임
- 어느 Controller에 요청을 전송할지 결정
2. DispatcherServlet은 Handler Mapping에 어느 Controller를 사용할지 문의
- URL과 Mapping
3. DispatcherServlet은 요청을 Controller에 전송하고 Controller는 요청을 처리한 후 결과 리턴
- 비즈니스 로직 수행 후 결과 정보(Model)가 생성되어 JSP와 같은 View에서 사용됨
4. ModelAndView Object에 수행 결과가 포함되어 DispatcherServlet에 리턴
5. ModelAndView는 실제 JSP 정보를 갖고 있지 않으며, ViewResolver가 논리적 이름을 실제 JSP 이름으로 변환
6. View는 결과정보를 사용해 화면을 표현
reference
[Spring] 스프링 MVC 패턴에 대해 알아봅시다.
[Spring] Web MVC 패턴의 흐름과 Controller, View, Model 구현법
'Back-End > Spring' 카테고리의 다른 글
[Spring] JPA Entity Mapping (0) | 2024.07.16 |
---|---|
[Spring] JPA 프로젝트 생성 및 예제 실습 -1- (0) | 2024.07.11 |
[Spring] JPA(Java Persistence API)란? (0) | 2024.07.09 |
[Spring] DispatcherServlet이란? (0) | 2024.06.24 |
[Spring] Spring Framework란? (0) | 2024.06.09 |