Spring MVC 프레임워크가 어떻게 동작하는지 이해하는 것은 개발자에게 필수적이다. 클라이언트가 서버에게 URL을 통해 요청할 때, 스프링 프레임워크가 어떻게 처리하는지 자세히 알아보자.
모든 Request를 처리하는 중심 컨트롤러 역할을 한다. 서블릿 컨테이너에서 HTTP 프로토콜을 통해 들어오는 모든 Request를 가장 앞단에서 처리하며, 스프링 MVC의 핵심적인 역할을 수행한다.
기존의 웹 애플리케이션에서는 web.xml
에 서블릿을 일일이 등록해야 했지만, Dispatcher Servlet이 모든 Request를 핸들링하면서 작업이 편리해졌다.
클라이언트의 Request URL을 어떤 Controller가 처리해야 하는지 찾아서 Dispatcher Servlet에게 전달한다. Controller의 메서드에서 사용하는 @RequestMapping
어노테이션을 통해 URL과 매핑되며, Handler Mapping이 이를 찾아주는 역할을 한다.
실질적인 요청을 처리하는 곳이다. Dispatcher Servlet이 프론트 컨트롤러라면, Controller는 백엔드 컨트롤러로 볼 수 있다. 데이터 처리를 담당하며, Model을 완성해 Dispatcher Servlet에 전달한다.
@Controller
public class UserController {
@RequestMapping("/user")
public String getUser(Model model) {
// 모델에 데이터를 추가
model.addAttribute("name", "John Doe");
// view 이름 반환
return "userView";
}
}
Controller에서 반환된 처리 결과를 보여줄 View를 결정하는 역할을 한다. 다양한 종류의 View Resolver가 존재하며, 상황에 맞게 활용할 수 있다.
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Bean
public InternalResourceViewResolver viewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/views/");
resolver.setSuffix(".jsp");
return resolver;
}
}
Spring MVC는 요청이 들어오면 Dispatcher Servlet을 통해 모든 처리를 중앙집중식으로 관리한다. 이 과정에서 Handler Mapping이 Controller를 연결해주고, Controller는 Model 데이터를 처리해 View Resolver로 최종 화면을 결정한다. 이러한 구조 덕분에 스프링 MVC는 역할 분리가 명확해지고 유지보수가 용이해지며, 확장성 또한 뛰어나다.