Spring Boot ) 외장 톰캣 Spring 로고 로그가 안 뜰 때
Spring Boot는 기본적으로 Tomcat을 내장 서버로 제공합니다.
로컬에서 개발 완료 후, VM 서버의 외장 톰캣에 배포할 때 스프링 로고가 뜨지 않는 이슈가 발생했습니다.
🔨 해결방법은 간단합니다.
- ServletInitializer 클래스 추가
public class ServletInitializer extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(MainApplication이름.class);
}
}
Spring Boot에서 ServletInitializer는 특정 조건에서만 필요하며, 모든 Spring Boot 애플리케이션에 필수적인 것은 아닙니다.
1. ServletInitializer의 역할
ServletInitializer는 Spring Boot 애플리케이션이 서블릿 컨테이너(WAR 배포 파일로 실행되는 환경)에서 작동하도록 설정하는 데 사용됩니다. 기본적으로 이 클래스는 SpringBootServletInitializer를 확장하여 애플리케이션의 초기화를 담당합니다.
• configure() 메서드는 서블릿 컨테이너에서 애플리케이션의 진입점을 설정합니다.
• 이 클래스는 WAR 파일 배포 시 필요합니다.
2. ServletInitializer가 필요한 경우
- WAR 파일로 배포하려는 경우:
- Spring Boot 애플리케이션을 내장 톰캣이 아닌 외부 톰캣, WebLogic, WildFly 같은 서블릿 컨테이너에 배포하려면 ServletInitializer가 필요합니다.
- 이 경우 spring-boot-starter-tomcat의 내장 톰캣 기능이 비활성화되며, 서블릿 컨테이너의 톰캣이 대신 사용됩니다.
- JAR 대신 WAR로 빌드:
- pom.xml 또는 build.gradle에서 패키징을 WAR로 설정한 경우, ServletInitializer가 필요합니다.
3. ServletInitializer가 필요 없는 경우
- Spring Boot 기본 설정(JAR 파일로 실행):
- 대부분의 Spring Boot 애플리케이션은 독립 실행형으로, 내장 톰캣을 사용해 실행됩니다. 이 경우 ServletInitializer는 필요하지 않습니다.
- 기본적으로 @SpringBootApplication 애노테이션이 있는 클래스에서 SpringApplication.run() 메서드로 초기화합니다:
4. ServletInitializer 없이 WAR 배포가 가능한가?
• ServletInitializer 없이 WAR 배포는 불가능합니다.
• WAR 배포 시 Spring Boot는 서블릿 컨테이너와 통합될 초기화 로직이 필요하며, 이를 ServletInitializer에서 제공합니다.
5. 요약
필수적인 경우 | 필요 없는 경우 |
WAR 파일 배포 시 | 기본적으로 JAR 파일로 실행하는 독립 실행형 Spring Boot 애플리케이션 |
외부 서블릿 컨테이너(예: Tomcat, WebLogic, WildFly) 사용 시 |
결론: JAR 파일로 독립 실행하려면 ServletInitializer는 필요 없습니다.
그러나 WAR로 외부 컨테이너에 배포할 경우에는 반드시 구현해야 합니다.
- 스프링 로고 출력 완료 ✌🏻