안녕하세요 개발자 문문입니다.
오늘은 스프링 MVC 동작 방식에 대해 공부하겠습니다.
- 스프링 MVC 핵심 구성 요소

- 스프링 MVC의 웹 요청 처리 과정을 위 그림을 토대로 설명하겠습니다.
- (1,2번) 웹 브라우저에서 요청이 들어오면 DispatcherServlet은 HandlerMapping 에게 컨트롤러 객체를 검색 요청을 합니다. HandlerMapping은 컨트롤러 빈 객체를 DispatcherServlet 에게 전달합니다.
- (3 번) DispatcherServlet은 컨트롤러 객체를 HandlerAdapter에게 전달합니다.
- (4,5,6번) HandlerAdapter는 컨트롤러의 알맞은 메서드를 호출해서 요청을 처리하고 그 결과를 DispatcherServlet에 리턴합니다.
- (7번) DispatcherServlet은 HandlerAdapter로부터 받은 ModelAndView를 ViewResolver에게 전달하여 결과를 보여줄 뷰를 찾습니다. ViewResolver는 ModelAndView에 있는 뷰 이름으로 View 객체를 찾거나 생성합니다.
- (8,9번) DispatcherServlet은 ViewResolver로 부터 받은 View 객체에게 응답 결과 생성을 요청합니다. View 객체가 JSP를 실행함으로써 응답 결과를 생성합니다.
- DispatcherServlet과 스프링 컨테이너
- DispatcherServlet은 전달받은 설정 파일을 이용해서 스프링 컨테이너를 생성합니다.
<servlet>
<servlet-name>dispatcher</servlet-name>
...
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>
config.MvcConfig
config.ControllerConfig
</param-value>
</init-param>
...
@Configuration
@EnableWebMvc
public class MvcConfig implements WebMvcConfigurer {
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer)
{
configurer.enable();
}
@Override
public void configureViewResolvers(ViewResolverRegistry registry)
{
registry.jsp("/WEB-INF/view/",".jsp");
}
}
@Configuration
public class ControllerConfig {
@Bean
public HelloController helloController()
{
return new HelloController();
}
}
- 이처럼 설정 파일에는 HandlerMapping, HandlerAdapter, 컨트롤러, ViewResolver의 정의가 포함되어 있습니다.
- @EnableWebMvc : 어노테이션 기반의 SpringMvc를 구성할때 필요한 Bean설정들을 자동으로 해주는 어노테이션
- WebMvcConfigurer : Spring MVC 설정을 확장(커스터마이징) 하기 위한 인터페이스
저는 거의 Spring Boot로 개발을 했었는데, Spring Boot에서는 spring-boot-starter-web 의존성을 통해 WebMvcAutoConfiguration라는 자동 설정 클래스를 포함하기 때문에 @EnableWebMvc 사용하지 않아도 괜찮았던 것이었습니다.
@SpringBootApplication = @Configuration + @ComponentScan + @EnableAutoConfiguration(WebMvcAutoConfiguration자동 활성화)
'Spring 개념정리' 카테고리의 다른 글
| [Spring] MVC : 메시지, 커맨드 객체 검증 (0) | 2025.07.07 |
|---|---|
| [Spring] MVC : 요청 매핑, 커맨드 객체, 리다이렉트, 모델 (2) | 2025.07.06 |
| [Spring] AOP(Aspect Oriented Programming) (0) | 2025.07.01 |
| [Spring] 빈 라이프사이클과 범위 (2) | 2025.06.30 |
| [Spring] 컴포넌트 스캔 (1) | 2025.06.30 |