Pink Spider/DispatcherServlet 초기화 과정

Created Wed, 26 Mar 2025 08:20:45 +0900 Modified Mon, 08 Dec 2025 08:41:47 +0900
892 Words 4 min

🚀 DispatcherServlet 초기화 과정

1. ServletContainer가 DispatcherServlet을 로딩

Spring Boot 앱을 실행하면, 내장 톰캣이 뜨고 아래 과정이 시작돼요:

  • Spring Boot가 자동으로 DispatcherServlet서블릿으로 등록함 (/ 매핑)
  • DispatcherServlet은 사실 HttpServlet을 상속받은 클래스
  • 이때 호출되는 메서드가 → init() → 그 안에서 initServletBean() 실행됨

2. WebApplicationContext 생성 및 초기화

  • DispatcherServlet은 자신의 Spring WebApplicationContext를 가지고 있음
  • 이 WebApplicationContext는 @Controller, @RestController, @Service, @Repository 등이 등록된 공간
GenericWebApplicationContext
AnnotationConfigWebApplicationContext
WebApplicationContext ← DispatcherServlet이 사용

DispatcherServlet은 이 context를 통해 빈을 찾고, 라우팅을 수행함


3. 핵심 컴포넌트 초기화

DispatcherServlet 내부에서 아래와 같은 핵심 컴포넌트들이 초기화됨:

컴포넌트 역할
HandlerMapping URL → 어떤 Controller로 보낼지 결정
HandlerAdapter Controller 실행을 위한 어댑터
HandlerExceptionResolver 예외 발생 시 처리할 Resolver
ViewResolver View 이름 → 실제 뷰 객체로 변환
LocaleResolver 요청의 언어/지역 설정 결정
ThemeResolver 테마 설정
MultipartResolver 파일 업로드 처리

이 컴포넌트들은 Spring MVC의 요청 흐름에 참여함


🧠 DispatcherServlet 내부 구조 (시퀀스 흐름)

클라이언트 요청이 DispatcherServlet에 들어오면 실행되는 핵심 메서드 흐름:

doDispatch() // DispatcherServlet의 핵심 로직
├── getHandler()               // HandlerMapping으로 컨트롤러 찾기
├── getHandlerAdapter()        // HandlerAdapter로 실행 방식 결정
├── applyPreHandle()           // 인터셉터 preHandle 실행
├── handlerAdapter.handle()    // 실제 컨트롤러 실행
├── applyPostHandle()          // 인터셉터 postHandle 실행
├── processDispatchResult()    // 뷰 리졸빙, 예외 처리 등
└── render()                   // ViewResolver 통해 뷰 렌더링

📦 구조 그림 요약 (텍스트 버전)

[Client 요청]
[DispatcherServlet]
    ├─ HandlerMapping      ← URL에 맞는 Controller 찾음
    ├─ HandlerAdapter      ← 실행 방법 결정
    ├─ Controller          ← 실제 로직 실행
    ├─ ViewResolver        ← 뷰 이름 → JSP, HTML 등으로 변환
    └─ View                ← 결과 렌더링
[응답 반환]

🔧 DispatcherServlet 설정 관련 팁

Spring Boot에서는 대부분 자동 설정되지만, 직접 설정도 가능해요:

@Bean
public DispatcherServlet dispatcherServlet() {
    DispatcherServlet ds = new DispatcherServlet();
    ds.setThrowExceptionIfNoHandlerFound(true); // 404 예외 발생
    return ds;
}

✅ 요약

항목 설명
DispatcherServlet 역할 Spring MVC의 중앙 컨트롤러 (Front Controller)
초기화 시점 톰캣이 시작되면서 자동 등록되고 init() 호출됨
내부 구조 HandlerMapping, HandlerAdapter, ViewResolver 등 MVC 핵심 컴포넌트 포함
핵심 메서드 doDispatch()가 요청 처리의 중심