MVC는 무엇인가
Model-View-Controller의 약자
디자인 패턴의 중 하나이다.
소프트웨어를 구성하는 요소를 Model, View, Controller로 구분하여 역할을 분리한다.
Model
데이터와 비즈니스 로직을 담당
데이터 베이스와 연동하여 저장하고 불러오는 등의 작업 수행
View
사용자 인터페이스를 담당
프런트엔드라고 생각하면 될듯하다 사용자에게 보이는 부분을 말한다.
Controller
모델과 뷰가 상호작용을 조정하고 제어한다.
사용자가 입력한 값을 받아 모델에 전달하고 모델의 결과를 뷰에 업데이트한다.

스프링에서의 MVC
Spring Web MVC는 Servlet API를 기반으로 구축된 독창적인 웹 프레임워크로, 처음부터 Spring Framework에 포함되어 왔으며, 정식 명칭인 "Spring Web MVC"는 소스 모듈(spring-webmvc)의 이름에서 따왔으나, "Spring MVC"로 더 일반적으로 알려져 있습니다. …
Spring MVC는 중앙에 있는 DispatcherServlet이 요청을 처리하기 위한 공유 알고리즘을 제공하는 Front Controller 패턴을 중심으로 설계되어 있으며 이 모델은 유연하고 다양한 워크 플로우를 지원합니다.
https://docs.spring.io/spring-framework/reference/web/webmvc.html
Spring Web MVC :: Spring Framework
Spring Web MVC is the original web framework built on the Servlet API and has been included in the Spring Framework from the very beginning. The formal name, "Spring Web MVC," comes from the name of its source module (spring-webmvc), but it is more commonl
docs.spring.io
‘Spring에서 MVC 디자인 패턴을 적용하여 HTTP 요청을 효율적으로 처리한다.
Servlet (서블릿)은 자바를 사용하여 웹 페이지를 동적으로 생성하는 서버 측 프로그램 혹은 그 사양을 말한다.

사용자가 Client(브라우저)를 통해 서버에 Http Request, API 요청함
요청받은 Servlet 컨테이너는 HttpServletRequest, HttpServletResponse 객체를 생성
- HTTP에 담긴 데이터를 사용하기 위한 객체
설정된 정보를 통해 Servlet에 대한 요청을 찾음
Servlet에서 service메서드를 호출하고 요청 메서드에 따라 doGet, doPost 등 메서드 호출
결과를 그대로 반환하거나 HttpServletResponse객체에 응답을 담아 Client에 반환
응답완료 되면 생성된 객체는 소멸된다.
Front Controller
- 모든 API 요청을 앞서 살펴본 서블릿의 동작 방식에 맞춰 코드를 구현한다면 무수히 많은 Servlet 클래스를 구현해야 합니다.
- 따라서 Spring은 DispatcherServlet을 사용하여 Front Controller 패턴 방식으로 API 요청을 효율적으로 처리하고 있습니다.
- **Client(브라우저)**에서 HTTP 요청이 들어오면 DispatcherServlet 객체가 요청을 분석합니다.
- DispatcherServlet 객체는 분석한 데이터를 토대로 Handler mapping을 통해 Controller를 찾아 요청을 전달해 줍니다.
- Controller → DispathcerServlet
- 해당 Controller는 요청에 대한 처리를 완료 후 처리에 대한 결과 즉, 데이터('Model')와 'View' 정보를 전달합니다.
- DispatcherServlet → Client
- ViewResolver 통해 View에 Model을 적용하여 View를 Client에게 응답으로 전달합니다.
결국엔 위의 내용으로 인하여 우리는 따로 무언갈 만들 필요 없이 쉽게 데이터를 주고받고 할 수 있는 것 같다.
'TIL(Today I Learned)' 카테고리의 다른 글
| [TIL] @Controller (0) | 2023.11.04 |
|---|---|
| [TIL] Spring의 Controller (0) | 2023.11.03 |
| [TIL]Lombok과 application.properties (0) | 2023.11.02 |
| [TIL] Gradle, 서버, HTTP (1) | 2023.11.01 |
| [TIL] 팀과제 키오스크 만들기 문제점(2023.10.30) (2) | 2023.10.31 |