1.MVC

- Model : 어플리케이션에서 사용되는 데이터와 그 데이터를 처리하는 부분입니다.
- View : 사용자에서 보여지는 UI 부분입니다.
- Controller : 사용자의 입력(Action)을 받고 처리하는 부분입니다.
장점: MVC 패턴의 장점은 가장 단순한 패턴이기도 하고 널리 사용되고 있는 패턴이라는 것입니다.
단점: MVC 패턴의 단점은 View와 Model 사이의 의존성이 높다는 것입니다. 높은 의존성은 앱이 복잡해지고 유지보수가 어려워집니다.
2.MVP, MVVM
MVP(Model.View.Presenter)

- Model : 앱에서 사용되는 데이터와 그 데이터를 처리하는 부분입니다.
- View : 사용자에서 보여지는 UI 부분입니다.
- Presenter : View에서 요청한 정보로 Model을 가공하여 View에 전달해 주는 부분입니다.
장점: MVC에서 파생된, Model과 View 간의 의존성이 없는 아키텍처 패턴입니다.
단점: MVP 패턴의 단점은 View와 Model 사이의 의존성은 해결되었지만, View와 Presenter 사이의 의존성이 커진다는 단점이 있습니다. 앱이 복잡해 질 수록 View와 Presenter 사이의 의존성이 강해지는 단점이 있습니다.
MVVM(Model.View.ViewModel)

- Model : 앱에서 사용되는 데이터와 그 데이터를 처리하는 부분입니다.
- View : 사용자에서 보여지는 UI 부분입니다.
- View Model : View를 표현하기 위해 만든 View를 위한 Model입니다. View를 나타내 주기 위한 Model이자 View를 나타내기 위한 데이터 처리를 하는 부분입니다.
장점:View와 Model 사이의 의존성이 없습니다. 또한 Command 패턴과 Data Binding을 사용하여 View와 ViewModel사이의 의존성 또한 없앤 패턴입니다. 그리고 중복되는 코드를 모듈화 하여 개발할 수 있습니다.
단점:MVVM 패턴의 단점은 ViewModel의 설계가 쉽지 않다는 점입니다.
3.Spring MVC Life Cycle
3.1.실행흐름
Filter → DispatcherServlet → HandleMapping → HandlerInterceptor → Controller → Service → Repository → ViewResolver

- Filter
Web Application의 전역적인 로직을 담당한다.
전체적인 필터링(설정)을 하는 곳이다.
DispatcherServlet에 들어가기 전인 Web Application단에서 실행된다.
- DispatcherServlet(Controller 매핑)
*Dispatcher==”배치 담당자” ⇒ Request에 대해서 어느 컨트롤러로 매핑시킬것인지 배치하는 역할
요청되는 모든 Request를 받아 처리해주는 서블릿HandlerMapping에게 Request에 대해 매핑할 Controller 검색을 요청한다. HandlerMapping으로부터 Controller 정보를 반환받아 해당 Controller와 매핑시킨다.
- HandlerMapping(알맞은 Controller 정보 제공)
DispatcherServlet으로부터 검색을 요청받은 Controller를 찾아 정보를 리턴해준다.
- HandlerInterceptor
Request가 Controller에 매핑되기전 앞단에서 부가적인 로직을 추가할 수 있다. 주로 세션, 쿠키, 권한 인증 로직에 많이 사용된다.
- Controller
Request와 매핑되는 곳이다. Request에 대해 어떤 로직(Service)으로 처리할 것인지를 결정하고, 그에 맞는 Service를 호출한다. Service Bean을 스프링 컨테이너로부터 주입받아야 한다. Service Bean의 메소드를 호출해야 하기 때문이다.
- Service
데이터 처리 및 가공을 위한 비즈니스 로직을 수행한다.
Request에 대한 실질적인 로직을 수행하기 때문에, Spring MVC Request Lifecycle의 심장이라고 볼 수 있다.
Repository를 통해 DB에 접근하여 데이터의 CRUD(Create, Read, Update, Delete)를 처리한다.
- Repository ( DAO )
DB에 접근하는 객체이다.
DAO(Data Access Object) 라고 부른다.
Service에서 DB에 접근할 수 있게 하여 데이터의 CRUD를 할 수 있게 해준다.
- ViewResolver
Controller에서 리턴한 View의 이름을 DispatcherServlet으로부터 넘겨받고, 해당 View를 렌더링한다. 렌더링한 View는 DispatcherServlet으로 리턴하고, DispatcherServlet에서는 해당 View 화면을 Response 한다.
만약 View없이 데이터만 전달하고 싶다면 ViewResolver가 필요없다.
3.2.Filter vs HandleInterceptor vs AOP

filter는 Application
Interceptor는 SpringApplication단이고 AOP가 실행되기 전에 실행된다.
AOP는 SpringApplication단에서 실행되지만 Interceptor가 실행된 이후에 실행된다.
참고: https://velog.io/@din0121/Design-Pattern-MVC-MVP-MVVM-%EB%B9%84%EA%B5%90
'cs > dev' 카테고리의 다른 글
| [Spring] Spring MVC 와 Spring WebFlux 차이 (1) | 2025.10.28 |
|---|---|
| [Spring]Spring의 3가지 핵심 프로그래밍 모델(AOP, DI, IOC) (0) | 2025.10.22 |
| [CS]TDD(테스트 주도 개발) (1) | 2025.10.17 |
| [DB]파티셔닝? 샤딩? 레플리케이션? (partitioning? sharding? replication?) (0) | 2025.10.16 |
| [CS]RDB단점과 NoSQL이란? (0) | 2025.10.16 |