Spring Boot 2.0.1 reference 정리 4

2018-04-17

1. Auto-configuration

  • Spring Boot auto-configuration은 추가한 jar dependency를 기반으로 스프링 application을 자동으로 설정하는 것을 시도한다.
  • 예를 들어 HSQLDB가 classpath에 있다면 (dependency로 추가했다면) 그리고 수동으로 데이터베이스 connection bean 설정을 하지 않았다면, 스프링 부트가 in-memory 데이터베이스를 자동으로 설정해준다.
  • 이를 사용하기 위해서는 @Configuration 어노테이션 위에 @EnableAutoConfiguration을 추가하거나 @SpringBootApplication 어노테이션을 추가해라



2. Spring Beans and Dependency Injection

  • bean을 정의하는 방법은 스프링 프레임워크가 지원하는 모든 기술이 가능
  • @ComponentScan과 @Autowired를 쓰는 방식 역시 잘 동작 한다
  • 메인 클래스에 @ComponentScan 어노테이션을 추가한다면 @Component, @Service, @Repository, @Controller와 같은 컴포넌트들은 자동으로 Spring Bean으로 등록 된다.



3. Using the @SpringBootApplication Annotation

  • 많은 스프링 부트 개발자들이 @EnableAutoConfiguration, @ComponentScan, @Configuration 어노테이션을 많이 사용한다
  • @SpringBootApplication 이 어노테이션 하나만으로도 3가지 어노테이션 역할을 할 수 있도록 만들었다
    • @EnableAutoConfiguration : 스프링부트의 자동 설정 매커니즘을 활성화 함
    • @ComponentScan : application 내에 존재하는 @Component를 스캔함
    • @Configuration : bean을 컨텍스트에 등록하거나 configuration 클래스를 import 시킨다.



4. Running Your Application

  • embedded HTTP 서버를 이용하여 JAR로 패키징하는 방법의 가장 큰 장점은 다른 방법으로도 응용 프로그램을 쉽게 실행할 수 있다는 점이다
  • 특별한 IDE 플러그인 없이 debugging 하는 것도 쉽다.


4-1. Running from an IDE

  • 스프링 부트 어플리케이션을 IDE에서 실행하면 간단히 java application처럼 실행하면 된다.
  • 만약에 web application을 두번 실행시키면 “Port already In use” 에러를 보게 되는데 STS 유저라면 Run 버튼 말고 Relaunch 버튼을 눌러서 실행하게 되면 기존에 있던 instance는 종료되게 된다.


4-2. Running as a Packaged Application

  • 만약 executable jar를 만들기 위해 maven이나 gradle 플러그인을 사용한다면 java -jar를 이용하여 어플리케이션을 실행할 수 있다
$ java -jar target/myapplication-0.0.1-SNAPSHOT.jar
  • 원격 서버에 있는 자원에 접근하는 경우 개발 PC와의 차이로 개발에 어려움을 겪게 되는데 이를 위한 원격 debugging도 지원한다
  • Spring Boot Remote Debugging
$ java -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=8000,suspend=n \
       -jar target/myapplication-0.0.1-SNAPSHOT.jar


4-3. Using the Maven Plugin

  • 스프링 부트 어플리케이션은 maven 플러그인으로 실행시킬 수 있다.
  • goal:run 을 추가하면 빠르게 컴파일 되고 어플리케이션이 실행된다
$ mvn spring-boot:run
  • 또한 MAVEN_OPTS를 사용하면 시스템 환경 변수를 설정할 수 있다.
  • 다음 예제는 heap의 최대 메모리 공간 크기를 설정한 예제이다
$ export MAVEN_OPTS=-Xmx1024m
  • -Xmx는 시스템 실제 메모리의 80% ~ 100% 사이여야 한다. -Xmx를 너무 작게 설정하면 어플리케이션 서버가 실패하고 OutOfMemory 에러가 발생할 수 있다. 반면 -Xmx를 너무 크게 설정하면 Java 힙이 스왑되어 다른 성능 문제점을 발생시킬 수 있다.
  • -Xms는 -Xmx 설정의 절반 정도여야 한다.


4-4. Hot Swapping

  • Hot Swapping은 파일 수정 이후 서버 재시작 없이 서비스에 바로 적용하는 방법이다
  • 스프링 부트는 application은 Java 응용 프로그램이므로 JVM Hot Swapping을 즉시 사용할 수 있다.
  • 더 완벽한 솔루션을 위해서는 JRebel을 이용하라
  • spring-boot-devtools 모듈도 Hot Swapping을 지원한다.
  • 자바 개발시 Hot Swapping 종류




참고

백기선님 스프링부트 2.0 강의
Spring Boot Reference Guide
Spring Boot Remote Debugging
자바 개발시 Hot Swapping 종류