*.java 컴파일과 WAS 재기동, 그리고 핫스왑 기술 상세 설명
**1. .java 파일 컴파일 (Compile) => .class
컴파일이란?
사람이 이해하기 쉬운 고급 프로그래밍 언어 (여기서는 Java)로 작성된 소스 코드 (.java 파일)를 컴퓨터가 직접 실행할 수 있는 기계어 형태의 파일 (.class 파일, 바이트코드)로 변환하는 과정입니다.
Java 컴파일러 (javac)가 이 역할을 수행합니다.
*.class 파일 (바이트코드)
*.class 파일은 특정 운영체제에 종속되지 않는 중간 형태의 코드입니다. JVM (Java Virtual Machine)이라는 가상 머신 위에서 실행됩니다.
Java의 "Write Once, Run Anywhere" (한 번 작성하면 어디서든 실행) 철학을 가능하게 하는 핵심 요소입니다.
*2. WAS (Web Application Server)와 .class 파일 변경 시 재기동
WAS의 역할:
WAS는 웹 애플리케이션을 실행하고 관리하는 서버입니다. 웹 요청을 처리하고, 데이터베이스와 연동하며, 비즈니스 로직을 수행하는 등 웹 서비스 제공에 필요한 다양한 기능을 제공합니다.
Tomcat, Jetty, JBoss, WebSphere, WebLogic 등이 대표적인 WAS입니다.
*.class 파일 변경과 재기동:
WAS는 웹 애플리케이션을 실행하기 위해 *.class 파일을 로드합니다.
일반적으로 WAS는 *.class 파일이 변경되면 변경 사항을 반영하기 위해 서버를 재기동해야 합니다. 이는 WAS가 실행 중인 애플리케이션의 코드를 변경하는 것이 어렵기 때문입니다.
재기동은 WAS가 메모리에서 기존 애플리케이션을 내리고, 변경된 *.class 파일을 포함한 새로운 애플리케이션을 다시 로드하는 과정을 의미합니다.
문제점: 재기동하는 동안 서비스가 중단되어 사용자에게 불편을 초래하고, 운영 환경에서 가동 중단 시간을 최소화해야 하는 경우 큰 문제가 될 수 있습니다.
3. Tomcat의 Auto Reload 기능
Auto Reload 기능이란?
Tomcat은 개발 편의성을 위해 Auto Reload 기능을 제공합니다. 이 기능을 활성화하면 Tomcat은 주기적으로 *.class 파일의 변경 여부를 감지하고, 변경 사항이 있을 경우 자동으로 애플리케이션을 재시작합니다.
장점:
개발자가 코드를 수정하고 저장할 때마다 수동으로 서버를 재시작할 필요가 없어 개발 생산성을 향상시킬 수 있습니다.
단점:
Auto Reload 역시 내부적으로 재기동을 수행하므로, 짧은 시간 동안 서비스 중단이 발생합니다.
세션이 끊어지지는 않지만, 재시작 동안 요청 처리 지연이 발생할 수 있습니다. 사용자는 짧은 멈춤 현상이나 약간의 응답 시간 지연을 경험할 수 있습니다.
운영 환경에서는 서비스 중단 가능성 때문에 Auto Reload 기능을 비활성화하는 것이 일반적입니다.
4. 핫스왑 (Hot Swap) 기술: JRebel, DCEVM, Spring Loaded
핫스왑이란?
핫스왑 (Hot Swap)은 WAS를 재기동하지 않고도 실행 중인 애플리케이션의 코드를 즉시 변경하는 기술입니다.
이를 통해 개발자는 코드 변경 사항을 즉시 확인하고 테스트할 수 있으며, 운영 환경에서는 서비스 중단 없이 업데이트를 적용할 수 있습니다.
원리:
핫스왑 기술은 JVM의 클래스 로더 기능을 활용하여 변경된 *.class 파일만 동적으로 로드합니다.
JVM의 일부 기능을 변경하거나, 별도의 에이전트를 사용하여 클래스 로딩 과정을 제어합니다.
종류:
JRebel (상용 소프트웨어):
가장 강력하고 안정적인 핫스왑 솔루션 중 하나입니다.
다양한 IDE (Eclipse, IntelliJ IDEA 등)와 WAS를 지원합니다.
복잡한 애플리케이션 구조에서도 높은 성공률을 보장합니다.
하지만 상용 소프트웨어이므로 라이선스 비용이 발생합니다.
DCEVM (무료):
Dynamic Code Evolution VM의 약자로, OpenJDK 기반의 JVM을 수정하여 핫스왑 기능을 제공합니다.
JVM 자체를 변경하므로 JRebel만큼 강력한 핫스왑 기능을 제공합니다.
무료로 사용할 수 있지만, JVM을 직접 수정해야 하므로 설치 및 설정 과정이 다소 복잡할 수 있습니다.
최신 버전의 JDK를 지원하지 않을 수 있습니다.
Spring Loaded (무료):
Spring Framework 개발팀에서 만든 핫스왑 에이전트입니다.
Spring 기반 애플리케이션에 특화되어 있으며, 간단한 설정으로 핫스왑 기능을 활성화할 수 있습니다.
DCEVM보다는 기능이 제한적일 수 있지만, Spring 개발자에게는 간편한 대안이 될 수 있습니다.
더 이상 활발하게 관리되지는 않지만, 여전히 사용 가능한 옵션입니다.
결론
*.java 파일을 컴파일하여 생성된 *.class 파일은 WAS에서 실행됩니다. 코드 변경 시 WAS를 재기동해야 하는 불편함을 해소하기 위해 Tomcat의 Auto Reload 기능이나 핫스왑 기술 (JRebel, DCEVM, Spring Loaded)을 사용할 수 있습니다. 각 기술은 장단점이 있으므로, 개발 환경과 요구 사항에 맞는 적절한 솔루션을 선택하는 것이 중요합니다.