Intellij의 Spring Initializer를 사용 시 처음 마주치는 화면입니다. Developer Tools. 참으로 멋있는 이름입니다.. 무언가 생산성을 극대화해줄 것만 같은 그 이름. 매 프로젝트를 생성할 때마다 해당 패키지를 포함하지만, 정작 제대로 알고 써본 적은 없는 Spring Boot DevTools에 관해 알아볼게요.
Spring Boot DevTools가 제공하는 기능은 크게 5가지입니다.
이번 글에선 가장 주로 쓰이는 세 가지 기능에 대해 알아보고 설정 방법에 대해 알려드릴게요.
Spring에서 제공하는 thymeleaf는 기본적으로 캐싱 기능을 사용합니다. 하지만 개발과정에서 캐싱이 되어있다면, 우리가 thymeleaf 파일을 수정하더라도, 반영되지 않을 거에요. Application cache 설정값을 false로 수정해야 하죠.
이러한 작업을 Spring Boot DevTools에서 제공합니다. 개발 시점과 배포 시점에 다른 설정을 기본적으로 개발 단계에 맞춰 설정해줍니다. 예를 들어 템플릿 엔진의 캐싱 기능을 개발 단계에서 자동으로 꺼주는 역할을 하죠. 따라서 개발자는 설정 파일을 건드리지 않아도 된답니다.
Spring Boot Application을 개발하다 보면 애플리케이션을 재시작해야 하는 경우가 많더라구요. 심지어 클래스의 필드 하나를 고쳐도 Ctrl + R 단축키를 누르는 수고스러움을 감수해야 하죠. Spring Boot DevTools는 이 기능을 자동으로 제공합니다. 파일 수정 후 저장을 하면, Classpath에 존재하는 파일의 변경을 감지하고, 자동으로 서버를 restart 해줍니다. 설정을 통해 원하는 디렉터리만을 트리거로 설정할 수도 있어요!
React에 대한 경험이 있으시다면, Hot reload를 아실 겁니다. JS 파일을 수정하기만 해도 자동으로 브라우저가 새로 고침 되는 기능이죠. DevTools 또한 이 기능을 제공합니다(물론 리액트만큼 훌륭하진 않더라고요 😭). 내부적으로 live reload 서버를 두고, 브라우저 확장프로그램과 통신하는 방식으로 동작하죠.
LiveReload 링크를 통해 크롬 확장프로그램을 받고, enable을 하면 됩니다.
해당 버튼으로 활성화를 하는데, 이게 켜졌는지 안 켜졌는지 제대로 보이지 않아서, 마우스를 올려놓은 채 위 그림처럼 메시지가 뜨면 실행이 된 상태라고 보시면 됩니다. 뷰 페이지를 업데이트하면, 브라우저가 자동으로 업데이트되는 모습을 볼 수 있습니다!
// build.gradle
configurations {
developmentOnly
runtimeClasspath {
extendsFrom developmentOnly
}
}
dependencies {
developmentOnly("org.springframework.boot:spring-boot-devtools")
}
Preference 의 Build, Execution, Deployment -> Compiler -> Build project automatically 를 체크하고 apply 합니다.
만약 Live Reload가 정상적으로 수행이 안된다면, Intellij 우측 상단에 있는 APPLICATION 버튼을 누르면 Edit Configuration 버튼이 나옵니다. 클릭하고, Spring Boot의 application 에서 On 'Update' action 과 On frame deactivation 값을 모두 Update resources 로 설정합니다. (저는 이걸 몰라서 엄청 헤맸네요 😭)
이렇게 하시면 Spring Devtools 설정이 끝납니다!
Spring Devtools에서 제공하는 기능이 완벽하다고 보긴 어렵지만, 개발 과정에서 번거로움을 어느 정도 덜어주는 것 같아요! 또한 live reload 확장프로그램을 받지 않아도, 수정한 resource file을 recompile 하면 서버 재시작 없이 변화를 반영할 수 있답니다. 적절하게 활용한다면 개발 시간을 조금이나마 단축할 수 있을 것 같네요! 긴 글 읽어주셔서 감사합니다!
좋은 글 감사합니다 ㅎㅎ live reload 찾다가 데브툴이 제공하는 다른 기능들도 알게되었네요~~
+ 몇년 전에 작성해주셨다보니 인텔리제이 최신버전은 compiler.automake.allow.when.app.running 를 설정하는 방법이 바뀌었더라구요!
이 내용도 추가해주시면 어떨까요?? (https://youtrack.jetbrains.com/issue/IDEA-274903/In-IntelliJ-2021.2-compiler.automake.allow.when.app.running-disappear.-Unable-to-enable-live-reload-under-Spring-boot)