
Spring MVC로 개발을 항상 해왔지만 “뭐냐?” 라고 물어보면 정확하게 이렇다. 라고 답변하는 것이 어려웠다. 강의를 들으며 다시 한 번 복습하는 겸 배웠던 내용을 글로 정리해보고자 한다.
MVC (Model-View-Controller) 패턴은 소프트웨어 개발에서 자주 사용되는 설계 패턴으로 애플리케이션의 구조를 모델, 뷰, 컨트롤러 세 가지 영역으로 분리하여 코드의 유지보수성과 확장성을 높인다.

사용자가 브라우저에서 요청을 보냄
→ Controller가 요청을 받아 처리
→ 필요한 Model 데이터를 생성하거나 불러옴
→ Controller가 View에 데이터를 전달
→ View가 사용자에게 결과를 표시
📄 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 공식 문서에서 Spring MVC를 이렇게 소개하고 있다.

그러면 일반 자바 프로젝트에서 쓰는 서블릿은 뭐였더라..?
서블릿은 Java 기반 웹 애플리케이션에서 클라이언트의 요청을 처리하고 응답을 생성하는 서버 측 프로그램이다.
public class SimpleServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 응답의 콘텐츠 타입 설정
response.setContentType("text/html");
PrintWriter out = response.getWriter();
// HTML 응답 작성
out.println("<html>");
out.println("<head><title>Simple Servlet</title></head>");
out.println("<body>");
out.println("<h1>일반 서블릿이에요ㅎㅎ</h1>");
out.println("</body>");
out.println("</html>");
}
}
DispatcherServlet은 Spring MVC 프레임워크의 핵심으로써 모든 웹 요청의 진입점이다 !! Spring에서 MVC 패턴을 구현할 때 얘가 참 중요한 역할을 한다.
Spring이 실행될 때, 컨트롤러들은 스프링 컨텍스트에 등록되어있다. ⭐ DispatcherServlet은 요청이 들어오면 그 요청에 맞는 컨트롤러를 스프링 컨텍스트에서 찾아서 요청을 전달하는 역할을 한다.
즉, DispatcherServlet은 중앙 관리자고, 컨트롤러들은 그 지시에 따라 요청을 처리하는 일꾼이라고 볼 수 있다.
Spring Boot에서 프로젝트를 생성하고 컨트롤러를 작성하면, DispatcherServlet이 자동으로 모든 요청을 받아 적절한 컨트롤러로 전달한다.
@RestController
public class HelloController {
@GetMapping("/hello")
public String sayHello() {
return "안녕 나는 Spring MVC란다";
}
}
위의 코드만 작성해도 DispatcherServlet이 자동으로 이 요청을 받아 sayHello() 메서드로 전달하고 응답을 생성한다.