springboot의 핵심은 아래와 같다.
build.gradle 파일 내용에 따라,
클래스패스, 어노테이션, 기타 자바 구성 클래스를 보고 적합한 앱으로 맞춤하는 자동구성
이를 이해하고나면, spring boot 프로젝트를 구동시키면 어떤 과정으로 서버가 돌아가는 걸까? 궁금해진다.
package com.example.projectmybatis;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class ProjectMybatisApplication {
public static void main(String[] args) {
SpringApplication.run(ProjectMybatisApplication.class, args);
}
}
(1) @SpringBootApplication
(2) main
메서드에서 SpringApplication
로 전체 앱을 실행한다.
(3) run
메서드는 ProjectMybatisApplication
싱글턴클래스와, 어플리케이션 파라미터(args
)를 파라미터로 받는다.
이 어노테이션의 정체는 @Configuration
, @EnableAutoConfiguration
, @ComponentScan
이 합쳐진 것이다. 이를 통해 전체 애플리케이션 컴포넌트(@RestController
, @Service
, @Repository
, @Mapper
, ...)를 식별한다.
따라서 순서를 보면
(1) classPath를 조사해서 spring-boot-stater-web
스타터가 선ㄴ언된 것을 인지한 스프링부트는 웹 애플리케이션을 구성한다.
(2) (@RestController
, @Service
, @Repository
, @Mapper
, ...)를 스캔한다.
(3) spring-boot-stater-web
의존체 중 하나인 톰캣으로 앱을 띄운다.
@SpringBootApplication
를 구성하는 것 중에서, @EnableAutoConfiguration
를 확인해보자.
이 어노테이션은 자동구성을 거는 어노테이션이다. 즉, 앱에서 필요한 빈을 유추해서 구성하는 클래스이다. 주동 구성 클래스는 클래스패스 및 앱에서 정의한 빈에 따라 적용여부가 결정된다.
만약에 어떤 자동구성을 끄고 싶으면 해당 어노테이션에 exclude 파라미터 속성값에 클래스를 명시한다.
@EnableAutoConfiguration(exclude = [ActiveMQAutoConfiguration.class])
하지만 위에서도 설명했든, 해당 어노테이션은 @SpringBootApplication
에 포함되므로 아래와 같이 표현하는 것도 가능하다.
@SpringBootApplication(exclude = {ActiveMQAutoConfiguration.class, DataSourceAutoConfiguration.class})