JLink란 무엇인가?
Java 9에 도입된 JLink의 핵심 목적은 개발자가 직접 커스텀 JRE(Customized JRE)를 생성할 수 있도록 하는 것입니다. 일반적으로 우리는 Oracle Corporation이 제공하는 기본 JRE(약 214MB)를 사용해 프로그램을 실행합니다.
하지만 잠시 생각해 볼 필요가 있습니다. 아래와 같이 간단한 "Hello World" 메시지를 출력하는 프로그램을 실행한다고 가정해 보겠습니다.
public class HelloWorldModuleTest {
public static void main(String args[]) {
System.out.println("Hello World!");
}
}왜 커스텀 JRE가 필요한가?
위 프로그램은 겨우 1KB 크기에 불과하며, 실행하는 데 실제로 필요한 클래스는 String, System, Object, 그리고 HelloWorldModuleTest.class 파일 등 4~5개 정도입니다. 그런데도 기본 JRE 전체인 214MB를 로드해야 할까요?
이는 명백한 메모리 낭비이며, 특히 수백 MB의 메모리를 감당할 수 없는 IoT 디바이스에는 전혀 적합하지 않습니다. 이러한 문제를 해결하기 위해 JLink를 사용해 필요한 모듈만 포함된 경량화된 커스텀 JRE를 만들 수 있습니다.
JLink 명령어 사용 방법
아래 명령어를 통해 자신만의 커스텀 JRE를 생성할 수 있습니다.
jlink --module-path out --add-modules {모듈명} --output {JRE 이름}- --module-path: 모듈이 위치한 경로를 지정합니다.
- --add-modules: 커스텀 JRE에 포함할 모듈을 추가합니다.
- --output: 생성될 커스텀 JRE의 이름과 위치를 지정합니다.
JLink의 주요 기능
1. JPMS 기반의 강력한 모듈 시스템
JLink는 JPMS(Java Platform Module System)를 기반으로 구현된 강력한 기능으로, 불필요한 모듈을 제거하여 JRE 크기를 획기적으로 줄일 수 있습니다.
2. 압축(Compress) 기능
JLink는 압축(Compress) 개념을 제공합니다. JLink 명령어 실행 시 압축 레벨(compress level)을 지정하면, 생성되는 커스텀 JRE의 용량을 더욱 줄일 수 있습니다.
3. 런처(Launcher) 옵션
JLink는 Launcher 옵션도 제공합니다. 이 기능을 활용하면 java나 javac 명령어를 명시하지 않고도 커맨드라인 프롬프트에서 프로그램 이름만 호출하여 어디서든 손쉽게 프로그램을 실행할 수 있습니다.
결론
JLink는 Java 9의 모듈 시스템과 결합하여 배포 패키지의 크기를 최소화할 수 있는 필수 도구입니다. 특히 클라우드 환경이나 리소스가 제한적인 IoT 기기에 Java 애플리케이션을 배포할 때, 커스텀 JRE를 활용하면 메모리 사용량과 배포 시간을 크게 절감할 수 있습니다.