Files
eapim-admin/kjb-docs/jbr.md
T
2025-12-16 19:37:04 +09:00

3.3 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) 등록

  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를 추가합니다.

# 클래스 구조 변경(필드/메서드 추가) 허용
-XX:+AllowEnhancedClassRedefinition

# Spring Bean 설정 및 리소스 실시간 반영 (경로 주의)
-javaagent:C:\path\to\hotswap-agent.jar

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' actionOn frame deactivationUpdate 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)을 통해 제어할 수 있습니다.