Spring 개념정리

[Spring] 스프링 MVC 프레임워크 동작 방식

개발자 문문 2025. 7. 2. 22:22

안녕하세요 개발자 문문입니다.

오늘은 스프링 MVC 동작 방식에 대해 공부하겠습니다.

 

  • 스프링 MVC 핵심 구성 요소

- 스프링 MVC의 웹 요청 처리 과정을 위 그림을 토대로 설명하겠습니다.

- (1,2번) 웹 브라우저에서 요청이 들어오면 DispatcherServletHandlerMapping 에게 컨트롤러 객체를 검색 요청을 합니다. HandlerMapping은 컨트롤러 빈 객체를 DispatcherServlet 에게 전달합니다.

- (3 번) DispatcherServlet은 컨트롤러 객체를 HandlerAdapter에게 전달합니다.

- (4,5,6번) HandlerAdapter컨트롤러의 알맞은 메서드를 호출해서 요청을 처리하고 그 결과를 DispatcherServlet에 리턴합니다.

- (7번) DispatcherServlet은 HandlerAdapter로부터 받은 ModelAndViewViewResolver에게 전달하여 결과를 보여줄 뷰를 찾습니다. ViewResolverModelAndView에 있는 뷰 이름으로 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자동 활성화)