감 잃지말고 개발하기

[Spring][STS][Spring MVC] #2. 스프링 MVC의 기본 구조 본문

코드로 배우는 스프링 웹 프로젝트(개정판)/Part 2 스프링 MVC 설정

[Spring][STS][Spring MVC] #2. 스프링 MVC의 기본 구조

persii 2023. 8. 17. 18:04

목표

 스프링 MVC 프로젝트의 내부 구조를 이해할 수 있다.

 

 

스프링 MVC과 Servlet

아래 그림처럼 스프링 MVC는 개발자 코드 영역과 Servlet/JSP 영역 사이에 존재하여 중간자 역할을 수행한다.

 

스프링 MVC 형태

 

즉, Spring MVC를 이용하게 되면 Spring MVC가 내부적으로 Servlet/JSP를 처리하기 때문에 

개발자들은 직접적으로 Servlet/JSP API에 신경쓰지 않고 개발이 가능해진다.

 

다시 말해, 

Servlet을 이용한 개발자들은 HttpServletRequest / HttpServletResponse 등과 같은 Servlet API를 이용해 요청 및 응답을 처리하지만, 

Spring MVC은 내부에서 이러한 처리를 대신 수행하고, 개발자들은 Spring MVC의 API를 이용해서 코드를 작성한다.

 

 

스프링 MVC의 기본 구조

스프링 MVC의 기본 구조는 아래 그림과 같이 표현할 수 있다.

 

스프링 MVC 기본 구조

 

① 사용자의 Request 처리

사용자의 요청은 Front-ControllerDispatcherServlet을 통해 처리된다.

생성된 프로젝트의 web.xml에서 '/'로 들어오는 모든 Request를 DispatcherServlet이 받도록 처리해 두었다.

 

web.xml 파일

 

② ③ 해당 컨트롤러 Find & Activate

HandlerMappingRequest의 처리를 담당하는 컨트롤러를 찾는다.

HandlerMapping 인터페이스를 구현한 여러 객체 중 RequestMappingHandlerMapping의 경우, 개발자가 @RequestMapping 어노테이션이 적용된 것을 기준으로 판단한다.

HandlerMapping을 통해 적절한 컨트롤러가 찾아졌다면 HandlerAdapter를 이용해 해당 컨트롤러를 동작시킨다.

 

④ Controller

개발자가 직접 작성하는 클래스로 실제 Request를 처리하는 로직이 작성된다.

이때, View에 전달해야 하는 데이터는 주로 Model이라는 객체에 담아 전달된다.

Controller는 다양한 타입의 결과를 리턴하는데, 이에 대한 처리는 ViewResolver를 이용한다.

 

⑤ View 페이지 설정

ViewResolverController가 리턴한 결과를 어떤 뷰를 통해 처리하는 것이 좋을지 해석한다.

가장 흔하게 사용하는 설정은 servlet-context.xml에 정의된 InternalResourceViewResolver 객체이다.

 

ViewResolver 설정

 

⑥ ⑦ 응답

View는 실제로 응답 보내야 하는 데이터를 JSP 등을 이용하여 생성하는 역할을 한다.

만들어진 응답은 DispatcherServlet을 통해 전송된다.

 

 

정리

1. 스프링 MVC : 개발자와 Servlet 사이의 중간자 역할

Spring MVC를 사용하면 Spring 내부적으로 Servlet/JSP를 처리하기 때문에 개발자들은 Servlet/JSP API에 신경쓰지 않고 편리하게 개발할 수 있다.