> Java > java지도 시간 > Java 모듈 출시: 매우 안전하고 초고속 앱 뒤에 숨은 비밀 무기

Java 모듈 출시: 매우 안전하고 초고속 앱 뒤에 숨은 비밀 무기

Mary-Kate Olsen
풀어 주다: 2024-11-24 19:36:41
원래의
547명이 탐색했습니다.

Java Modules Unleashed: The Secret Weapon Behind Ultra-Secure, Lightning-Fast Apps

JPMS(Java Platform Module System)는 Java 플랫폼 출시 이후 가장 중요한 아키텍처 변경 사항 중 하나입니다. Java 애플리케이션을 광범위하게 사용해 본 사람으로서 저는 이 강력한 기능이 코드를 구성하고 구성하는 방식을 어떻게 변화시켰는지 직접 보았습니다.

JPMS 이해

Java 9에 도입된 모듈 시스템은 패키지보다 더 높은 수준에서 코드를 구성하는 기본적인 방법을 제공합니다. 기본적으로 모듈은 종속성을 명시적으로 선언하고 다른 모듈에서 사용할 수 있게 만드는 독립된 단위입니다[1]. 이는 본질적으로 모든 코드가 다른 모든 코드에 액세스할 수 있었던 전통적인 클래스 경로 기반 접근 방식에서 획기적인 변화였습니다.

기본 모듈 선언부터 시작해 보겠습니다.

module com.myapp.core {
    requires java.base;
    exports com.myapp.core.api;
    provides com.myapp.core.spi.Service with com.myapp.core.impl.ServiceImpl;
}
로그인 후 복사
로그인 후 복사

이 간단한 선언은 모듈 이름 지정, 종속성 선언, 패키지 내보내기[2] 등 여러 주요 개념을 요약합니다. 모듈 시스템은 컴파일 시간과 런타임에 이러한 경계를 적용하여 이전보다 더 강력한 캡슐화를 제공합니다.

모듈형 애플리케이션 구축

모듈식 애플리케이션을 만들 때 구조는 일반적으로 다음과 같습니다.

myapp/
├── src/
│   ├── module-info.java
│   └── com/
│       └── myapp/
│           └── Main.java
└── out/
로그인 후 복사
로그인 후 복사

다음은 간단한 모듈식 애플리케이션의 전체 예입니다.

// module-info.java
module com.myapp {
    requires java.logging;
    exports com.myapp.api;
}

// com/myapp/api/Service.java
package com.myapp.api;

public interface Service {
    String getMessage();
}

// com/myapp/internal/ServiceImpl.java
package com.myapp.internal;

import com.myapp.api.Service;

public class ServiceImpl implements Service {
    public String getMessage() {
        return "Hello from modular service!";
    }
}
로그인 후 복사
로그인 후 복사

강력한 캡슐화

JPMS의 가장 강력한 기능 중 하나는 강력한 캡슐화 메커니즘입니다[4]. 기존의 공개/비공개 액세스 수정자와 달리 모듈 수준 캡슐화는 공개로 표시되어 있어도 내부 구현 세부 정보에 대한 액세스를 방지합니다.

다음 시나리오를 고려해보세요.

module com.myapp.core {
    exports com.myapp.core.api;
    // Internal packages are not exported
    // com.myapp.core.internal remains hidden
}
로그인 후 복사
로그인 후 복사

내부 패키지의 클래스가 공개 클래스라도 명시적으로 내보내지 않는 한 모듈 외부에서 액세스할 수 없습니다[1]. 이는 모듈 이전의 Java에 비해 캡슐화가 크게 향상되었음을 나타냅니다.

종속성 관리

JPMS는 require 지시문을 통해 명시적인 종속성 선언을 도입합니다. 이는 Java 애플리케이션을 자주 괴롭히는 "JAR 지옥" 문제를 방지하는 데 도움이 됩니다[3]. 종속성을 일반적으로 관리하는 방법은 다음과 같습니다.

module com.myapp.service {
    requires com.myapp.core;
    requires java.sql;
    requires transitive com.myapp.common;
}
로그인 후 복사
로그인 후 복사

Requires 전이 지시문은 종속성 전달을 허용하여 이 지시문에 의존하는 모든 모듈에서 필수 모듈을 사용할 수 있도록 한다는 점에서 특히 흥미롭습니다[2].

서비스 로딩

모듈 시스템은 Java의 ServiceLoader 메커니즘과 완벽하게 통합됩니다.

