kok202
스프링 부트 강의 정리 (4~5 : Configuration, devtools)

2019. 4. 20. 19:49[공부] 영상/스프링 부트 강의

스프링 부트에서도 설정 파일을 XML로도 불러들일 수 있는데, 자바 기반의 설정 파일을 사용하는 것을 권장한다. XML 을 가능하면 쓰지말자. 

  • XML을 사용하는 방식은 XML 파일을 만들고(ex. myConfiguration.xml) MainApplication에 @ImportResource("myConfiguration.xml") 을 해주면된다.
  • 자바 기반의 설정 파일 등록은 MyConfiguration 클래스에 @Configuration 를 달아주고 MainApplication에  @EnableAutoConfiguration 또는 @SpringBootApplication을 달아주면 된다.

* @EnableAutoConfiguration의 기능

exclude : 특정 configuration을 부르지 않게 할 수 있다.

 

 

 

 

 

Bean을 정의 하는 방법은 스프링에서 제공하는 모든 기능을 사용할 수 있다. @Component, @Service, @Repository, @Controller는 자동으로 빈으로 등록해준다. 빈의 @Autowired는 1. 생성자 주입, 2. Setter 주입, 3. 필드 주입 가능하면 1번을 사용하자. 생성자 주입을 사용하면 Autowired 받는 멤버 변수에 final을 사용 할 수 있다. 이 때 Lombok의 @ArgsConstructor를 사용하면 좋다.

 

 

 

 

 

@SpringBootApplication

@ComponentScan + @EnableAutoConfiguration + @SpringBootConfiguration ... 등을 하도 많이 쓰니까 하나로 모아둔 Annotation

 

 

 

 

 

@SpringBootTest

@SpringBootApplication이 달려있는 클래스를 알아서 찾아서 @ComponentScan, @EnalbueAutoConfiguration들을 수행하여 @Autowired를 성공적으로 할 수 있도록 해준다. 

 

 

 

 

 

Jar 기반의 패키징 방법

방법 1. IDE에서 실행 하기 : MainApplication 클래스의 main method를 실행.

방법 2. java -jar taret/myapplication-0.0.1-SNAPSHOT.jar

빌드 방법에대한 이야기이므로 넘어가자

https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#using-boot-running-as-a-packaged-application

 

Spring Boot Reference Guide

 

docs.spring.io

 

 

 

 

 

Maven dependency optional

<dependency>
  ...
  <optional> true </optional>
  ...
</dependency>

내 프로젝트를 누군가가 모듈로서 추가할 때 해당 의존성 모듈을 추가할지 말지를 선택할 수 있다.

 

 

 

 

 

안써도 되는 기능들

Spring-boot-devtools

  • 기본 설정 : 1. H2 DB tool을 자동으로 띄워준다.
  • 기본 설정 : 2. develop 환경에서 Cache 기능 disable : 캐시가 production으로 동작할 때는 굉장히 도움 되지만, 개발 환경에서 사용하기에는 변경사항이 즉시 반영이 안되므로 불편하다. 개발 환경에서는 자동으로 disable 되도록 해준다. 
  • Restart : class path에 있는 파일들을 모니터링 해서 값이 변할 때마다 application 을 restart 하지 않아도 자동으로 restart 하도록 도와준다. (class path에 없는 파일을 수정하더라도 application이 restart 하게 할 수도 있다.) 더불어 application 을 restart 되면 어떤 리소스가 변경되었는지 log를 찍어준다.
  • Reload : 스프링 부트 restart는 2개의 base class loader, restart class loader를 이용해서 restart한다. restart가 충분히 빠르지 않다면 Reloading 을 사용하는 것을 추천한다. 
  • Global setting : spring-boot-devtools.properties를 이용하여 devtools에 변경사항을 반영할 수 있다. class path에 있는 모든 파일에 로딩된다.
  • Remote Application : 원격으로 Application을 실행 할 수 있다. 메이븐 패키징 할 때 dev tool 이 자동으로 빠지는데 remote application을 사용하려면 pom.xml에 빌드 관련 설정을 넣어줘야한다. Remote application 은 Security hole 이 될 수 있으므로 이 설정은 실제 production 환경에서 쓰지 않는 것을 권장한다.