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