제목은 뭔가 복잡해 보이지만 사실 매우 간단한 내용이다.
지금 하고 있는 프로젝트가 있는데 동기와 같이 FastAPI를 통한 간단한 웹 페이지를 구현해보았다.
FastAPI에서는 uvicorn이라는 ASGI 서버를 사용하여 애플리케이션을 실행할 수 있었다.
--reload 옵션을 사용하여 소스 코드 변경을 감지하고 자동으로 서버를 재시작하는 기능을 제공하는 것이다.
개발 중에 코드 변경 사항을 빠르게 반영할 수 있게 해주어 개발자의 생산성을 높이는 데 도움이 되는 기능이었다.
핫 리로드란?
핫 리로드 또는 핫 모듈 리플레이스먼트(HMR)은 개발 도중 애플리케이션의 상태를 유지하면서 코드 변경 사항을 즉시 반영하는 기능이다.
주로 웹 개발, 모바일 웹 개발, 게임 개발 등에서 사용이 되고 개발자의 생산성을 크게 향상시켜주는 개념이다.
몇 가지 특징을 나열해보겠다.
1. 즉시 반영:
- 코드 변경 사항을 저장하면 애플리케이션을 다시 시작하거나 페이지를 새로 고침하지 않아도 즉시 반영된다.
2. 상태 유지:
- 애플리케이션의 현재 상태(ex. 입력된 데이터나 세션 상태 등)를 유지하면서 코드 변경 사항을 적용할 수 있다.
- 전체 애플리케이션을 다시 로드할 때 발생하는 상태 손실 방지 목적이다.
3. 개발 속도 향상:
- 개발자가 코드 변경 후 결과를 즉시 확인할 수 있어 피드백이 빨라진다. 디버깅과 기능 개발 시간을 단축할 수 있다.
결과적으로 개발자의 생산성과 효율성을 향상시키는 기능이라는 것이다.
Spring Boot의 핫 리로드
Spring Boot는 핫 리로드 기능을 위해 spring-boot-devtools 라이브러리를 제공한다.
이 라이브러리를 추가하고 html 파일을 컴파일하기만 하면 서버를 재시작할 필요 없이 View 파일의 변경이 가능한 것이다.
spring-boot-devtools의 주요 기능은 다음과 같다.
1. 자동 재시작 (Automatic Restart)
- 클래스 경로에 있는 파일이 변경될 때 애플리케이션을 자동으로 다시 시작한다.
2. 라이브 리로드 (Live Reload)
- LiveReload 서버를 포함하고 있기 때문에 브라우저에 LiveReload 플러그인을 설치하면 페이지 새로 고침 없이 변경 사항이 바로 반영된다.
3. 캐시 비활성화 (Cache Disable)
- 개발 모드에서 일부 캐싱 기능을 비활성화하여 변경 사항이 즉시 반영되도록 한다. (ex. Thymeleaf 템플릿 엔진의 템플릿 캐시가 비활성)
4. H2 콘솔 자동 구성
- H2 DB콘솔을 자동으로 구성하여 쉽게 접근할 수 있도록 한다.
5. 구성 속성 (Configuration Properties)
- 개발 환경에 맞춘 추가적인 속성을 제공한다.(ex. 빠른 테스트를 위해 이메일 전송 비활성화)
6. 조건부 로드 (Conditional Loading)
- spring-boot-devtools는 개발 환경에서만 활성화되고 프로덕션 환경에서는 비활성화된다.
7. 글로벌 설정 파일 (Global Settings)
- ~/.spring-boot-devtools.properties 파일을 통해서 전역 설정을 정의할 수 있다.
8. JMX 리스타트 (JMX Restart Endpoint)
- JMX 엔드포인트를 통해 애플리케이션을 원격으로 다시 시작할 수 있다.
9. 빠른 재시작을 위한 클래스 로더( Class Loader )
- 애플리케이션을 더 빠르게 다시 시작하기 위해 두 개의 클래스 로더를 사용한다.
- 하나는 변경되지 않는 라이브러리와 프레임워크를 로드하고 다른 하나는 애플리케이션의 변경 가능한 부분을 로드한다.
Devtools 설정 방법
1. dependency에 Devtools를 추가한다.(gradle 사용)

2. Settings -> Advanced Settings 설정
인텔리제이 설정으로 들어가고 고급 설정에서 [개발된 애플리케이션이 현재 실행 중인 경우에도 auto-make가 시작되도록 허용]을 누른다

3. Settings -> Build, Execution, Deployment -> Compiler 설정
인텔리제이 설정으로 들어가서 빌드 실행 배포 파트의 컴파일러에 들어간다.
프로젝트 자동 빌드를 체크해주어야 한다.

이제 프로젝트 재시작을 하면 수정 사항이 브라우저에 바로 반영된다. ex) html 파일 변경
'Backend > Spring Boot' 카테고리의 다른 글
lombok이란? (1) | 2024.09.03 |
---|---|
MVC 패턴 (63) | 2024.08.18 |
Maven과 Gradle (18) | 2024.06.19 |
스프링부트와 aws 활용한 게시판 구축과 배포 -2 (28) | 2024.05.29 |
스프링부트와 aws 활용한 게시판 구축과 배포 -1 (61) | 2024.05.27 |