본문 바로가기

Back-end/Spring

Spring Boot DevTools 개념과 기능, IntelliJ에서 설정하기

Spring Boot DevTools 개념과 기능, IntelliJ에서 설정하기

DevTools란?

DevTools는 스프링 개발자에게 다음과 같은 개발 시점의 편리한 도구를 제공한다.

  • 코드가 변경될 때 자동으로 애플리케이션을 재시작시킨다.
  • 브라우저로 전송되는 리소스(ex. 템플릿, 자바스크립트, 스타일시트)가 변경될 때 자동으로 브라우저를 새로고침한다.
  • 템플릿 캐시를 자동으로 비활성화한다.
  • 만일 H2 데이터베이스가 사용 중이라면 자동으로 H2콘솔을 활성화한다.

DevTools는 각종 IDE의 플러그인이 아니다. 따라서 STS, IntelliJ IDEA 등 모두에서 잘 동작한다. 또한 개발 시에만 사용되도록 했으므로 실제 운영에서는 스스로 비활성화된다.

자동으로 애플리케이션 재시작시키기

DevTools를 사용하면 프로젝트의 자바 코드와 프로퍼티 파일들을 변경할 때 곧바로 해당 변경이 적용된다. DevTools는 변경을 감시하며, 무언가 변경되었음을 알게 되면 자동으로 애플리케이션을 다시 시작시킨다.

 

애플리케이션은 JVM에서 두 개의 클래스 로더에 의해 로드된다. 그중 하나는 우리 자바 코드, 속성 파일, 프로젝트의 src/main/ 경로에 있는 모든 것과 함께 로드된다. 이것은 자주 변경될 수 있는 것이다. 나머지 클래스 로더는 자주 변경되지 않는 의존성 라이브러리와 함께 로드된다.

 

변경이 감지되는 경우 DevTools는 프로젝트 코드를 포함하는 클래스 로더만 다시 로드하고 스프링 애플리케이션 컨텍스르를 다시 시작시킨다. 그러나 다른 클래스 로더와 JVM은 그대로 둔다. 따라서 애플리케이션이 시작하는데 걸리는 시간을 조금이나마 단축해 준다.

 

이런 전략의 단점은 애플리케이션이 자동으로 다시 시작될 때 의존성 변경이 적용될 수 없다는 것이다. 의존성 라이브러리를 포함하는 클래스 로더는 자동으로 다시 로드되지 않기 때문이다. 따라서 빌드 명세(pom.xml)에 의존성을 추가, 변경할 때는 애플리케이션을 새로 시작해야만 변경 효과가 나타날 수 있다.

 

자동으로 브라우저를 새로고침하고 템플릿 캐시를 비활성화하기

기본적으로 Thymeleaf와 FreeMarker 같은 템플릿에서는 템플릿의 파싱 결과를 캐시에 저장하고 사용하도록 구성된다. 템플릿이 사용되는 모든 웹 요청마다 매번 다시 파싱되지 않게 하기 위해서다. 이것은 조금이라도 성능상 이점을 얻을 수 있어서 실제 운영시에는 좋다.

 

그러나 개발 시점에는 템플릿 캐싱이 그리 유용하지 않다. 애플리케이션이 실행 중일 때 템플릿을 변경하고 브라우저를 새로고침하더라도 여전히 변경 전의 캐싱된 템플릿이 사용되므로 변경된 결과를 볼 수 없기 때문이다. 이 경우 애플리케이션을 다시 시작해야만 변경된 결과를 볼 수 있다.

 

DevTools는 모든 템플릿 캐싱을 자동으로 비활성화하여 이 문제를 해결한다. 따라서 템플릿을 얼마든지 변경하더라도 브라우저만 새로고침해주면 변경된 템플릿이 적용된다.

 

브라우저 새로고침 버튼을 누르기조차 귀찮다면 자동으로 새로고침을 시킬 수 있다. DevTools가 사용될 때는 애플리케이션과 함께 자동으로 LiveReload서버를 활성화한다. LiveReload 서버 자체는 그리 유용하지 않으나 이 서버와 부합되는 LiveReload 브라우저 플러그인과 연결될 때는 브라우저에 전달되는 거의 모든 것(템플릿, 이미지, 스타일시트, 자바스크립트)에 변경이 생길 때 브라우저가 자동으로 새로고침된다.

설치 방법 - http://livereload.com/extensions/

H2 콘솔

H2 데이터베이스를 사용한다면 웹 브라우저에서 사용할 수 있는 H2 콘솔도 DevTools가 자동으로 활성화해 준다. 따라서 웹 브라우저에서 http://localhost:8080/h2-console에 접속하면 애플리케이션에서 사용하는 데이터를 알 수 있다.

 

IntelliJ에서 설정하기

1. pom.xml dependency 추가

<dependency>
	<groupId>org.springframework.boot</groupId>
   	<artifactId>spring-boot-devtools</artifactId>
  	<scope>runtime</scope>
  	<optional>true</optional>
</dependency>

2. Preference > Build, Execution, Deployment > Compiler Build project automatically 체크

3. Find Action(Command+Shift+A) > Registry > compiler.automake.allow.when.app.running 체크

 

Reference

Spring in Action 스프링 인 액션 / Jpub, www.manning.com/books/spring-in-action-fifth-edition

 

Spring in Action, Fifth Edition

Spring in Action, 5th Edition is the fully updated revision of Manning's bestselling Spring in Action. This new edition includes all Spring 5.0 updates, along with new examples on reactive programming, Spring WebFlux, and microservices. You'll also fin

www.manning.com

 

반응형