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 명령어로 서버를 구동할 수 있습니다.
  • 원격 서버를 디버깅할 수 있습니다.

 

명령어) 빌드 및 실행

더보기
더보기
./gradlew bootJar
java -jar build/libs/spring-boot-document-example-1.0-SNAPSHOT.jar

 

명령어) 원격 서버 디버그 모드로 접속

더보기
더보기
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을 사용할 수 있습니다.

 

 

참고