- ~Application 내에 main 메소드 내부에 있는 단 한 줄의 코드인 SpringApplication.run()을 보았을 거다.
- 이 메소드의 내부 로직은 아래와 비슷하다.
- 톰캣 객체를 생성하고, 기본 설정을 진행한다.
- 애플리케이션 컨텍스트를 생성하고, ~Application 클래스를 등록한다.
- ~Application 클래스에는 @SpringBootApplication이 들어있고, 그 안에 @Configuration이 들어있으므로 스프링 컨테이너가 관리하게 된다.
- 또한, @SpringBootApplication 내부에 있는 @ComponentScan과 @EnableAutoConfiguration 등이 동작한다.
- register() 시에 내부적으로 해당 어노테이션이 달려있는지 확인 후 달려있으면 추가적인 로직 수행하는 방식
- 디스패처 서블릿을 생성하고, 스프링 컨테이너를 연결해준다.
- 톰캣에 디스패처 서블릿을 등록해준다.
- 톰캣을 실행한다.
@EnableAutoConfiguration
- 애플리케이션 실행 시 필요한 설정을 자동으로 구성해주는 것을 허용해주는 어노테이션이다.
즉, @AutoConfiguration을 활성화 해준다. -> wiki @AutoConfiguration 검색
- 무엇을 자동으로 구성해주느냐 하면 DataSource, TransactionManager 등의 필수적인 빈들을 등록해주는 것을 말한다.
@ComponentScan
- 현재 패키지와 하위 패키지를 재귀적으로 스캔하여 빈들을 스프링에 등록한다.
- 현재와 하위 패키지만 스캐닝하므로 다른 외부 패키지를 스캔하려면 아래와 같이 하면 된다.
@SpringBootApplication(scanBasePackages={"패키지명", "패키지명"})