[java] Jigsaw 모듈을 활용한 다양한 애플리케이션 아키텍처 구현 방법

이번 글에서는 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

위 예시는 module1module2라는 모듈들로 구성된 애플리케이션을 빌드하는 예시입니다. --module-path 옵션을 사용하여 모듈의 위치를 지정하고, --add-modules 옵션을 사용하여 애플리케이션에 포함할 모듈들을 명시합니다. --output 옵션을 사용하여 빌드된 애플리케이션의 결과물을 출력할 디렉토리를 지정합니다.

결론

Jigsaw 모듈 시스템을 활용하면 애플리케이션을 모듈로 분리하여 개발하고 관리할 수 있습니다. 모듈 간의 의존성을 명확하게 정의하여 컴파일 시에 오류를 방지할 수 있으며, jlink 명령어를 사용하여 최소한의 런타임을 생성하여 애플리케이션을 빌드할 수 있습니다.

더 자세한 내용은 Oracle Java Documentation을 참조하세요.