이번 글에서는 Java 9에서 도입된 Jigsaw 모듈 시스템을 활용하여 다양한 애플리케이션 아키텍처를 구현하는 방법에 대해 알아보겠습니다. Jigsaw 모듈 시스템은 애플리케이션을 독립적인 모듈로 분리하여 관리하고 의존성을 명확하게 정의할 수 있는 기능을 제공합니다.
모듈 정의하기
Jigsaw 모듈 시스템을 활용하기 위해서는 먼저 모듈을 정의해야 합니다. 모듈은 module-info.java
파일을 통해 정의됩니다. 이 파일은 모듈의 이름, 의존하는 모듈들, 내보내는 패키지 등을 명시하는 역할을 합니다.
module mymodule {
requires othermodule;
exports com.example.mypackage;
}
위 예시는 mymodule
이라는 이름의 모듈을 정의하는 예시입니다. requires
키워드를 사용하여 현재 모듈이 의존하는 다른 모듈을 명시하고, exports
키워드를 사용하여 현재 모듈의 패키지를 외부로 공개합니다.
애플리케이션 모듈화하기
Jigsaw 모듈 시스템의 가장 큰 장점은 애플리케이션을 모듈로 분리하여 개발하고 관리할 수 있다는 점입니다. 애플리케이션은 여러 개의 모듈로 구성될 수 있으며, 각 모듈은 독립적인 기능을 제공합니다.
모듈 간의 의존성은 requires
키워드를 통해 명시할 수 있습니다. 이를 통해 모듈 간의 의존성이 명확하게 정의되어 컴파일 시에 오류를 사전에 방지할 수 있습니다.
모듈화된 애플리케이션 빌드하기
모듈화된 애플리케이션을 빌드하기 위해서는 javac
컴파일러 대신 jlink
명령어를 사용해야 합니다. jlink
명령어를 사용하면 애플리케이션과 해당 모듈들을 묶어 JVM에 필요한 최소한의 런타임을 생성할 수 있습니다.
jlink --module-path modulepath --add-modules module1,module2,... --output outputdir
위 예시는 module1
과 module2
라는 모듈들로 구성된 애플리케이션을 빌드하는 예시입니다. --module-path
옵션을 사용하여 모듈의 위치를 지정하고, --add-modules
옵션을 사용하여 애플리케이션에 포함할 모듈들을 명시합니다. --output
옵션을 사용하여 빌드된 애플리케이션의 결과물을 출력할 디렉토리를 지정합니다.
결론
Jigsaw 모듈 시스템을 활용하면 애플리케이션을 모듈로 분리하여 개발하고 관리할 수 있습니다. 모듈 간의 의존성을 명확하게 정의하여 컴파일 시에 오류를 방지할 수 있으며, jlink
명령어를 사용하여 최소한의 런타임을 생성하여 애플리케이션을 빌드할 수 있습니다.
더 자세한 내용은 Oracle Java Documentation을 참조하세요.