[java] Jigsaw에서의 라이브러리 및 외부 종속성 관리
Java 9부터 도입된 Jigsaw를 사용하면 모듈 시스템을 활용하여 애플리케이션을 구성할 수 있습니다. 이 모듈 시스템은 라이브러리 및 외부 종속성을 관리하는 데에도 유용하게 사용될 수 있습니다.
모듈 및 종속성 정의
Jigsaw에서는 모듈 단위로 코드를 구성하며, 각 모듈은 자체적으로 종속성을 가질 수 있습니다.
모듈을 정의하기 위해 다음과 같은 선언을 사용합니다.
module com.example.myapp {
requires transitive com.example.library;
requires java.sql;
exports com.example.myapp;
}
module
키워드를 사용하여 모듈을 선언합니다.requires
키워드를 사용하여 종속성을 선언합니다.transitive
키워드를 사용하여 종속성 전파를 설정합니다.exports
키워드를 사용하여 모듈의 공개 API를 정의합니다.
모듈 경로 설정
외부의 라이브러리나 모듈을 사용하기 위해서는 모듈 경로를 설정해야 합니다. 모듈 경로를 설정하는 방법은 다음과 같습니다.
java --module-path <module_path> --module <module_name>/<main_class>
<module_path>
에는 모듈과 종속성이 위치한 디렉토리 또는 JAR 파일의 경로를 지정합니다.<module_name>
에는 실행할 모듈의 이름을 입력합니다.<main_class>
에는 애플리케이션의 메인 클래스를 지정합니다.
런타임 모듈 해결
Jigsaw의 모듈 시스템은 런타임에 모듈과 종속성을 해결합니다. 다음과 같은 방법으로 모듈의 종속성을 해결할 수 있습니다.
1. 모듈 패치
Java 9부터는 모듈 패치를 통해 라이브러리나 모듈의 종속성을 해결할 수 있습니다. 모듈 패치를 사용하면 모듈 경로에 있는 것과 동일한 모듈을 패치된 모듈로 대체할 수 있습니다.
java --patch-module <module_name>=<module_path> --module <main_module>/<main_class>
2. 모듈 경로 설정
모듈 경로에 직접 라이브러리나 모듈을 추가하여 종속성을 해결할 수도 있습니다.
java --module-path <module_path> --module <main_module>/<main_class>
정리
Jigsaw를 사용하여 Java 애플리케이션을 개발할 때 라이브러리 및 외부 종속성을 관리하는 것은 매우 중요합니다. 모듈 시스템을 활용하여 명확하게 모듈과 종속성을 정의하고 해결할 수 있습니다. 이를 통해 코드의 격리성을 높이고 의존성 충돌을 피할 수 있습니다.
참고 자료
- Java 9: Modular JDK{target=_blank}
- Introduction to Jigsaw (Java 9 modules){target=_blank}