스프링 DispatcherServlet이란?
- Server
- 2023. 6. 23.
DispatcherServlet이란?
DispatcherServlet은 Spring Framework에서 중앙 진입점 역할로, HTTP 요청을 처리하는 프레임워크의 핵심 요소입니다. MVC(Model-View-Controller) 디자인 패턴에서 개발자가 사용자의 http 요청을 처리하는 로직을 좀 더 쉽게 구현할 수 있도록 돕습니다.
사용자의 http 요청에 대한 서버의 응답 방식을 보면 DispatcherServlet의 역할을 쉽게 이해할 수 있습니다.
1. 클라이언트로부터 http 요청이 들어오면 DispatcherServlet은 HandlerMapping을 통해 해당 요청을 처리할 Controller를 찾습니다.
2. 해당 Controller를 실행하여 비즈니스 로직을 처리합니다.
3. 처리된 결과는 데이터와 뷰 이름으로 이루어진 ModelAndView 객체에 저장되어 DispatcherServlet에 반환됩니다.
4. DispatcherServlet은 ViewResolver를 이용하여 뷰 이름을 실제 뷰로 변환하고, 이 뷰에 모델 데이터를 전달하여 최종적인 결과를 생성합니다.
5. 클라이언트에 최종 응답을 반환합니다.
예시)
Spring MVC 프로젝트에는 보통 web.xml 파일에 DispatcherServlet이 정의되어 있습니다. 아래의 설정은 /WEB-INF/example-servlet.xml 파일에서 DispatcherServlet의 설정을 로드하고, 모든 요청을 DispatcherServlet로 보내도록 URL 패턴을 설정합니다.
<web-app>
<!-- ... -->
<servlet>
<servlet-name>example</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/example-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>example</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- ... -->
</web-app>
예를 들어, 사용자가 브라우저에서 http://yourapp.com/example URL로 접속했다고 가정해 보겠습니다.
1. HTTP 요청이 DispatcherServlet에게 전달됩니다.
2. DispatcherServlet은 HandlerMapping에게 Controller를 찾아달라고 요청합니다. 이때 HandlerMapping은 example-servlet.xml에 정의된 빈 설정을 확인하여 적절한 Controller를 찾습니다.
3. 찾은 Controller의 메서드가 실행됩니다. 예를 들어, ExampleController라는 Controller가 있고, 이 안에 showExample()라는 메서드가 있다면, 이 메서드가 실행됩니다.
4. showExample() 메서드는 실행 결과로 ModelAndView 객체를 반환합니다. 이 객체는 뷰 이름("exampleView")와 모델 객체({message: "Hello, Spring MVC"})를 포함하고 있습니다.
5. DispatcherServlet은 ViewResolver를 사용하여 뷰 이름("exampleView")를 실제 JSP 파일 경로("/WEB-INF/views/exampleView.jsp")로 변환합니다.
6. DispatcherServlet은 이 JSP 파일에 모델 객체({message: "Hello, Spring MVC"})를 전달하고, 이를 렌더링 하여 최종적인 HTML 문서를 생성합니다.
7. 이 HTML 문서가 응답으로 사용자의 브라우저로 전송됩니다.
정리하면, DispatcherServlet은 클라이언트의 HTTP 요청을 받아 적절한 Controller로 전달하고, 처리 결과를 바탕으로 응답을 생성하여 클라이언트에게 보내는 역할을 합니다.
'Server' 카테고리의 다른 글
스프링 프레임워크 빈(Bean)과 핸들러(Handler) 개념 이해하기 (0) | 2023.07.05 |
---|---|
자바 Impl 클래스 만드는 이유 (0) | 2023.06.24 |
CentOS 7 파이썬 virtualenv 가상환경 만드는 방법 (0) | 2023.06.03 |
자바 OutOfMemoryError 해결 하기 (heap memory) (0) | 2022.08.16 |
web.xml 파일 web-app에 에러 | 빨간줄 해결법 (0) | 2021.07.07 |