3.4 KiB
3.4 KiB
🚀 Spring Legacy (Non-Boot) 핫스왑 환경 구축 가이드
본 가이드는 폐쇄망(Air-gapped) 환경에서 JRebel 대안으로 **JetBrains Runtime(JBR)**과 HotswapAgent를 사용하여, 서버 재시작 없이 Java 코드를 즉시 반영하는 방법을 설명합니다.
1. 외부망 준비물 (반입 리스트)
폐쇄망으로 반입해야 할 필수 파일입니다.
| 항목 | 용도 | 다운로드 링크 (예시) |
|---|---|---|
| JBR (JetBrains Runtime) | DCEVM이 내장된 JDK | JBR GitHub Releases |
| HotswapAgent.jar | Spring Bean 설정 갱신용 | HotswapAgent Releases |
주의: JBR 버전은 프로젝트의 Java 버전(8, 11, 17 등)과 일치시켜 다운로드하세요.
2. IDE(IntelliJ / Eclipse) 환경 설정
2.1 JDK(JBR) 등록
- 반입한 JBR 압축을 풉니다 (예:
C:\dev\jbr). - IntelliJ:
Project Structure>SDKs>Add JDK후 해당 경로 지정. - Eclipse:
Preferences>Java>Installed JREs>Add후 해당 경로 지정.
2.2 VM 옵션 추가
서버(Tomcat 등)의 실행 구성(Run/Debug Configuration)에 아래의 VM Options를 추가합니다.
# 클래스 구조 변경(필드/메서드 추가) 허용
-XX:+AllowEnhancedClassRedefinition
# Spring Bean 설정 및 리소스 실시간 반영 (경로 주의)
-javaagent:C:\path\to\hotswap-agent.jar
-XX:HotswapAgent=fatjar
-Dhotswap.agent.disablePlugin=org.hotswap.agent.plugin.ibatis.IBatisPlugin,org.hotswap.agent.plugin.mybatis.MyBatisPlugin
3. IDE별 세부 최적화 설정
IntelliJ IDEA
- 컴파일러 설정:
Settings>Build, Execution, Deployment>Compiler- Build project automatically 체크
- 고급 설정:
Settings>Advanced Settings- Allow auto-make to start even if developed application is currently running 체크
- 업데이트 정책:
- Tomcat 설정 내
On 'Update' action및On frame deactivation을 Update classes and resources로 변경.
- Tomcat 설정 내
Eclipse
- Auto Build:
Project>Build Automatically체크 확인. - Debug 모드: 반드시 Debug 모드로 서버를 실행해야 핫스왑이 작동합니다.
4. 실제 개발 워크플로우
- 서버 실행: 반드시 Debug 모드로 실행합니다.
- 코드 수정: 메서드 로직, 필드 추가, 새로운
@Service생성 등을 수행합니다. - 반영 (Compile):
- IntelliJ:
Ctrl + Shift + F9(현재 파일 재컴파일) 또는Ctrl + F9(전체 빌드). - Eclipse: 저장(
Ctrl + S) 시 자동 컴파일 및 반영.
- IntelliJ:
- 확인: 서버 재시작 없이 브라우저에서 새로고침하여 결과를 확인합니다.
5. 주요 주의사항 (Troubleshooting)
- 상속 구조 변경: 클래스의 부모를 바꾸거나 인터페이스를 변경하는 수준의 큰 수정은 서버 재시작이 필요할 수 있습니다.
- 정적 변수(Static):
static필드의 초기값 변경은 핫스왑 후에도 이전 값이 유지될 수 있습니다. - 폐쇄망 라이브러리:
hotswap-agent.jar외에 특정 프레임워크(예: MyBatis, Hibernate) 전용 플러그인이 필요한 경우, HotswapAgent 설정 파일(hotswap-agent.properties)을 통해 제어할 수 있습니다.