🧩 정의

WebApplicationInitializer란?

WebApplicationInitializerServlet 3.0 이후 web.xml 없이 서블릿 컨텍스트 초기화를 Java 코드로 처리할 수 있게 해주는 인터페이스이다.

  • onStartup()에서 서블릿과 컨텍스트를 등록한다.
  • Spring MVC의 시작점 역할을 한다.
  • XML 설정을 줄이고 Java 설정 중심으로 구성할 수 있다.

⚙️ Gradle 설정

dependencies {  
    implementation 'org.springframework:spring-web:5.3.22'  
    implementation 'javax.servlet:javax.servlet-api:4.0.1'
}

🛠 사용 예시

WebApplicationInitializer 구현 클래스 선언

  • onStartup() 메서드를 오버라이드하여 서블릿을 등록한다.
public class ApplicationInitializer implements WebApplicationInitializer {  
    @Override  
    public void onStartup(ServletContext servletContext) throws ServletException {  
        AnnotationConfigWebApplicationContext apiContext = new AnnotationConfigWebApplicationContext();  
        apiContext.register(APIConfiguration.class);  

        DispatcherServlet apiDispatcherServlet = new DispatcherServlet(apiContext);  

        ServletRegistration.Dynamic apiDispatcher = servletContext.addServlet("apiDispatcher", apiDispatcherServlet);  
        apiDispatcher.addMapping("/*");  
    }  
}

루트 컨텍스트 분리 예시

@Override
public void onStartup(ServletContext servletContext) throws ServletException {
    AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext();
    rootContext.register(APIConfiguration.class);

    servletContext.addListener(new ContextLoaderListener(rootContext));

    AnnotationConfigWebApplicationContext dispatcherContext = new AnnotationConfigWebApplicationContext();
    dispatcherContext.register(WebConfigration.class);

    ServletRegistration.Dynamic dispatcher =
            servletContext.addServlet("web", new DispatcherServlet(dispatcherContext));
    dispatcher.addMapping("/");
}

✅ 장점과 단점

✅ 장점

  • XML 설정 없이 Java 코드만으로 서블릿 초기화 가능
  • 컨텍스트 분리와 서블릿 등록을 코드로 명확히 표현할 수 있음
  • Spring MVC 구조를 직접 이해하는 데 도움이 됨

❌ 단점

  • 기존 XML 기반 설정을 사용하는 프로젝트에서는 전환 비용이 발생
  • Servlet 3.0 이상에서만 사용 가능
  • 초기 설정 코드가 길어질 수 있음

⚠️ 주의사항

  • DispatcherServlet 등록은 직접 해줘야 한다.
  • web.xml을 완전히 대체할 수 있지만, 프로젝트 구조가 복잡하면 설정이 분산될 수 있다.
  • WebApplicationInitializer는 Spring Boot의 자동 설정과는 성격이 다르다.

📌 정리

  • WebApplicationInitializerweb.xml 없이 서블릿 환경을 초기화하는 인터페이스다.
  • Spring MVC의 시작점을 Java 코드로 구성할 때 사용한다.
  • DispatcherServlet 등록과 컨텍스트 분리를 이해할 때 중요한 개념이다.

연결문서

태그:

카테고리:

업데이트:

댓글남기기