스프링부트 프로젝트를 생성을 하게되면, 기본 Application 클래스가 생성된다.
클래스명은 프로젝트에 맞게 설정할 수 있고, 큰 틀은 다음과 같다.
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
클래스를 보면 @SpringBootApllication 어노테이션을 확인할 수 있다.
- @SpringBootApplication 어노테이션을 추가하면 기본적으로 해당 애플리케이션이 Spring Boot 기반의 애플리케이션으로 동작하도록 해준다.
- 이 어노테이션이 있는 위치부터 설정을 읽어가기 때문에 이 어노테이션을 포함한 클래스는 항상 프로젝트의 최상단에 위치해야한다.
@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 {
...
}
@SpringBootApplication 어노테이션은 위와 같이 정의되어있다.
이 중 주 기능으로는 3가지가 있다.
Spring Context에 Bean을 추가적으로 등록하거나 Configuration 클래스를 추가적으로 임포트 하는 기능을 활성화한다.
Spring Boot의 @*Test 어노테이션을 사용해서 테스트를 진행할 경우, 자동으로 @SpringBootConfiguration을 검색한다.
Spring boot에서 AutoConfiguration을 가능하게 해준다.
* Auto-Configuration: CLASSPATH에 spring MVC나 Hibernate등에 대한 Jar파일이 존재하면, 자동으로 configuration 해주는 기능
애플리케이션 내의 패키지에서 @Component 어노테이션이 달린 class들을 자동으로 스캔하여 application context에 빈으로 등록해준다.
SpringApplication.run()으로 해당 클래스를 run하면 Spring Boot의 내장 WAS를 실행한다.
이를 통해 따로 톰캣과 같은 외부 WAS를 설치 후 설정해두지 않아도, Spring Boot로 만들어진 Jar 파일로 애플리케이션을 실행할 수 있다.
외장 WAS를 사용할 시 이 프로젝트를 실행시키기 위한 서버에서 모두 외장 WAS의 종류와 버전, 설정을 일치시켜야만 한다.
내장 WAS를 사용하면 이런 신경을 쓸 필요 없이 언제 어디서든 같은 환경에서 Spring Boot를 배포할 수 있다.