MVC란?
모델-뷰-컨트롤러(model–view–controller, MVC)의 약자로, 소프트웨어 디자인 패턴이다.
Model
애플리케이션의 정보(데이터)를 나타낸다.
모델의 상태에 변화가 있을 때 컨트롤러와 뷰에 이를 통보한다.
이와 같은 통보를 통해 뷰는 최신의 결과를 보여줄 수 있고, 컨트롤러는 모델의 변화에 따른 적용 가능한 명령을 추가, 제거 수정할 수 있다.
뷰나 컨트롤러가 직접 모델의 상태를 읽어올 수도 있다.
Model의 규칙
1. 사용자가 편집하길 원하는 모든 데이터를 가지고 있어야 한다.
2. 뷰나 컨트롤러에 대해서 어떤 정보도 알지 말아야 한다.
3. 변경이 일어나면, 변경 통지에 대한 처리 방법을 구현해야만 한다.
Controller
모델에 명령을 보냄으로써 모델의 상태를 변경할 수 있다.
데이터와 비즈니스 로직 사이의 상호동작을 관리한다.
Controller의 규칙
1. 모델이나 뷰에 대해서 알고 있어야한다.
2. 모델이나 뷰의 변경을 모니터링 해야한다.
View
사용자가 볼 결과물을 생성하기 위해 모델로부터 정보를 얻어 온다.
View의 규칙
1. 모델이 가지고 있는 정보를 따로 저장해서는 안된다.
2. 모델이나 컨트롤러와 같이 다른 구성요소를 몰라야한다.
3. 변경이 일어나면 변경 통지에 대한 처리 방법을 구현해야만 한다.
우리가 흔히 사용하고 있는 MVC 패턴은 MVC1, MVC2 아키텍쳐에서 발전된 패턴이다.
MVC1
- User(Client)로부터 요청이 들어오면 DB로부터 필요한 데이터를 받은 Model 객체(Java Bean)를 JSP 페이지(view)에 담아 응답으로 보내는 패턴
- JSP가 뷰와 컨트롤러를 모두 담당하기 때문에 책임을 너무 많이 지게 되고, JSP의 코드가 복잡해진다.
- 간단한 프로젝트에는 적합하지만, 프로젝트가 확장될수록 유지보수에 문제가 발생한다.
- 이러한 점을 보완하여 컨트롤러 역할을 하는 Servlet이 추가된 MVC2 패턴이 나왔다.
*JSP : JavaServer Pages의 약자
HTML 코드에 JAVA 코드를 사용하여 동적 웹페이지를 생성하는 웹 어플리케이션 도구(라이브러리)이다.
*Servlet : 클라이언트가 요청한 것에 대한 결과를 반환하는 자바 프로그램
자바를 사용하여 웹을 만들기 위해 필요한 기술
Servlet 클래스의 구현 규칙을 지킨 자바 웹 프로그래밍 기술
JSP와 Servlet에 대해서는 나중에 자세히 포스팅 해야겠다.
MVC2
- 널리 표준으로 사용되는 패턴
- MVC2 패턴은 요청을 하나의 컨트롤러(Servlet)가 먼저 받는다. -> MVC과는 다르게 컨트롤러와 뷰가 분리됨
- 컨트롤러(Servlet)는 요청에 대한 비즈니스 로직을 처리한 후, 이를 JSP 파일에 반영하는 역할을 수행한다.
- MVC1 패턴보다 구조가 복잡해졌지만, 각종 프레임워크가 잘 발전되어 개발자가 세세한 구성은 신경쓰지 않아도 된다.
- 대표적인 것이 spring 프레임워크!
Spring MVC
MVC2 + 스프링 프레임워크
구성요소
구성요소 | 설명 |
DispatcherServlet (Front Controller) |
- 모든 요청이 먼저 전달됨. - 요청과 매핑되는 컨트롤러(Controller)를 지정하는 컨트롤러(Front Controller) |
HandlerMapping | - DispatcherServlet이 요청을 적절한 컨트롤러에 매핑하기 위해 사용 - 요청 URL과 매핑된 컨트롤러를 검색하여 반환 |
Controller (Handler) |
- 매핑된 컨트롤러가 요청에 맞는 비즈니스 로직 처리 - Model 데이터를 준비하고, 적절한 뷰 이름을 포함하는 ModelAndView 객체를 반환 |
ModelAndView | - Controller에 의해 리턴 된 Model과 View가 저장된 객체 - Model : Key-Value 형태의 데이터 저장 객체 - View(ViewName) : ViewResolver에 리턴 될 View 지정 |
ViewResolver |
- DispatcherServlet이 ViewResolver를 사용하여 컨트롤러가 반환한 뷰 이름을 실제 뷰 구현으로 변환 - ModelAndView 객체를 처리하여 View를 리턴(Model에 저장된 데이터를 사용) - 뷰의 논리적 이름을 물리적 뷰 리소스로 매핑 |
View | - ViewResolver에 의해 결정된 뷰는 최종 결과를 렌더링 - 뷰는 Model을 사용하여 사용자에게 보여질 HTML이나 다른 형식의 응답을 생성 |
조금 더 자세히 그림으로 순서를 살펴보자.
DTO, DAO 등 정리할 개념이 많지만 지금은 처리 순서에 치중해서 살펴보겠다.
처리 순서
- 클라이언트가 서버에 요청
- DispatcherServlet가 요청을 받고 적절한 컨트롤러에 매핑하기 위해 HandlerMapping에 요청
- Handler 조회를 통해 Handler를 실행할 수 있는 HanderAdapter를 실행한다.
- HanderAdapter에 요청(실행)하면 실제 Handler(Controller)에 요청(실행)
- DispatcherServlet은 프로젝트 파일 내의 servlet-context.xml 파일의 @Controller 인자를 통해 등록한 요청을 위임
- 매핑된 Controller에서 @RequestMapping을 통해 요청을 처리할 메소드로 이동
- Controller는 해당 요청을 처리할 Service를 받아 비즈니스 로직을 Service에게 위임
- Service는 요청에 필요한 작업을 수행하고, 요청에 대해 DB에 접근해야 한다면 DAO에 요청하여 처리 위임
- DAO는 DB정보를 DTO를 통해 받아 Service에게 전달
- Service는 전달받은 데이터를 Controller에게 전달
- Controller는 Model 객체에게 요청에 맞는 View 정보를 담아 DispatcherServlet에게 전송
- DispatcherServlet는 ViewResolver에게 전달받은 View 정보를 전달
- ViewResolver는 응답할 View에 대한 JSP를 찾아 DispatcherServlet에게 전달
- DispatcherServlet는 응답할 View의 Render를 지시하고 뷰는 로직을 처리
- DispatcherServlet는 클라이언트에게 랜더링된 뷰를 응답하며 요청을 마침
틀린 부분에 대해 지적해주시면 감사하겠습니다.
Reference
모델-뷰-컨트롤러 - 위키백과, 우리 모두의 백과사전
위키백과, 우리 모두의 백과사전. 모델, 뷰, 컨트롤러의 관계를 묘사하는 간단한 다이어그램. 웹 애플리케이션에서 일반적인 MVC 구성요소 다이어그램 모델-뷰-컨트롤러(model–view–controller, MVC)
ko.wikipedia.org
Spring MVC 구조 / MVC1 MVC2
MVC (Model - View - Controller) 소프트웨어 공학에서 사용되는 소프트웨어 디자인 패턴이다. Model 모든 데이터 정보를 가공하여 가지고 있는 컴포넌트 상태 변화가 있을 때 컨트롤러와 뷰에 통보한다. (
mag1c.tistory.com
[Spring] MVC패턴 MVC1 , MVC2 , SpringMVC 차이점과 구조
Model - 프로그램의 내부 상태, 데이터(정보) 를 뜻함View - 사용자 인터페이스, 클라이언트에게 보여지는 화면을 뜻함Controller - 데이터와 비즈니스 로직 간의 상호 작용을 뜻함, DB 접근 경우에 따라
velog.io
MVC in Spring Boot: DAO, DTO, Entity class
데이터베이스와 데이터를 주고 받기 위해 정의한 여러가지 객체의 개념을 정리한 포스트입니다. 🤡
velog.io
'Server' 카테고리의 다른 글
[JPA] JPA란 / 영속성 컨텍스트 #1 (0) | 2024.08.02 |
---|---|
[JPA] GenerationType.IDENTITY 오류 / AUTO_INCREMENT (0) | 2024.08.02 |
DDD 개념 / DAO와 Repository 차이 (0) | 2024.07.31 |
[SpringBoot] 패키지 구조 선택하기 계층형/도메인형 (0) | 2024.07.30 |
[SpringBoot] DTO, DAO, VO 개념 알아보기 (0) | 2024.07.12 |