-
스프링 MVC란?spring/스프링 입문 주차 2024. 1. 17. 18:05
MVC
Model
- 데이터와 비즈니스 로직을 담당
- 데이터베이스와 연동하여 데이터를 저장하고 불러오는 등의 작업을 수행한다.
View
- 사용자 인터페이스를 담당
- 사용자가 보는 화면과 버튼, 폼 등을 디자인하고 구현한다.
Controller
- Model과 View 사이의 상호작용을 조정하고 제어한다.
- 사용자의 입력을 받아 Model에 전달하고, Model의 결과를 바탕으로 View를 업데이트 한다.
Spring MVC란?
Spring Web MVC는 Servlet API를 기반으로 구축된 독창적인 웹 프레임워크로, 처음부터 SpringFramework에
포함되어 왔으며, 정식 명칭인 "Spring Web MVC"는 소스 모듈(spring-webmvc)의 이름에서 따왔으나,
"Spring MVC"로 더 일반적으로 알려져 있다.
...
Spring MVC는 중앙에 있는 DispatcherServlet이 요청을 처리하기 위한 공유 알고리즘을 제공하는
Front Controller 패턴을 중심으로 설계되어 있으며 이 모델은 유연하고 다양한 워크 플로우를 지원한다.
- Spring 공식 문서에서 Spring MVC에 대한 설명으로 'DispatcherServlet이 중앙에서 HTTP 요청을 처리해주는데
이는 Front Controller 패턴으로 설계되어 있다'라고 설명하고 있다.
- 쉽게 표현해보자면 'Spring에서 MVC 디자인 패턴을 적용하여 HTTP 요청을 효율적으로 처리하고 있다'
라고 이해하면 좋다.
DispatcherServlet에 대한 이해를 돕기위해 먼저 Servlet이 무엇인지 학습하고 가자.
- Servlet(서블릿)은 자바를 사용하여 웹 페이즈를 동적으로 생성하는 서버 측 프로그램 혹은 그 사양을 말한다.
사용자가 (HTTP) API 요청했을 때 서버의 서블릿이 어떻게 동작되고 있는지 학습해보자.1. 사용자가 Client(브라우저)를 통해 서버에 HTTP Request 즉, API 요청을 한다.
2. 요청을 받은 Servlet 컨테이너는 HttpServletRequest, HttpServletResponse 객체를 생성한다.
- 약속된 HTTP의 규격을 맞추면서 쉽게 HTTP에 담긴 데이터를 사용하기 위한 객체이다.
3. 설정된 정보를 통해 어떠한 Servlet에 대한 요청인지 찾는다.
4. 해당 Servlet에서 service 메서드를 호출한 뒤 브라우저의 요청 Method에 따라 doGet 혹은 doPost
등의 메서드를 호출한다.
5. 호출한 메서드들의 결과를 그대로 반환하거나 동적 페이지를 생성한 뒤 HttpServletResponse 객체에
응답을 담아 Client(브라우저)에 반환한다.
6. 응답이 완료되면 생성한 HttpServletRequest, HttpServletResponse 객체를 소멸한다.Front Controller
- 모든 API 요청을 앞서 살펴본 서블릿 동작 방식에 맞춰 코드를 구현한다면 무수히 많은 Servlet 클래스를
구현해야 한다.
- 따라서 Spring은 DispatcherServlet을 사용하여 Front Controller 패턴 방식으로 API 요청을 효율적으로
처리하고 있다.
- 이번에는 Front Controller 패턴의 동작과정을 학습해보자.1. Client(브라우저)에서 HTTP 요청이 들어오면 DispatcherServlet 객체가 요청을 분석한다.
2. DispatcherServlet 객체는 분석한 데이터를 토대로 Handler mapping을 통해 Controller를 찾아
요청을 전달해 준다.[Sample] GET /api/hello → HelloController 의 hello() 함수 GET /user/login → UserController 의 login() 함수 GET /user/signup → UserController 의 signup() 함수 POST /user/signup → UserController 의 registerUser() 함수
Handler mapping 에는 API path 와 Controller 메서드가 매칭되어 있습니다.
@RestController public class HelloController { @GetMapping("/api/hello") public String hello() { return "Hello World!"; } }
- API path 즉, URL을 Controller에 작성하는 방법은 @Controller 애너테이션이 달려있는 클래스를 생성한 뒤 @GetMapping 처럼 요청한 HTTP Method 와 일치하는 애너테이션을 추가한 메서드를 구현한다.
- URL은 @GetMapping("/api/hello") 이처럼 해당 애너테이션의 속성값으로 전달해주면 된다.
- 해당 메서드명은 URL을 매핑하는데 영향을 미치지 않음으로 자유롭게 정해도 상관 없다.
- 이제는 직접 Servlet을 구현하지 않아도 DispatcherServlet에 의해 간편하게 HTTP 요청을 처리할 수 있게 되었다.
3. Contoller -> DispatcherServlet
- 해당 Contoller는 요청에 대한 처리를 완료 후 처리에 대한 결과 즉, 데이터("Model')와 'View' 정보를 전달한다.
4. DispatcherServlet -> Client
- ViewResolver를 통해 View에 Model을 적용하여 View를 Client에게 응답으로 전달한다.'spring > 스프링 입문 주차' 카테고리의 다른 글
HTTP 데이터를 객체로 처리하는 방법 (0) 2024.01.18 PathVariable과 ReqestParam (0) 2024.01.18 스프링에서 Jackson 형태로 반환하는 법 (0) 2024.01.18 Controller 이해하기 (0) 2024.01.17 간단한 Postman 사용법 (0) 2024.01.17 - API path 즉, URL을 Controller에 작성하는 방법은 @Controller 애너테이션이 달려있는 클래스를 생성한 뒤 @GetMapping 처럼 요청한 HTTP Method 와 일치하는 애너테이션을 추가한 메서드를 구현한다.