728x90
✅ 핵심 한 줄 요약
Spring은 내부적으로 DispatcherServlet이라는 서블릿을 사용해서 모든 웹 요청을 처리합니다.
🔷 구조적으로 어떻게 되는가?
Spring MVC의 요청 흐름은 다음과 같아요:
브라우저 요청
↓ (HTTP 요청)
Tomcat (서블릿 컨테이너)
↓
DispatcherServlet (Spring이 만든 서블릿)
↓
Controller (@Controller or @RestController)
↓
Service, Repository 등 비즈니스 로직 처리
↓
DispatcherServlet
↓
응답 반환
🧩 DispatcherServlet이 뭐야?
🔍 DispatcherServlet = Spring이 만든 서블릿
- HttpServlet을 상속받은 일반적인 서블릿
- web.xml이나 ServletInitializer에서 /* 모든 요청을 가로채도록 등록됨
- 그 후 내부에서 어떤 Controller가 이 요청을 처리할지 판단하고 실행함
즉, 서블릿인데 우리가 직접 만들 필요 없이 Spring이 대신 관리해주는 고급 서블릿이에요.
Spring 의 경우 web.xml 에 이렇게 등록했어요 :
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
🔧 예: DispatcherServlet 등록 (Spring Boot가 자동으로 해줌)
public class MyWebAppInitializer implements WebApplicationInitializer {
@Override
public void onStartup(ServletContext container) {
AnnotationConfigWebApplicationContext context =
new AnnotationConfigWebApplicationContext();
context.setConfigLocation("com.example.config");
ServletRegistration.Dynamic dispatcher =
container.addServlet("dispatcher", new DispatcherServlet(context));
dispatcher.setLoadOnStartup(1);
dispatcher.addMapping("/");
}
}
※ 이 설정은 이제 Spring Boot에서는 자동으로 해줍니다.
🔄 DispatcherServlet은 어떤 역할을 할까?
DispatcherServlet은 Spring MVC의 "프론트 컨트롤러" 역할을 합니다.
모든 요청을 가로채서 아래와 같은 흐름으로 동작합니다:
- 요청 수신 (예: /hello)
- 적절한 @Controller 찾기 (@RequestMapping("/hello"))
- 서비스/DB 호출 등 로직 실행
- 결과를 View 또는 JSON으로 반환
- 응답 반환
즉, DispatcherServlet은 직접 doGet(), doPost() 등을 구현하고
그 안에서 Spring Bean(Controller 등)을 찾아 실행합니다.
⚙️ 요청 처리 순서 (좀 더 자세히)
- 사용자가 /hello에 접속
- Tomcat은 이 요청을 서블릿에게 전달
- DispatcherServlet이 요청을 가로챔
- 등록된 HandlerMapping을 통해 어떤 @Controller가 처리할지 찾음
- 그 @Controller의 메서드 실행 (@RequestMapping, @GetMapping 등)
- 리턴값(View 또는 JSON 등)을 ViewResolver나 HttpMessageConverter를 통해 변환
- 응답 객체에 담아 사용자에게 전송
💡 핵심 클래스 요약
클래스/인터페이스설명
| DispatcherServlet | 모든 요청을 처리하는 Spring의 핵심 서블릿 |
| HandlerMapping | URL에 맞는 컨트롤러 찾기 |
| HandlerAdapter | 컨트롤러를 실제로 호출 |
| ViewResolver | JSP 등 뷰 이름을 실제 경로로 변환 |
| HttpMessageConverter | 객체를 JSON/XML로 바꿔주는 역할 (REST 응답용) |
📦 DispatcherServlet도 결국 HttpServlet이다!
public class DispatcherServlet extends FrameworkServlet {
// FrameworkServlet은 HttpServlet을 상속
}
👉 즉, DispatcherServlet도 결국 HttpServlet이기 때문에
Tomcat이 서블릿을 실행하는 구조 그대로 동작합니다.
✅ 요약 정리
질문답변
| Spring은 서블릿을 쓰나요? | ✅ 내부적으로 DispatcherServlet이라는 서블릿을 씁니다. |
| 누가 실행하나요? | Tomcat 같은 서블릿 컨테이너가 실행합니다. |
| 우리는 왜 몰랐을까요? | Spring이 복잡한 서블릿 설정을 자동으로 해주기 때문입니다. |
| DispatcherServlet의 역할은? | 요청을 받아서 어떤 Controller가 처리할지 결정하고 응답까지 처리 |
728x90
반응형
'Self Study > Others' 카테고리의 다른 글
| 스레드 풀 (Thread Pool) 왜 지정해야 할까? (4) | 2025.07.12 |
|---|---|
| 스레드(Thread) (3) | 2025.07.10 |
| WEB 과 WAS (0) | 2025.07.07 |
| Tomcat, 서블릿 컨테이너, 그리고 서블릿 (0) | 2025.07.03 |
| [Server] 서버 기본 LinuxOS 에서 timezone 설정하기 (0) | 2024.08.19 |