Spring Bootλ μ ν리μΌμ΄μ κ°λ°μ λμ± μ¦κ²κ² ν΄μ£Όλ λꡬ λͺ¨μ(spring-boot-devtools)μ μ 곡νλ€.
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
spring-boot-devtools λͺ¨λμ μλμ μΌλ‘ production λ¨κ³μλ λΉνμ±νλλ©°, spring.devtools.restart.enabled μμ€ν μμ±μΌλ‘ μ μ΄ κ°λ₯νλ€.
// νμ±ν
spring.devtools.restart.enabled=true
// λΉνμ±ν
spring.devtools.restart.enabled=false
Spring Bootλ‘ μ§μλλ μ¬λ¬ λΌμ΄λΈλ¬λ¦¬λ€μ μ±λ₯μ κ°μ νκΈ° μν΄ Cacheλ₯Ό μ¬μ©νλ€. μλ₯Ό λ€μ΄, ν νλ¦Ώ μμ§λ€(FreeMarker, Groovy, Thymeleaf, Mustache)μ ν νλ¦Ώ νμΌλ€μ λ°λ³΅μ μΌλ‘ νμ±(parsing)νλ κ²μ νΌνκΈ° μν΄ μ»΄νμΌλ(compiled) ν νλ¦Ώλ€μ μΊμ(cache)νλ€. λν, Spring MVCλ μ μ μμλ€(html, js, css λ±)μ μ 곡ν λ μλ΅μΌλ‘ HTTP μΊμ± ν€λλ€μ μΆκ°ν μ μλ€.
μΊμ±μ production λ¨κ³μλ λ§€μ° μ μ©νμ§λ§, development λ¨κ³μμλ μ ν리μΌμ΄μ μ λ°©κΈ μμ ν μ¬νλ€μ΄ λ°μλμ§ μκΈ°μ κΈ°λ³Έκ°μΌλ‘ λΉνμ±ν λμ΄ μλ€.
Spring MVC μ ν리μΌμ΄μ κ°λ° μ€μ μΉ μμ²μ κ΄ν λ λ§μ μ 보λ€μ νμλ‘ νκΈ° λλ¬Έμ, κ°λ°μ λꡬλ€μ DEBUG λ‘κΉ μ κΈ°λ³Έμ μΌλ‘ νμ©νλ€. DEBUG λ‘κΉ μ νμ©νλ©΄ λ€μ΄μ€λ μμ², μμ²μ μ²λ¦¬νλ νΈλ€λ¬, μλ΅ κ²°κ³Όλ¬Ό λ±μ λ‘κ·Έλ‘μ¨ νμΈν μ μλ€.
κΈ°λ³Έμ μΌλ‘ μ 곡λλ λ‘κ·Έλ³΄λ€ λ λ§μ μ 보λ€μ΄ νμνλ€λ©΄ μλμ μμ±λ€μ νμ±ννλ€.
spring.mvc.log-request-details=true
spring.codec.log-request-details=true
spring-boot-devtools λͺ¨λμ classpath μμ μλ νμΌλ€μ΄ λ³κ²½λ λλ§λ€ μλμ μΌλ‘ μ ν리μΌμ΄μ μ μ¬μμνλ€. κΈ°λ³Έμ μΌλ‘ classpath μμ μλ λͺ¨λ νμΌλ€μ΄ λ³νλλμ§ λͺ¨λν°λ§λμ§λ§, μ μ μμμ΄λ View ν νλ¦Ώ κ°μ νΉμ μμλ€μ μ ν리μΌμ΄μ μ μ¬μμνμ§ μλλ€.
spring.devtools.restart.exclude=static/**,public/**
spring.devtools.restart.enabled=false
spring.devtools.restart.trigger-file=.reloadtrigger
spring-boot-devtools λͺ¨λμ λ΄μ₯λ LiveReload μλ²λ₯Ό μ 곡νλ€. LiveReload μλ²λ μμ(resource)μ΄ λ³κ²½λ λ λΈλΌμ°μ λ₯Ό μλ‘κ³ μΉ¨ νλλ‘ ν μ μλ€. LiveReload λΈλΌμ°μ νμ₯ κΈ°λ₯λ€μ Chrome, Firefox κ·Έλ¦¬κ³ Safariμμ μ¬μ©κ°λ₯νλ€.
λ§μ½ LiveReload μλ²λ₯Ό μ¬μ©νμ§ μμΌλ €λ©΄ λ€μκ³Ό κ°μ΄ μ€μ νλ€.
spring.devtools.livereload.enabled=false