Spring Boot

2020. 6. 9. 18:55Java/Spring

Spring Boot란

 Spring Boot는 자주 사용하는 프로젝트 조합을 미리 만들어 Spring을 더욱 쉽고 간단하게 사용하기 위해 만들어진 Java Framework의 Project입니다. Spring이 지원하는 라이브러리, 하위 프로젝트들이 늘어나면서 무거워지고 초기 설정이 많아 프로젝트 초기 설정을 할 때 많은 어려움이 있었습니다. 이러한 어려움을 해결하기 위해 만들어진 것이 Spring Boot입니다. Spring Boot는 최소한의 초기 Spring 구성으로 가능한 빠르게 시작하고 실행할 수 있도록 설계되었습니다.

Spring Boot의 특징

CoC(Convention over Configuration)
 웹 어플리케이션을 개발하고자 할 때 일일이 관련 라이브러리를 찾아 추가할 필요 없이 spring-boot-starter-web을 추가하면 관련 라이브러리들을 받아옵니다.
설정 자동화
 @SpringApplication이라는 어노테이션을 이용해 설정을 자동화했습니다. @EnableAutoConfiguration + @SpringBootConfiguration + @ComponentScan으로 구성되어 있습니다.

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = {@Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
    @Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class)})
public @interface SpringBootApplication {
    /*** Exclude specific auto-configuration classes such that they will never be applied. * @return the classes to exclude */
    @AliasFor(annotation = EnableAutoConfiguration.class) Class<?>[] exclude() default {};
}

내장 서버
 Tomcat 내장 서버를 포함하고 있어서 SpringApplication.run(App.class); 명령어로 서버를 시작할 수 있습니다. 기존에 톰캣을 설치하여 이클립스와 연동하는 작업이 없어졌습니다.

Spring Boot의 자동 설정

 SpringApplication에서는 Spring Framework의 팩토리 로딩 매커니즘을 사용해서 단계별 필요한 객체들을 생성하고 Order를 통해서 각 객체간 순서를 조정합니다. 클래스 로더 내에서 여러 jar 파일들의 클래스 패스상에 있는 META-INF/spring.factories에 파일들을 로딩 후 지정된 타입에 맞는 팩토리 클래스를 획득합니다.

SpringFactoriesLoader.loadFactoryNames(Class<?> factoryClass, ClassLoader classLoader);

 위와 같이 선언된 메소드가 실행되면 아래와 같은 spring.factories 파일에 로딩해 지정된 타입에 맞는 팩토리 클래스를 획득합니다.

# PropertySource Loaders 
org.springframework.boot.env.PropertySourceLoader
org.springframework.boot.env.PropertiesPropertySourceLoader,\ org.springframework.boot.env.YamlPropertySourceLoader

# Run Listeners 
org.springframework.boot.SpringApplicationRunListener
org.springframework.boot.context.event.EventPublishingRunListener

# Application Context Initializers 
org.springframework.context.ApplicationContextInitializer org.springframework.boot.context.ConfigurationWarningsApplicationContextInitializer
org.springframework.boot.context.ContextIdApplicationContextInitializer
org.springframework.boot.context.config.DelegatingApplicationContextInitializer
org.springframework.boot.context.embedded.ServerPortInfoApplicationContextInitializer
728x90

'Java > Spring' 카테고리의 다른 글

Spring boot 와 Spring Legacy 비교  (0) 2020.09.10
Spring Batch  (0) 2020.07.02
Transaction Template  (1) 2020.05.07
Spring Singleton  (0) 2020.05.01
@ExceptionHandler  (0) 2020.04.26