스프링 부트 작동원리
@SpringBootApplication
org.springframework.boot.autoconfigure.SpringBootApplicaton
package org.springframework.boot.autoconfigure; @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 {
@AliasFor(annotation = EnableAutoConfiguration.class, attribute = "exclude") Class<?>[] exclude() default {}; @AliasFor(annotation = EnableAutoConfiguration.class, attribute = "excludeName") String[] excludeName() default {}; @AliasFor(annotation = ComponentScan.class, attribute = "basePackages") String[] scanBasePackages() default {}; @AliasFor(annotation = ComponentScan.class, attribute = "basePackageClasses") Class<?>[] scanBasePackageClasses() default {}; } |
@SpringBootApplication는 @Configuration, @EnableAutoConfiguration, @ComponentScan 애노에테이션이 뭉쳐진 애너테이션이다.
스프링 부트 1.0버전 시절에 이 세 애노테이션을 모두 붙여 스프링 부트 앱을 만들었지만, 1.2.0 버전 이후 더욱 개선된 @SpringBootApplicaiton이 등장했다.
@EnableAutoConfiguration은 스프링 부트를 움직이는 원동력이다.
스프링 부트 자동 구성 auto-Configuration이 바로 이 애노테이션에서 시작된다.
스프링 부트는 클래스패스, 애노테이션, 구성파일을 보고 가장 적절한 앱에 가장 알맞은 기술을 넣어 구성을 마친다.
결국 이 애노테이션이 스프링 부트로 앱을 구성하게 된다.
@SpringBootApplication과 그 내부의 자동 구성 @EnableAutoConfiguration 기능 덕분에 전체 애플리케이션 컴포넌트를 식별한다.
우선 클래스 패스를 조사해서 spring-boot-starter-web 스타터가 선언된 것을 인지한 스프링 부트는 앱 애플리케이션을 구성한다.
따라서 @RequestMapping이 달린 메서드가 있고 @Controller 애노테이션이 달린 클래스는 웹 컨트롤러로 보고, 톰캣 서버는 spring-boot-starter-web의 의존체 중 하나이므로 톰캣으로 앱을 띄운다.
스프링 부트에는 앱에 필요한 비기능적 non-functional 요소가 골고루 갖춰져있다.
일단 스프링 부트로 웹 애플리케이션을 생성할 때 마다 톰캣 서버는 반드시 내장된다.
톰캣을 들어내고 제티, 언더토우 등 다른 서버를 대신 사용할 수 있다.
단독형 앱은
mvn package
실행후 target 폴더에 JAR 파일이 생성된다.
java -jar target/spring-boot-project-0.0.1-SNAPSHOT.jar
실행 하면 localhos:8080으로 접속이 된다. 앱을 따로 제작해 고객사에 배포할 때 좋은 방법이다.
'JAVA > Spring Boot' 카테고리의 다른 글
Spring Data JPA (0) | 2018.04.02 |
---|---|
스프링 부트 데이터 액세스 (0) | 2018.02.12 |
스프링 부트 테스트 (0) | 2018.02.09 |
스프링부트에서 스프링 (0) | 2018.02.09 |
스프링과 스프링 부트 비교 (0) | 2018.02.08 |