WebApplicationInitializer
🧩 정의
WebApplicationInitializer란?
WebApplicationInitializer는 Servlet 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의 자동 설정과는 성격이 다르다.
📌 정리
WebApplicationInitializer는web.xml없이 서블릿 환경을 초기화하는 인터페이스다.- Spring MVC의 시작점을 Java 코드로 구성할 때 사용한다.
DispatcherServlet등록과 컨텍스트 분리를 이해할 때 중요한 개념이다.
댓글남기기