module com.myapp.core {
    uses com.myapp.spi.Plugin;
}

module com.myapp.plugin {
    provides com.myapp.spi.Plugin with com.myapp.plugin.impl.PluginImpl;
}
로그인 후 복사

이를 통해 서비스 인터페이스와 구현이 명확하게 분리되어 진정한 플러그인 아키텍처가 가능해집니다[8].

마이그레이션 과제

기존 애플리케이션을 JPMS로 이동하는 것은 어려울 수 있습니다. 가장 일반적인 문제는 다음과 같습니다.

module com.myapp.core {
    requires java.base;
    exports com.myapp.core.api;
    provides com.myapp.core.spi.Service with com.myapp.core.impl.ServiceImpl;
}
로그인 후 복사
로그인 후 복사

마이그레이션을 돕기 위해 Java는 --add-exports 및 --add-opens 명령줄 옵션을 제공합니다[5]:

myapp/
├── src/
│   ├── module-info.java
│   └── com/
│       └── myapp/
│           └── Main.java
└── out/
로그인 후 복사
로그인 후 복사

성능상의 이점

모듈 시스템은 다음을 통해 더 나은 런타임 최적화를 가능하게 합니다.

  • 컴파일 시간 종속성 확인
  • 향상된 클래스 로딩
  • 사용자 정의 런타임 이미지를 통해 런타임 공간 감소[7]

jlink를 사용하여 사용자 정의 런타임 이미지를 만들 수 있습니다.

// module-info.java
module com.myapp {
    requires java.logging;
    exports com.myapp.api;
}

// com/myapp/api/Service.java
package com.myapp.api;

public interface Service {
    String getMessage();
}

// com/myapp/internal/ServiceImpl.java
package com.myapp.internal;

import com.myapp.api.Service;

public class ServiceImpl implements Service {
    public String getMessage() {
        return "Hello from modular service!";
    }
}
로그인 후 복사
로그인 후 복사

모듈형 애플리케이션 테스트

테스트에는 특별한 고려가 필요합니다. 일반적인 테스트 모듈 설정은 다음과 같습니다.

module com.myapp.core {
    exports com.myapp.core.api;
    // Internal packages are not exported
    // com.myapp.core.internal remains hidden
}
로그인 후 복사
로그인 후 복사

많은 빌드 도구가 모듈식 애플리케이션 테스트를 위한 특정 지원을 제공합니다. 예를 들어 Maven은 적절한 구성과 함께 maven-surefire-plugin을 사용합니다[8].

실제 구현

모듈형 애플리케이션의 더 완전한 예를 살펴보겠습니다.

module com.myapp.service {
    requires com.myapp.core;
    requires java.sql;
    requires transitive com.myapp.common;
}
로그인 후 복사
로그인 후 복사

이 구조는 강력한 캡슐화와 명시적인 종속성을 유지하면서 문제를 깔끔하게 분리합니다[11].

모듈 시스템은 Java 애플리케이션 구조화에 대한 우리의 생각을 근본적으로 바꿔 놓았습니다. 특히 기존 애플리케이션의 경우 전환이 어려울 수 있지만 유지 관리성, 보안 및 성능 측면에서 이점이 있으므로 전환할 가치가 있습니다. 생태계가 계속 성숙해짐에 따라 더 많은 라이브러리와 프레임워크에서 JPMS를 채택하여 진정한 모듈식 애플리케이션을 더 쉽게 구축할 수 있게 되었습니다.

Java 개발의 미래는 모듈식이며 JPMS를 마스터하는 것이 Java 개발자에게 점점 더 중요해지고 있습니다. 새 프로젝트를 시작하든 기존 프로젝트를 유지 관리하든 이러한 개념을 이해하면 더욱 강력하고 유지 관리 가능한 애플리케이션을 구축하는 데 도움이 됩니다.


테크 코알라 인사이트?

더 많은 통찰력과 이야기를 보려면 https://techkoalainsights.com/을 방문하세요

박수를 누르고 저를 팔로우하고 TechKoala Insights 더 많은 이야기를 보려면

인베스터 센트럴 |스마트 리빙 |
시대와 메아리 |
수수께끼의 미스터리 |
힌두트바 |
엘리트 개발자 |
JS 학교

위 내용은 Java 모듈 출시: 매우 안전하고 초고속 앱 뒤에 숨은 비밀 무기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