Spring Boot 는 Spring Framework 를 개발자 친화적?으로 편의성이 더 높아진 버전이다.
Spring Framework 에서 설정해야하는 여러가지 Boilerplate 적인 요소들을 Spring Boot가 알아서 해결해준다.
간단한 예로는
webMVC : DispatcherServlet, web jar, component scan 등...
Hbernate/JPA : data source, entity manager factory/session factory 등..
Spring Framework의 경우 개발자가 직접 bean 등록 등 만들어줘야 하지만 Spring Boot의 경우 autoconfigure.jar 가 만들어준다.
Spring Boot 는 개발자가 환경을 신경쓰지 않고, 오로지 비지니스에만 집중할 수 있도록 도와준다.
autoconfigure.jar는 위에서 말했듯이 종속성 등 Boilerplate 적인 요소들을 자동으로 만들어준다.
종속성이 추가되면 자동으로 매칭을해 bean 파일 등 설정 파일을 만들어준다.
이는 스프링을 실행할 때 log를 설정해서 볼 수 있다.
log를 설정해서 볼 때 match 와 did not match 를 볼 수 있는데, 종속성이 없으면 did not match 가 되면서 설정 파일이 만들어지지 않는다.
autoconfigure.jar 를 확인해보면 어떠한 autoConfiguration이 들어있는지 확인해볼 수 있다.
meta-inf 로 이동하면 spring.factories 파일을 볼 수 있는데, 이 파일에는 기본적 ( 스프링을 기반으로 하고 클래스 경로에 존재하는 종속성을 기반으로 하는 클래스 등.. ) 으로 모든 자동 구성 클래스가 포함되어 있습니다.
Spring Boot는 기본적으로 필요할 때마다 종속성에서 매치가 되는 것을 자동으로 configuration 합니다.
Spring Boot 프로젝트를 만들어 보면
@SpringBootApplication
@EnableJpaAuditing
public class TodoApplication {
public static void main(String[] args) {
SpringApplication.run(TodoApplication.class, args);
}
}
위와 비슷한 메인 코드를 볼 수 있다. 이 코드를 실행했을 때 발생하는 실행 과정을 확인해보자
Spring boot application execution will start from main() method
The main() method internally call SpringApplication.run() method
SpringApplication.run() method performs bootstraping for our spring boot application
Starts StopWatch to indetify ime taken to bootstrap the spring boot application
Prepares environment to run our spring boot application (dev, prod, local, qa, uat etc..)
Print banner ( Spring Boot logo prints on console )
start the IOC container ( ApplicationContext ) based on the classpath ( default, Web servlet/ Reactive)
Refresh context
Trigger Runners ( ApplicationRunner or CommandLineRunner )
Return ApplicationContext reference ( Spring IOC )
spring-starter : default context 실행
spring-starter-web : servlet context 실행
spring-starter-webflux : reactive context 실행
위와 같은 순서는 @SpringBootApplication 의 코드를 뜯어보면 알 수 있다. 다들 한 번씩 확인해보자.
알아볼 구조는 @SpringBootApplication이 가지고있는 세가지의 annotaion이다
Spring 기반의 application 에서 수행할 수 있는 세 가지 유형의 configuration이 있다.
java 기반의 configuration ( 구성 ) 을 수행하기 위해 @Configuration annotation을 사용한다. 기본적으로 우리는 java class 를 생성한 다음 configuration에서 해당 Java class에 @Configuration을 달았다. 그러면 해당 Java class 가 configuration class 가 되고 모든 spring 과련 항목을 정의할 수 있다.
그리고 우리는 bean을 정의하거나 이 class 내에서 bean을 configuration 할 수 있다.
그래서 우리는 java class 를 Spring java based configuration 으로 만들기 위해 추가 @Configuration 을 사용한다.
이 annotaion은 Spring boot application 에 대한 auto configuration class 를 활성화한다.
따라서 Spring boot 가 classpath 에서 spring-starter-web 종속성을 발견할 때마다 이 annotation 이 표시된다.
따라서 이 annotation은 Spring Boot application 이 실행될 때마다 auto configuration class를 활성화하는 역할을 한다.
내부의 모든 Spring 구성요소를 자동으로 스캔하는 것. 기본 패키지와 해당 하위 패키지
따라서 @ComponentScan을 추가하면 기본 패키지 내의 모든 Spring Component 를 스캔한다.
class 에 @Component annotation을 추가할 때마다 해당 class 는 Spring component 가 된다.
따라서 세 가지 주석을 사용하는 대신 @SpringBootApplication 이 단일 주석을 사용할 수 있다.
자바 버전을 지정하지않으면 기본적으로 1.8로 설정한다.
Spring-Boot-Starter Parent는 내 프로젝트에 필요한 많은 플러그인을 제공한다.
그 외에도 모든 종속성의 버전도 관리한다.
Spring boot starter에 대한 버전은 Spring boot starter parent에 의해 관리된다.
따라서 버전을 명시해주지 않아도 된다.