📂 목차
📚 본문
스프링 부트 개발자 도구라고 불리는 이 컴포넌트는 어플리케이션을 개발할 때 개발자들이 필요로 하는 기능들을 담은 도구 세트들을 제공한다. 여기는 편리한 기능들이 많아서 이용하면 좋을 것이다.
// Spring Boot devtools
developmentOnly 'org.springframework.boot:spring-boot-devtools'
위 의존관계를 추가해주자.
Devtools 의 웹기반 HTML 템플릿 엔진 캐싱 기능
스프링 부트와 스프링 부트를 구성하는 라이브러리 중 일부는 성능 향상을 위해 캐시를 지원하는데, 한 번 호출되고 사라지는 휘발성 데이터들에 대해 다음 실행에서 또 그 데이터들을 불러와야 하는 상황일 때, 우리는 이것들을 계속 저장시켜서 이미 저장되어 있는 것들을 불러오게 할 수 있다.
실제로 Thymeleaf 템플릿 엔진에서 HTML 을 캐싱하고 이후 호출될 때는 템플릿을 다시 parsing 하지 않고, 미리 파싱해놓은 HTML 을 다시 쓰게 하면 된다. 하지만 변경 내용이 바로 반영되지 않을 수 있기 때문에 개발 단계에서는 끄고 진행해야 한다(org.springframework.boot.devtools.env.DevToolsPropertyDefaultsPostProcessor
클래스를 사용해서 기본적으로 캐싱을 모두 비활성화 할 수 있음).
다음 properties 값들이 기본적으로 설정된다.
spring.thymeleaf.cache=false
spring.freemarker.cache=false
spring.groovy.template.cache=false
spring.mustache.cache=false
spring.web.resources.cache.period=3600
spring.web.resources.chain.cache=true
위부터 차례대로 설명하면 다음과 같다:
- 템플릿 파일(HTML)을 파싱한 결과를 메모리에 캐시할지 여부
- FreeMarker 템플릿 엔진 캐시 여부
- Groovy 기반 템플릿 캐시 여부
- Mustache 템플릿 캐시 여부
- 정적 리소스(이미지, CSS, JS)의 캐시 지속 시간(초 단위)
- 정적 리소스 처리 체인(Static Resource Chain)의 캐시 여부
Devtools 의 Live Reload
개발 환경을 구성했을때, 소스 코드를 변경하고 변경 내용을 확인하려면 어플리케이션을 재시작 해야하는 번거로움이 있는데, Devtools를 사용하면 클래스패스에 변경 사항이 있을 때마다 자동으로 재시작을 해준다.
리로드를 해주는 역할을 하는 클래스는 두 종류인데 base classloader 와 restart classloader 이다. base loader는 변경되는 일이 별로 없는 클래스를 로딩하며, 다른 하나는 변경이 잦은 클래스를 로딩하는 역할을 한다.
일반적으로 설정할 수 있는 프로퍼티는 다음과 같다:
spring.devtools.livereload.enabled=true
spring.devtools.restart.enabled=true
- LiveReload 서버 활성화
- 코드 변경 시 자동 재시작
✒️ 용어
Static Resource Chain
기본적으로 웹 서비스를 제공하려면 웹사이트에 대한 HTML 문서를 제공해야 하는데, 우리가 만드는 HTML 웹사이트는 전부 HTML 을 만드는 엔진에 의해서 만들어지고, 여기서 src/main/resources/static
, public
, resources
와 같은 정적 리소스들을 활용하게 된다.
이 파일들을 단순히 내려주는게 아니라 템플릿 엔진에서는 이를 여러 단계(Chain)로 필터링, 변환, 가공, 최적화를 진행하고 내려주게 된다. 이 처리 단계를 연결시켜 Static Resource Chain 이라고 부른다.