본문 바로가기
Spring/인프런 토비의 Spring Boot

섹션 7-1 [조건부 자동구성] 스타터와 Jetty 서버 구성 추가

by include_hoany 2024. 6. 27.

스타터와 Jetty 서버 구성 추가

plugins {  
    id 'java'  
    id 'org.springframework.boot' version '2.7.6'  
    id 'io.spring.dependency-management' version '1.1.5'  
}  
  
group = 'com.tobyspring'  
version = '0.0.1-SNAPSHOT'  
  
java {  
    sourceCompatibility = '11'  
}  
  
repositories {  
    mavenCentral()  
}  
  
dependencies {  
    implementation 'org.springframework.boot:spring-boot-starter-web'  
    // Spring boot starter jetty 추가
    implementation 'org.springframework.boot:spring-boot-starter-jetty'  
    testImplementation 'org.springframework.boot:spring-boot-starter-test'  
    testRuntimeOnly 'org.junit.platform:junit-platform-launcher'  
}  
  
tasks.named('test') {  
    useJUnitPlatform()  
}

Spring Starter 문서를 참고하여 Jetty Servlet Container를 사용할 수 있도록 Gradle에 의존성을 추가해 줍니다.

 

@MyAutoConfiguration  
public class JettyWebServerConfig {  

	// jetty 구성정보 등록
	// JettyServletContainer Bean Name 등
    @Bean("jettyWebServerFactory")  
    public ServletWebServerFactory servletWebServerFactory() {  
        return new JettyServletWebServerFactory();  
    }  
  
}

의존성을 추가한 이후 Jetty Servlet Container 구성정보를 등록해 줍니다.

 

@MyAutoConfiguration  
public class TomcatWebServerConfig {  

	// TomcatServletContainer Bean Name 등록
    @Bean("tomcatWebServerFactory")  
    public ServletWebServerFactory servletWebServerFactory() {  
        return new TomcatServletWebServerFactory();  
    }  
  
}

```
기존에 사용했던 Tomcat Servlet Container 구성정보수정사항이 있는데 @Bean 어노테이션에 해당 Bean에 이름을 지정해주도록 합니다.

 

com.tobyspring.config.MyAutoConfiguration.imports
com.tobyspring.config.autoconfig.TomcatWebServerConfig  
com.tobyspring.config.autoconfig.JettyWebServerConfig  
com.tobyspring.config.autoconfig.DispatcherServletConfig

Auto Configuration으로 로딩되는 매커니즘을 사용하여 Configuration이 등록되게 만들려면 imports파일에 해당 클래스를 등록해 줍니다.

 

Unable to start ServletWebServerApplicationContext due to multiple ServletWebServerFactory beans : tomcatWebServerFactory,jettyWebServerFactory

TomcatServletContainer, JettyServletContainer를 모두 자동구성정보에 등록하여 서버를 시작하면 위와같은 오류 메세지를 확인할 수 있는데 Spring에서는 ServletWebServerApplicationContext가 하나여야하는데 두개가 존재하므로 어떤 WebServerFactory를 사용할지 모르기에 오류가 발생합니다.

둘중 어떤 구성정보를 사용하여 Bean을 생성할지 조건부 자동구성에 대한건 다음 섹션에서 알아보도록 하겠습니다.