Pichu Pokeball
본문 바로가기
IntelliJ

핫스왑 추가 설명

by campanula 2025. 2. 28.

🔥 핫스왑이 적용되지 않을 때 해결 방법

  1. 디버그 모드로 실행했는지 확인
    • 핫스왑은 Debug 모드에서만 동작합니다.
    • Run이 아닌 Debug 실행 (Shift + F9) 으로 실행하세요.
  2. JVM 옵션 확인
    • Help > Edit Custom VM Options에서 -XX:+AllowEnhancedClassRedefinition 옵션이 포함되었는지 확인
    • 없으면 추가 후 IDE 재시작
  3. Spring Boot DevTools와 충돌 확인
    • spring-boot-devtools를 사용하면 자동으로 앱을 재시작하는 기능이 활성화됩니다.
    • spring.devtools.restart.enabled=false로 설정하면 핫스왑과 DevTools가 잘 동작합니다.

Tomcat 핫스왑 적용 방식 정리

Q1. 디버그 모드에서 실행하다가 수정하면 새로고침하면 바로 적용되나요?
A. 네, 바로 적용됩니다!

  • 단, 핫스왑이 지원하는 Java 코드 수정 범위 내에서만 적용됩니다.
  • JSP, HTML, CSS, JS 파일 수정 시에는 브라우저 새로고침(F5)만 해도 반영됩니다.
  • 클래스 메서드 내부 로직 변경은 핫스왑 적용됨 ✅
  • 새로운 메서드, 필드 추가 또는 인터페이스 변경 시 핫스왑이 적용되지 않아 서버 재시작 필요

Q2. 자동으로 계속 빌드되나요? 아니면 수정할 때만 빌드되나요?
A. 수정할 때만 빌드됩니다.

  • Build project automatically를 켜면 코드 수정 후 IDE가 일정 시간 후 자동 빌드
  • 기본적으로 약 3초~5초 후 빌드가 실행됨
  • 빌드 타이밍을 수동으로 조정하려면 Ctrl + Shift + F9 (Mac: Cmd + Shift + F9)를 눌러 강제 빌드 가능

Q3. 수정하고 빌드하는 시간이 필요한가요?
A. 네, 하지만 대부분 빠르게 적용됩니다!

  • 빌드하는 시간은 프로젝트 크기와 변경된 코드 양에 따라 다름
  • 간단한 수정 (메서드 내부 변경) → 1~2초 내 반영
  • 복잡한 변경 (클래스 추가, 필드 변경 등) → 핫스왑 불가능, 서버 재시작 필요

핫스왑이 제대로 동작하는 경우:

  1. Tomcat을 디버그 모드(Shift + F9)로 실행
  2. Ctrl + Shift + F9 또는 자동 빌드로 클래스 변경 사항 적용
  3. 브라우저 새로고침(F5) → 변경 사항 즉시 반영됨

핫스왑이 적용되지 않는 경우:

  • 새로운 메서드, 필드, 인터페이스 변경 시 핫스왑 불가능 → 서버 재시작 필요
  • Build Automatically가 꺼져 있으면 수동으로 빌드 필요
  • 일반 실행(Run Mode)으로 실행했을 경우 핫스왑 미적용됨

🚀 핫스왑을 최적화하는 추가 팁

1. 빌드 타이밍을 조절하고 싶다면?

  • Registry 설정에서 compiler.automake.allow.when.app.running 활성화
    • Ctrl + Shift + A (Mac: Cmd + Shift + A) → "Registry" 검색
    • compiler.automake.allow.when.app.running 체크 ☑

2. 빌드 속도를 더 빠르게 하려면?

  • File > Settings > Compiler > Build process heap size 값을 기본 700MB → 2048MB로 증가
  • Gradle/Maven 캐시 정리 (Invalidate Caches & Restart)

 

Build Process Heap Size를 늘리면 어떤 일이 일어날까?

1. 빌드 속도 향상

  • IntelliJ IDEA가 빌드를 실행할 때, 빌드 과정에서 사용하는 메모리(RAM) 크기를 늘려줌
  • 빌드 과정에서 많은 클래스를 컴파일할 때, 메모리 부족 문제를 방지하고 병렬 처리를 더 원활하게 수행
  • 특히 대형 프로젝트에서는 빌드 시간이 단축됨

2. GC(가비지 컬렉션) 감소

  • Heap Size가 작으면, 빌드 중 메모리가 부족할 때마다 불필요한 GC(가비지 컬렉션) 이 발생하여 빌드 시간이 지연됨
  • Heap Size를 늘리면, 불필요한 GC 실행 횟수가 줄어들어 빌드가 더 빠르게 진행

3. Gradle/Maven 빌드 최적화

  • Gradle이나 Maven을 사용하는 프로젝트에서는 빌드 중 캐싱, 의존성 확인, 테스트 실행 등에서 더 많은 메모리를 사용할 수 있어 속도가 향상됨

Heap Size를 마음대로 늘려도 괜찮을까?

Heap Size를 너무 크게 설정하면 IDE 전체 성능이 저하될 수 있음!
💡 적절한 메모리 설정이 중요함

💾 권장 설정 (RAM 용량에 따라 조정)

시스템 RAMBuild Process Heap Size 추천값

8GB 1024MB ~ 2048MB
16GB 2048MB ~ 4096MB
32GB 이상 4096MB ~ 8192MB

설정 방법:

  1. File > Settings > Build, Execution, Deployment > Compiler 이동
  2. Build process heap size (Mbytes) 값을 기본 700MB → 2048MB 이상으로 변경
  3. Apply 후 IntelliJ 재시작

💡 Tip:

  • 8GB RAM 이하에서는 2048MB 이상으로 설정하면 IDE 전체 속도가 느려질 수 있음
  • 16GB 이상 RAM을 사용한다면 4096MB까지 설정 가능
  • 너무 크게 설정하면 오히려 메모리를 낭비하게 됨 → 적절한 테스트 후 최적값을 찾는 것이 중요!

🚀 추가적인 빌드 속도 최적화 방법

1️⃣ Gradle/Maven 빌드 속도 최적화

  • Gradle 사용 시 gradle.properties에 다음 설정 추가
    properties
    복사편집
    org.gradle.daemon=true org.gradle.parallel=true org.gradle.configureondemand=true
  • Maven 사용 시 pom.xml에 아래 속성 추가
    xml
    복사편집
    <configuration> <fork>true</fork> <argLine>-Xmx2048m</argLine> </configuration>

2️⃣ 불필요한 인덱싱(Indexing) 줄이기

  • Help > Change Memory Settings에서 IDE Heap Size도 조정 (예: 2048MB → 4096MB)
  • File > Settings > Editor > General > Auto Import에서 "Optimize imports on the fly" 비활성화

3️⃣ "Registry" 설정 최적화

  • Ctrl + Shift + A (Mac: Cmd + Shift + A) → "Registry" 검색
  • compiler.automake.allow.when.app.running 체크 ☑
    자동 빌드를 실행 중에도 수행할 수 있도록 설정