본문으로 건너뛰기

Dependency Management

Cloud ZCP는 애플리케이션 종속성을 처리하기 위해 Sonatype Nexus을 통합된 리포지토리 관리 도구로 활용합니다. Nexus는 Java 라이브러리(JAR), Node 모듈 및 잠재적으로 다른 아티팩트 유형과 같은 애플리케이션에 필요한 소프트웨어 바이너리를 관리하는 데 중요한 역할을 합니다.

주요 기능은 다음과 같습니다:

  • Proxying Public Repositories: Nexus는 Maven Central, npmjs.org 등과 같은 공용 리포지토리에 대한 로컬 프록시(또는 미러)로 작동할 수 있습니다. 이를 통해 특히 폐쇄망에 있는 개발 및 빌드 환경에서도 외부 디펜던시에 안정적이고 효율적으로 접근할 수 있으며, 다운로드된 아티팩트를 캐싱하여 활용할 수 있습니다.
  • Hosting Internal Libraries: Nexus는 조직이 자체 내부 라이브러리나 공유 구성 요소를 업로드하고 관리할 수 있는 hosted 리포지토리를 제공합니다.
  • Grouping Repositories: 여러 저장소를 하나로 그룹화할 수 있어, 빌드 도구가 여러 소스를 대상으로 순차적으로 검색할 수 있습니다(예: 내부 라이브러리는 호스팅 저장소에서 먼저 확인하고, 외부 라이브러리는 프록시 저장소에서 확인).

Nexus 접근

ZCP 콘솔의 프로젝트 메뉴를 통해 Nexus 인터페이스에 접근할 수 있습니다: Dev Tools > Nexus.

표준 프로젝트 사용자는 일반적으로 Nexus UI에 직접 로그인할 수 있는 계정이 없습니다. 리포지토리를 보는 것은 Browse 메뉴를 통해 가능합니다. 호스팅 리포지토리를 생성하거나 사용자 정의 라이브러리를 업로드하는 작업은 일반적으로 플랫폼 관리자에게 도움을 요청해야 합니다.

Nexus를 탐색할 때 다양한 리포지토리 유형을 만나게 됩니다:

  • proxy: 외부 공용 리포지토리를 미러링합니다. 다운로드된 아티팩트를 캐싱합니다.
  • hosted: 내부에서 개발되거나 업로드된 아티팩트를 저장합니다.
  • group: 여러 프록시 및/또는 호스팅 리포지토리를 단일 접근 지점으로 결합합니다. 라이브러리는 그룹 내에서 정의된 순서에 따라 검색됩니다.

Nexus를 Maven 미러로 사용하기

Maven을 사용하는 Java 프로젝트의 경우, 특히 인터넷에 직접 접근할 수 없는 환경에서는 Nexus를 미러 리포지토리로 구성할 수 있습니다.

  • Configuration File: Maven의 settings.xml 파일을 수정합니다(일반적으로 ~/.m2/settings.xml 또는 Maven 설치 내의 /conf/settings.xml에 위치).
  • Mirror Settings: <mirrors> 섹션 내에 <mirror> 항목을 추가합니다:
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 https://maven.apache.org/xsd/settings-1.0.0.xsd">
...
<mirrors>
<mirror>
<id>modernizationplatform</id> <name>Modernization Platform Nexus</name> <url>NEXUS_REPOSITORY_URL</url> <mirrorOf>*</mirrorOf> </mirror>
</mirrors>
...
</settings>
  • Finding the URL: Nexus UI(Browse 섹션)에서 원하는 리포지토리(일반적으로 공용 리포를 위한 프록시와 잠재적으로 내부 호스팅 리포를 포함하는 group 유형 리포지토리)를 찾아 Copy URL 버튼을 사용하여 올바른 NEXUS_REPOSITORY_URL을 가져옵니다.
  • mirrorOf Setting:
    • *를 사용하면 Maven이 모든 리포지토리 요청을 이 Nexus 미러를 통해 라우팅합니다.
    • 또는 특정 리포지토리 ID(예: central)를 지정하여 pom.xml에 정의된 특정 리포지토리만 미러링할 수 있습니다.
  • IDE Integration: 개발 환경(Eclipse, IntelliJ, VSCode 등)이 이 settings.xml 파일을 사용하도록 구성되어 있는지 확인합니다.

Nexus를 Gradle 프록시로 사용하기

Gradle을 사용하는 프로젝트의 경우, 프로젝트의 build.gradle 파일 내에서 Nexus 접근을 구성합니다.

  • Configuration File: 프로젝트의 build.gradle(또는 build.gradle.kts) 파일을 수정합니다.
  • Repository Settings: repositories { ... } 블록을 조정합니다:
repositories {
// 프록시를 강제하려면 mavenCentral() 또는 jcenter()의 주석을 제거하거나 삭제합니다
// mavenCentral()

maven {
url "NEXUS_REPOSITORY_URL" // Nexus *group* 리포지토리의 URL
}
}
  • Finding the URL: Maven과 마찬가지로 Nexus UI에서 Copy URL 버튼을 사용하여 적절한 group 리포지토리 URL을 찾습니다. mavenCentral()을 Nexus maven 블록으로 교체하여 Gradle이 Nexus를 통해 종속성을 해결하도록 지시합니다.

커스텀 라이브러리 관리 (Hosted Repositories)

Nexus의 hosted 리포지토리는 공용 리포지토리에서 사용할 수 없는 아티팩트를 저장하도록 설계되었습니다. 예를 들어 내부에서 개발된 라이브러리나 특정 버전의 서드파티 라이브러리 등이 있습니다.

빌드에서 구성된 group 리포지토리에 호스팅 리포지토리가 포함되면 빌드 도구가 이러한 내부 라이브러리에 접근할 수 있습니다(settings.xml 또는 build.gradle).

호스팅 리포지토리에 아티팩트를 업로드하려면 일반적으로 Nexus 내에서 관리 권한이 필요합니다. 프로젝트 팀은 일반적으로 이 목적을 위해 플랫폼 관리자와 조정해야 합니다.