본문 바로가기
Spring|Spring-boot

[Spring-boot] 자동설정

by oncerun 2020. 6. 26.
반응형

스프링 부트는 스프링 프레임워크에서 설정해야 하는 일정 부분에 대해 자동으로 설정해줍니다.

이러한 기능은 Application의 main부분에 @SpringBootApplication이라는 어노테이션을 붙여서 사용할 수 있습니다.

 

 

@SpringBootApplication이라는 어노테이션은 spring framework에서 사용했던 다음과 같은 어노테이션 기능을 합니다.

 

@ComponentScan, @EnableAutoConfiguration

 

 

@ComponentScan은 스프링 프레임워크에서 @Service, @Repository, @Controller, 등등 스프링 빈을 나타내는 아노테 이션을 @ComponentScan이 붙은 클래스가 위치해있는 현재 패키지를 기준으로 하위 패키지까지 찾아내서 스프링 빈으로 등록하는 기능을 가지고있습니다. 그렇기에 우리는 @SpringBootApplication을 붙인 클래스는 디폴트 패키지에 존재해야 현재 위치나 하위 패키지를 찾아 스프링 빈으로 등록할 수 있습니다. 상위 패키지에 있는 클래스들의 어노테이션은 확인하지 않는다는 이야기입니다.

 

@EnableAutoConfiguration은 스프링 부트에서 스프링 프레임워크에서 많이 쓰이는 스프링 빈들을 자동으로 컨테이너에 등록하는 역할을 합니다.  

@EnableAutoConfiguration이 등록하는 빈은 autoconfigure.jar파일에 포함되어있습니다.

 

스프링 부트 내장 웹서버

 

스프링 부트 프로젝트를 생성할 시 스프링 부트에서는 내장 서블릿 컨테이너인 톰캣이 자동적으로 설정됩니다.

스프링 부트에서는 ServletWebServer \FactoryAutoconfiguration 클래스에서 자동적으로 Tomcat, jetty 같은 내장 웹서버에 대한 설절을 자동적으로 처리하며 스프링 부트 사용자가 웹 서버 관련 설정을 하지 않아도 프로젝트 안에 포함되게 합니다.

 

@Configuration
@AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE)
@ConditionalOnClass(ServletRequest.class)
@ConditionalOnWebApplication(type = Type.SERVLET)
@EnableConfigurationProperties(ServerProperties.class)
@Import({ ServletWebServerFactoryAutoConfiguration.BeanPostProcessorsRegistrar.class,
        ServletWebServerFactoryConfiguration.EmbeddedTomcat.class,
        ServletWebServerFactoryConfiguration.EmbeddedJetty.class,
        ServletWebServerFactoryConfiguration.EmbeddedUndertow.class })
public class ServletWebServerFactoryAutoConfiguration {

    @Bean
    public ServletWebServerFactoryCustomizer servletWebServerFactoryCustomizer(
            ServerProperties serverProperties) {
        return new ServletWebServerFactoryCustomizer(serverProperties);
    }
    

    @Bean
    @ConditionalOnClass(name = "org.apache.catalina.startup.Tomcat")
    public TomcatServletWebServerFactoryCustomizer tomcatServletWebServerFactoryCustomizer(
            ServerProperties serverProperties) {
        return new TomcatServletWebServerFactoryCustomizer(serverProperties);
    }
    
 }

위 코드를 보면 자동적으로 톰캣을 설정하는것을 알 수 있습니다.

 

기존 스프링에서 설정했던 web.xml의 역할은 인코딩, 서블릿들과, 필터에 공유되는 spring container설정, 생성 DispatcherServlet 설정, 서블릿 매핑 설정을 해주었는데요

 

이러한 설정들을 Springboot에서는 자동적으로 처리하고있습니다.

만약 내장 톰캣이 아닌 다른 내장 웹서버를 이용하기 위해서는 pom.xml의 설정값을 변경해주어야 합니다.

이제 내장 서버를 제외시켰으므로 application.properties파일에 설정값을 입력하여 설정합니다.

#application.properties

server.port=7070
server.compression.enabled=true

7070 포트로 서버를 실행합니다. 또한 compression.enabled=true는 css, html 압축해서 전송할 때 이득이 되는 포맷들을 자동 압축해 보내는 것으로 설정됩니다.

반응형

댓글