
프로젝트 의존성에 추가하는 것만으로 동작하는 개발 편의 도구 모음.
빠른 자동 재시작 (Automatic Restart)
/target/classes)를 로드.LiveReload 내장 서버
src/main/resources 하위의 정적 파일(HTML, CSS, JS)이나 템플릿 파일(Thymeleaf 등)이 변경될 때, 브라우저로 "새로고침해!" 라는 신호를 보내는 WebSocket 서버를 내장하고 있음.개발 환경 최적화 기본값 (Sensible Defaults)
spring.thymeleaf.cache=false).파일 시스템 변경을 감지해 브라우저를 자동으로 새로고침하는 프로토콜. 동작 방식은 다음과 같음.
1. [서버] DevTools의 내장 LiveReload 서버가 파일 변경을 감지.
2. [통신] WebSocket을 통해 브라우저에 설치된 LiveReload 클라이언트(확장 프로그램)에게 변경 신호를 전송.
3. [클라이언트] 신호를 받은 브라우저가 현재 페이지를 자동으로 새로고침.
DevTools는 소스코드(.java)가 아닌 컴파일된 코드(.class)의 변경을 감지함. 따라서 소스코드 저장 시 IDE가 자동으로 컴파일을 해줘야 함.
Settings > Build, Execution, Deployment > Compiler > Build project automatically 체크.Ctrl+Shift+A > Registry... 검색 및 실행 > compiler.automake.allow.when.app.running 항목 체크.<dependencies>
<!-- ... other dependencies -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope> <!-- 런타임 시에만 필요 -->
<optional>true</optional> <!-- 이 프로젝트를 의존하는 다른 프로젝트에 전파되지 않음 -->
</dependency>
</dependencies>
dependencies {
// ... other dependencies
developmentOnly("org.springframework.boot:spring-boot-devtools") // 개발 시에만 포함, 프로덕션 빌드에서 제외
}
application.yml)특정 파일 변경 시 재시작이나 LiveReload가 동작하지 않도록 제외할 수 있음.
spring:
devtools:
# LiveReload 기능 비활성화 (필요시)
livereload:
enabled: false
# 자동 재시작 기능 비활성화 (필요시)
restart:
enabled: false
# 아래 경로의 파일이 변경되어도 서버를 재시작하지 않음
# 정적 리소스나 템플릿 변경 시에는 불필요한 재시작을 막아 효율을 높임
exclude: "static/**, public/**, templates/**"
| 구분 | DevTools Restart | JVM HotSwap (e.g., JRebel) |
|---|---|---|
| 원리 | 클래스로더 교체 | 바이트코드 직접 수정 |
| 속도 | 빠름 (초 단위) | 거의 즉시 (ms 단위) |
| 변경 범위 | 대부분 가능하나, 구조적 변경 시 제한적 | 제약 거의 없음 |
| 비용 | 무료 | 유료 (상용 솔루션) |
Remote DevTools
* 원격 서버에서 실행 중인 애플리케이션에 DevTools를 연결하여, 로컬에서 코드를 변경하면 원격 서버가 자동으로 재시작되도록 설정할 수 있음. 스테이징 환경 등에서 빠른 테스트에 유용함.
https://docs.spring.io/spring-boot/reference/using/devtools.html#using.devtools.remote-applications
Spring Boot Actuator와 함께 사용하기
/actuator/health, /actuator/beans 등의 엔드포인트를 통해 애플리케이션 내부 상태를 손쉽게 확인할 수 있어 시너지가 좋음.