파게로그
[Spring MVC] Spring MVC Pattern 본문
MVC Pattern
MVC는 소프트웨어 디자인 패턴으로서 어떤 프로젝트나 애플리케이션의 구성 요소를 Model, View, Controller로 구분한다.
🎯 Model: data storage, integrity, consistency, queries & mutations
애플리케이션의 데이터를 가진 객체를 뜻한다.
즉 데이터베이스, 초기에 정의하는 상수, 초기화 값, 변수 등을 뜻하거나, 또는 이러한 데이터의 가공을 책임지는 컴포넌트를 뜻한다. DAO(Data Access Object), DTO(Data Transfer Object ~ VO(Value Object))로 구분할 수 있다(velog.io/@emawlrdl/DAO%EC%99%80-DTO)
규칙
▪ 사용자가 편집하길 원하는 모든 데이터를 가지고 있어야 한다.
▪ 뷰나 컨트롤러에 대해서 어떤 정보도 알지 말아야 한다.
▪ 변경이 일어나면, 변경 통지에 대한 처리 방법을 구현해야만 한다.
🎯 View: presentation, assets & code
UI 요소를 뜻한다.
즉 데이터와 객체의 입력과 출력을 뜻한다.
규칙
▪ 모델이 가지고 있는 정보를 따로 저장해서는 안 된다.
▪ 모델이나 컨트롤러에 대해서 어떤 정보도 알지 말아야 한다.
▪ 변경이 일어나면, 변경 통지에 대한 처리 방법을 구현해야만 한다.
🎯 Controller: receive, interpret & validate input, create & update views, query & modify models
데이터와 비즈니스 로직 사이의 상호작용을 제어한다.
Model과 View는 서로에 대해 알지 못하며, 변경을 수신하거나 통지하는 방법만 가지고 있다. 이들을 중재하고자 하는 요소가 Controller이다.
규칙
▪ Model과 View에 대해서 알고 있어야 한다.
▪ Model과 View의 변경을 모니터링해야한다.
▪ View는 Controller에게 gesture를 delegate(위임)함 → Strategy Pattern
MVC 패턴은 웹에서는 다음과 같이 동작한다(생활코딩).
1. 사용자가 웹 사이트에 접속한다. (Uses)
2. Controller는 사용자가 요청한 웹 페이지를 서비스하기 위해서 Model을 호출한다. (Manipulates)
3. Model은 데이터베이스나 파일과 같은 데이터 소스를 제어한 후에 그 결과를 반환한다.
4. Controller는 Model이 반환한 결과를 View에 반영한다. (Updates)
5. 데이터가 반영된 View는 사용자에게 보여진다. (Sees)
Model: Publisher, View: Subscriber → Observer Pattern
이건 전통적인 GUI 프로그래밍에서의 MVC 패턴이다. 웹 MVC나 스프링 MVC와는 다르지만 참고할 만하다.
Spring MVC Pattern
Spring MVC Pattern을 따르면, 사용자의 요청부터 응답까지의 과정은 다음과 같다.
1. DispatcherServlet이 클라이언트로부터의 요청을 받는다.
2. DispatcherServlet이 HandlerMapping을 통해서 요청을 처리하는 Controller를 검색한다.
3. DispatcherServlet이 해당 Controller를 실행하여 요청을 처리한다.
4. Controller는 비즈니스 로직을 수행한 산출물인 Model 정보와 이를 보여줄 View 정보를 ModelAndView 객체에 저장하여 반환한다.
5. DispatcherServlet은 ViewResolver로부터 View 정보를 추출하고, ViewResolver를 이용하여 응답으로 사용할 View를 얻어낸다.
6. DispatcherServlet은 ViewResolver를 통해 찾아낸 View를 실행하여 사용자에게 응답을 전송한다.
'콤퓨타 왕기초 > Spring' 카테고리의 다른 글
[Spring MVC] Spring Dispatcher를 Front Controller로 설정하기 (0) | 2021.04.26 |
---|---|
[Spring MVC] Spring Tools 4 개발 환경 세팅 (0) | 2021.04.26 |
여러 Advice (0) | 2021.04.25 |
Spring으로 AOP 구현 (0) | 2021.04.22 |
AOP(Aspect Oriented Programming) (0) | 2021.04.21 |