6. Using the @SpringBootApplication Annotation
@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)
Class<?>[] exclude() default {};
@AliasFor(annotation = EnableAutoConfiguration.class)
String[] excludeName() default {};
@AliasFor(annotation = ComponentScan.class, attribute = "basePackages")
String[] scanBasePackages() default {};
@AliasFor(annotation = ComponentScan.class, attribute = "basePackageClasses")
Class<?>[] scanBasePackageClasses() default {};
@AliasFor(annotation = ComponentScan.class, attribute = "nameGenerator")
Class<? extends BeanNameGenerator> nameGenerator() default BeanNameGenerator.class;
@AliasFor(annotation = Configuration.class)
boolean proxyBeanMethods() default true;
}
- @SpringBootApplication는 간편하게 auto-configuration을 사용할 수 있도록 지원하는 메타 어노테이션입니다.
- @EnableAutoConfiguration : Spring Boot의 auto-configuration 매커니즘이 적용되도록 하는 어노테이션
- @ComponentScan : 빈 등록 어노테이션을 스캐닝하여 등록시키는 어노테이션
- @SpringBootConfiguration : 추가적인 빈의 등록이나 설정을 활성화하는 어노테이션
- @SpringBootApplication이 포함하는 어노테이션 attribute의 aliase 기능을 제공합니다.
- @EnableAutoConfiguration : exclude, excludeNames
- @ComponentScan : scanBasePackages(basePackages), scanBasePackageClasses(basePackageClasses)
- @Configuration : proxyBeanMethods
7. Running Your Application
- embedded server를 사용하여 Spring Boot을 jar로 패키징하는것은 한번의 실행을 통해 웹서버를 올릴 수 있게 해줍니다.
Running From an IDE
- IDE를 사용해서 Spring Boot를 실행할 수 있습니다.
- 먼저 IDE에 Spring Boot 프로젝트를 import 해야 합니다.
- 사용하는 IDE와 Build System에 따라 과정이 달라집니다.
- IDE 특수설정으로 인해 프로젝트를 즉시 import 할 수 없는 경우가 있습니다.
- 이러한 경우 Build System에서 IDE를 위한 메타데이터를 생성하도록 plugin을 지원합니다.
- 해당 plugin은 IDE 대신 메타데이터를 생성해줍니다. (gradle plugin)
Running as a Packaged Application
- Spring Boot의 Maven 혹은 Gradle plugin을 사용하여 executable jar를 생성하면 java 명령어로 서버를 구동할 수 있습니다.
java -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=8000,suspend=n
-jar target/myapplication-0.0.1-SNAPSHOT.jar
- 원격에서 해당 서버를 디버깅할 수 있습니다.
- 위 코드는 원격에서 서버를 디버깅하도록 JDWP 에이전트를 사용하여 디버그 모드인 JVM의 포트를 여는 코드입니다.
- 자신의 IDE를 통해 해당 원격 서버에 접속할 경우, 디버깅 모드로 진입이 가능합니다.
Using the Gradle Plugin
- Spring Boot Gradle Plugin는 bootRun이란 task를 제공합니다.
- bootRun는 org.springframework.boot 혹은 java plugin에서 쓰이는 task입니다.
$ ./gradlew bootRun
$ ./gradlew bootRun --args='--spring.profiles.active=dev'
$ ./gradlew bootRun -Pexample=custom
tasks.named("bootRun") {
sourceResources sourceSets.main
systemProperty 'com.example.property', findProperty('example') ?: 'default'
}
- 패키징된 파일을 기동하는 것이 아닌 디렉토리 상태로 서버를 기동합니다.
- 자동적으로 main source set의 runtime classpath가 적용됩니다.
- argument, system property, project environment 설정 기능이 제공됩니다.
Hot Swapping
- Spring Boot는 Java 기반 애플리케이션이므로 JVM의 Hot-Swapping 기능이 추가설정 없이 동작할 수 있습니다.
- JVM의 Hot-Swapping 기능은 일반적으로 변수 추가와 같은 소규모 기능만 제공합니다.
- 완성도 있는 솔루션을 사용하여 구축해야 합니다.
- 이를 위해 JRebel을 사용할 수 있습니다.
- Spring Boot에서는 관련 모듈을 spring-boot-devtools 의존성에 패키징했습니다.
- spring-boot-devtools 의존성을 받아 hot swapping 기능을 추가할 수 있습니다.
참고
'Spring > Spring Boot' 카테고리의 다른 글
[Spring Boot] 2-2. Core Features: Externalized Configuration (2) | 2023.10.09 |
---|---|
[Spring Boot] 2-1. Core Features: SpringApplication 클래스 (0) | 2023.10.08 |
[Spring Boot] 1-1. Spring Boot 사용하기 (0) | 2023.10.07 |
[Spring Boot][KoLiving] 3-2 Sign-up (0) | 2023.09.19 |
[Spring Boot][KoLiving] 3-1 Sign-up (0) | 2023.09.19 |