본문 바로가기
IDE

SpringBoot에서 template, static resource 실시간 반영하기 (spring-boot-devtools)

by 향로 (기억보단 기록을) 2016. 10. 10.
반응형

Intellij + SpringBoot + Template Engine 조합으로 웹 개발을 하다보면 정말 노가다라고 느껴지는게 정적 리소스 갱신을 위한 서버 restart이다.


무슨 말이냐하면 SpringBoot로 프로젝트를 생성하면 이전처럼 webapp 폴더에 html/css/js (정적 리소스)들을 담당하는게 아니라 resources 폴더 아래에서 관리하다보니 정적 리소스들 갱신을 하기 위해선 tomcat을 restart 해야만 한다.

아마 루비와 같은 스크립트 언어 개발하시는 분들은 Java & Spring 으로 이런 일이 벌어지는거에 너무 놀래실것 같긴 하다..


(Spring Boot의 일반적인 리소스 Path)


여튼 Javascript를 중점적으로 개발/수정할 때에는 이게 생각보다 너무 귀찮아서 새로고침만 하면 바로 반영되게 하고 싶었다.

그래서 몇가지 방법들을 찾아보았는데, SpringBoot의 정적 리소스 Path를 예전처럼 webapp으로 지정해서 하는 방식을 기록해주신분이 계셨지만, 이건 패키징할때나 다른 Path을 잡을때나 귀찮은 일이 또 생기게 되서 기존 Path를 유지한채로 Hot reload가 되도록 하는 방법을 찾다가 SpringBoot Devtools에 대해 알게 되었다.


(SpringBoot 1.3 버전부터 지원하기 때문에 1.3 미만의 버전에서는 Spring Loaded를 검색해보면 될 것 같다.)


바로 설정을 시작해보자. 참고로 IDE의 지원이 함께 필요한데 여기서는 IntelliJ를 기준으로 진행한다.


1. Gradle에 의존성 추가

Maven Repository에서 spring-boot-devtools로 검색하여 나온 내용을 본인의 빌드관리 툴 (Mave or Gradle)에 추가하여 받도록 하자



2. application.properties 혹은 application.yml에 reload 설정 추가

SpringBoot 프로젝트의 경우 application.properties 혹은 application.yml 으로 프로젝트 설정을 관리한다.

본인의 설정 양식에 맞춰 아래 설정을 추가하자 (난 application.yml로 관리한다)


설정 내용은 어려운게 없다. livereload를 enable 하며, freemarker cache 옵션을 false로 변경하여 compile을 다시하지 않아도 반영되도록 하였다. (물론 실서버 배포시에는 이 옵션을 개발서버와 실서버용으로 분리시켜야 한다. 템플릿을 캐시하지 않으면 서버 터지는걸 볼 수 있다)


3. IntelliJ 옵션 수정

보통 블로그에서는 위 2개만 설정하면 된다고 나오는데, IntelliJ에서는 저것만 가지고는 절대 되지 않았다. 그래서 추가적으로 찾아보니 IntelliJ에서 몇가지 설정을 추가해야만 한다.


1) registry 설정

ctrl + shift + a 를 누르면 IntelliJ에서 검색창이 나온다.



여기에서 Registry... 로 들어가면 여러 옵션이 나오는데 그중 아래와 같이 체크박스에 체크를 하자.



2) compiler 설정

File -> Settings 옵션에 들어가서 아래와 같이 Make Project automatically 옵션을 체크하자.




프로젝트를 다시 시작해보자. Tomcat을 재시작하거나 Applicaton.java를 재시작하거나 설정을 적용할 수 있도록 서버재시작을 하면 된다.


4. 브라우저 캐시 삭제

3번까지 진행해도 아마 안될수 있다. 그건 별다른 이유가 아니라 브라우저에서 동일 url로 호출하는 정적 리소스들은 캐시하고 있기 때문인데, 수정한 리소스들을 반영하기 위해 브라우저 캐시를 한번만 삭제하자 (이후로는 이럴 필요 없다)


(크롬 기준의 브라우저 캐시 삭제)


여기까지 하게 되면 js, css, freemarker를 수정할때마다 서버 재시작을 할 필요가 없게 된다!!


불필요한 시간 낭비를 줄일수 있게되서!

귀찮은 행동을 안해도 되게 되어서!

너무 좋다!!! 

(코코!)

반응형