Spring/Spring Boot
[Spring Boot] 1-2. Spring Boot 사용하기
noahkim_
2023. 10. 7. 20:15
6. Using the @SpringBootApplication Annotation
- 간편하게 auto-configuration을 사용할 수 있도록 지원하는 메타 어노테이션입니다.
코드) @SpringBootApplication
더보기
더보기
@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;
}
포함 어노테이션 | 역할 설명 |
주요 Attribute (alias로 제공됨)
|
@EnableAutoConfiguration | Auto-Configuration 기능을 활성화 | exclude excludeName |
@ComponentScan | 컴포넌트 스캔을 통해 빈을 자동 등록 |
scanBasePackages
scanBasePackageClasses |
@SpringBootConfiguration | 기존 @Configuration을 대체 Spring Boot 설정 클래스로 인식됨 |
- |
- @Configuration | Java 기반 설정 클래스로 빈 등록 등을 지원 | 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를 제공합니다.
항목 | 설명 |
실행 방식 | 패키징된 JAR 실행이 아닌 디렉토리 상태(classpath 기반)로 실행 |
Classpath 구성 | main 소스셋의 classpath(build/classes/java/main, build/resources/main)가 자동으로 적용됨 |
설정 적용 방식 | 인자(--args), 시스템 속성(systemProperty), 프로젝트 속성(-P) 등을 통해 쉽게 환경 설정 가능 |
빌드 불필요 | .jar 파일로 패키징하지 않고도 실행 가능, 코드 수정 후 바로 테스트 가능 |
핫스왑 지원 | spring-boot-devtools 사용 시 자동 재시작 및 리소스 반영 가능 |
적합한 용도 | 빠른 피드백 루프가 필요한 로컬 개발 환경에 적합 |
명령어) 실행
더보기
더보기
$ ./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'
}
Hot Swapping
- Spring Boot는 Java 기반 애플리케이션이므로 JVM의 Hot-Swapping이 동작 가능합니다. (추가설정 X)
- Spring Boot에서는 관련 모듈을 spring-boot-devtools 의존성에 패키징했습니다.
- spring-boot-devtools 의존성을 받아 hot swapping 기능을 추가할 수 있습니다.
- JVM의 Hot-Swapping 기능은 일반적으로 변수 추가와 같은 소규모 기능만 제공합니다.
- 완성도 있는 솔루션을 사용하여 구축해야 합니다.
- 이를 위해 JRebel을 사용할 수 있습니다.
참고