본문 바로가기

Spring Boot Devtools

devtools 는 이름처럼 어플리케이션 개발시 유용한 기능들을 포함하고 있는 Spring Boot 모듈이다.

개발 도중 결과를 확인하기 위해 build 를 수동으로 실행하고 브라우저를 새로고침 하여 결과를 확인하는 동작을 자동화하는 것이 특히 유용하다.

gradle 에서 devtools 를 사용하려면 dependency 에 아래처럼 한 줄만 추가한다.


configurations {     developmentOnly     runtimeClasspath {         extendsFrom developmentOnly } }

dependencies {
    developmentOnly("org.springframework.boot:spring-boot-devtools")
}
cs


그리고 IDE 마다 설정이 약간씩 틀린데 어플리케이션 실행 중 자동 빌드에 관련한 옵션을 설정한다. (아래: Intellij)


  • File -> Settings [Ctrl-Alt-S] -> 검색 Compiler -> Build project automatically 체크
  • [Ctrl-Shift-A] -> Registry... -> compiler.automake.allow.when.app.running 체크
  • Run - Edit Configurations... - On 'Update' action / On frame deactivation: 적절히 선택 (Update classes and resources 등...)


이제 mainClass 를 실행(run) 시키고 코드를 수정하면 수초 뒤 변경 사항을 브라우저를 새로고침 하여 확인할 수 있다. 패키지(archive) 된 어플리케이션을 실행하면 production 모드로 간주하고 devtools 를 비활성화 하기 때문에 java -jar 나 bootRun 등을 이용하여 어플리케이션을 실행하면 devtools 는 동작하지 않는다. devtools 는 클래스 패스에 존재하는 코드 변경만 주시하므로, 특정 디렉토리의 코드만 자동 빌드가 되지 않는다면 클래스 패스에 추가하는 등의 방법으로 해결해야 한다.



Live Reload


spring-boot-devtools 모듈에는 리소스가 변경 될 때 브라우저가 새로 고침을 할 수 있게 하는 LiveReload 서버가 포함되어 기본으로 활성화 되어 있다.

서버브라우저에 liveReload 확장 프로그램을 설치하면, 코드 수정 후 사용자가 브라우저를 새로고침 하지 않아도 자동으로 새로고침 되어 보여진다.



Cache disabled


Spring Boot 의 몇가지 라이브러리는 성능 향상을 위해 캐시를 사용하는데, devtools 를 사용 중에는 사용자가 자동 빌드를 즉시 확인할 수 있도록, 알려진 템플릿 관련 캐시를 모두 비활성화 하는 것을 기본값으로 한다. application.properties 에 명시하여 수정도 가능하다. (예: spring.thymeleaf.cache=false)


아래는 devtools 의 자동화에 관련된 기본값이다. application.properties 파일에서 수정할 수 있다.


spring.devtools.livereload.enabled=true

spring.devtools.restart.enabled=true



  • 오잉? 2019.09.02 21:55 댓글주소 수정/삭제 댓글쓰기

    developmentOnly
    runtimeClasspath {
    extendsFrom developmentOnly
    }
    configurations{}에 위에 것은 왜 추가 안 하나요? 예제보면 저렇게 하라고 나와있던데? 하고 안 하고 차이가 없나요?

    • 수정했습니다. developmentOnly 를 위와 같이 수정한 경우 프로젝트에서 사용되는 다른 모듈에 적용되는 것을 방지할 수 있습니다.

  • 개발자 2019.10.08 01:37 댓글주소 수정/삭제 댓글쓰기

    안녕하세요, livereload 적용 했는데 새로고침까지 4~5초 정도가 걸립니다ㅠㅠ 소스 수정시 바로 반영되게 할 수 없을까요??

    • 어떤 IDE 를 사용하시는지, 컴파일이 필요한 수정을 하신건지 모르겠어서 답변이 어렵네요; 해당 IDE 설정으로 검색을 해보시는게 좋겠어요 ^^;