
오늘은 내배캠 스탠다드 이론에서 배운 Spring MVC에 대해서 정리해보았다!
각 컴포넌트가 서로 분리되어 각자의 역할에 집중할 수 있기 때문에 시스템 결합도를 낮출 수 있다. 또한, 유지보수가 쉬우며, 중복코드를 제거할 수 있고, 애플리케이션의 확장성 및 유연성이 증가한다.

Spring MVC가 제공한다.Servlet (서블릿)은 자바를 사용하여 웹 페이지를 동적으로 생성하는 서버 측 프로그램 혹은 그 사양을 말한다.
자바 웹 애플리케이션에서 HTTP 요청과 응답을 처리하는 표준 인터페이스

- 사용자가 Client(브라우저)를 통해 서버에 HTTP Request 즉, API 요청을 한다.
- 요청을 받은 Servlet 컨테이너는 HttpServletRequest, HttpServletResponse 객체를 생성한다.
- 설정된 정보를 통해 어떠한 Servlet에 대한 요청인지 찾는다.
- 해당 Servlet에서 service 메서드를 호출한 뒤 브라우저의 요청 Method에 따라 doGet 혹은 doPost 등의 메서드를 호출한다.
- 호출한 메서드들의 결과를 그대로 반환하거나 동적 페이지를 생성한 뒤 HttpServletResponse 객체에 응답을 담아 Client(브라우저)에 반환한다.
- 응답이 완료되면 생성한 HttpServletRequest, HttpServletResponse 객체를 소멸한다.
SpringMVC에서 제공해 주고 있는 DispatcherServlet은 FrameworkServlet.java > HttpServlet.java > Servlet.java 를 상속받아 구현한 서블릿으로 Servlet Container에서 들어오는 모든 요청을 먼저 받아 중앙 집중식으로 처리해주는 프론트 컨트롤러이다.

Client(브라우저)에서 HTTP 요청이 들어오면 DispatcherServlet 객체가 요청을 분석한다.
DispatcherServlet 객체는 분석한 데이터를 토대로 Handler mapping을 통해 Controller를 찾아 요청을 전달해준다.
GET /api/hello →
HelloController의 hello() 함수GET /user/login →
UserController의 login() 함수GET /user/signup →
UserController의 signup() 함수POST /user/signup →
UserController의 registerUser() 함수
@RestController
public class HelloController {
@GetMapping("/api/hello")
public String hello() {
return "Hello World!";
}
}
@GetMapping("/api/hello") 이처럼 해당 애너테이션의 속성값으로 전달해주면 된다.Controller → DispathcerServlet
DispatcherServlet → Client