MVC
: Model-View-Controller 의 약자. 소프트웨어 디자인 패턴 중 하나.
- 소프트웨어를 구성하는 요소들을 Model, View, Controller로 구분하여 각각의 역할을 분리
- 코드의 재사용성과 유지 보수성을 높여 개발자들 간의 협업을 용이하게 함.
Model
: 각각의 데이터와 비즈니스 로직을 담당
- 데이터베이스와 연동, 데이터를 저장하고 불러오는 등의 작업을 수행
View
: 사용자 인터페이스를 담당
- 사용자가 보는 화면이나 버튼, 폼 등을 디자인하고 구현
Controller
: Model과 View 사이의 상호작용을 조정하고 제어
- 사용자의 입력을 받아 Model에 전달하고 Model의 결과를 바탕으로 View를 업데이트함
Spring MVC
: 스프링에서 MVC 디자인 패턴을 적용하여 HTTP 요청을 효율적으로 처리
Servlet
: 자바를 사용하여 웹 페이지를 동적으로 생성하는 서버 측의 프로그램 혹은 그 사양
- 톰캣(WAS)안에서 서블릿이라는 기술이 동작하고 있다고 생각하면 됨.
( 웹서버는 동적인 처리를 할 수 없어 WAS에게 요청을 전달. )
서블릿 동작 과정
- 클라이언트가 서버에 요청
- 요청을 받은 Servlet 컨테이너는 HttpServletRequest, HttpServletResponse 객체 생성
- API 요청에 대해 확인 후, web.xml에서 해당 요청이 어떤 Servlet과 매칭이 되는지 탐색
- 찾은 매칭되는 Servlet 실행
- 해당하 Servlet에서 서비스 method 호출
- 메서드 호출한 뒤, HTTP 요청이 어떤 메서드 방식인지 확인
- 해당 하는 방식에 맞게끔 메서드 호출 (GET 방식이면 doGet(), POST 방식이면 doPost()...)
- 호출한 메서드들의 결과를 그대로 반환
or
동적페이지 생성 후 HttpServletResponse 객체에 응답을 담아 클라이언트에 반환 - HttpServletRequest, HttpServletResponse 객체 소멸
❗같이 보면 좋을 것 같은 블로그 ❗
https://velog.io/@falling_star3/Tomcat-%EC%84%9C%EB%B8%94%EB%A6%BFServlet%EC%9D%B4%EB%9E%80
DispatcherServlet
: 전달을 하는 servlet
- 만약에 API 가 열 개정도 있다고 가정할 때, 10개의 API 에 매칭이 되는 Servlet의 객체들을 다 구현하고 어떤 메서드 방식인지 확인하는 등 여러 가지 작업들을 모두 개발자가 다 작성해야하는데, 이러한 불편함을 스프링에서 해결하기 위해 만든 것이 바로 DispatcherServlet
- 스프링은 DispatcherServlet을 사용해 Front Controller 패턴방식으로 모든 API들을 효율적으로 처리함.
Front Controller 패턴 동작과정
- 클라이언트가 요청을 보냄
- DispatcherServlet은 해당 요청 분석
- DispatcherServlet은 분석한 데이터를 토대로 Handler mapping을 통해 Controller를 찾아 요청 전달
- Handler mapping에는 API path와 Controller 메서드가 매칭되어 있음
@RestController
public class HelloController {
@GetMapping("/api/hello")
public String hello() {
return "Hello World!";
}
}
- /api/hello 라는 경로로 GET 방식으로 들어오면 해당 메서드를 실행시킬 것이라는 것을 @GetMapping 을 통해 정보 전달
- 정보들을 토대로 handler mapping이 아래와 같이 매칭을 함.
- 매칭된 정보를 DispatcherServlet이 확인 후 해당하는 Controller에 요청 전달
- Controller가 해당 요청에 대한 작업 수행
- 요청에 대한 처리가 완료되면 결과를 Model에 담고 View에 대한 정보를 DispatcherServlet에 전달
- DispatcherServlet은 정보를 가지고 ViewResolver를 통해 View에 Model을 적용
- View를 클라이언트에게 반환
용어정리
- HttpServletRequest, HttpServletResponse
: 약속된 HTTP의 규격을 맞추면서 HTTP에 담긴 데이터를 쉽게 사용하기 위해 만들어낸 객체
- HttpServletRequest
➡️ 개발자들 대신 서블릿이 HTTP를 분석해 그 안에 있는 사용해야 할 데이터와 정보들을 해당 객체에 넣어줌.
➡️ Request 객체에 HTTP 정보가 들어있음. - HttpServletResponse 객체를 처음에 같이 만드는 이유?
➡️ 요청을 받았으면 그에 대한 응답도 해야하기 때문에 응답을 하기 위한 Servlet Response 객체도 같이 생성
- HttpServletRequest
'내일배움캠프(Sparta) > Spring' 카테고리의 다른 글
[Spring] Jackson / Path Variable / Request Param (1) | 2023.11.02 |
---|---|
[Spring] 데이터를 Client에 반환하는 방법 (0) | 2023.11.02 |
[Spring] Controller / 정적 페이지 / 동적 페이지 (0) | 2023.11.02 |
[Spring] 테스트 코드 / Lombok / application.properties (1) | 2023.11.01 |
[Spring] Gradle / Server / HTTP (1) | 2023.10.31 |