업스트림 및 외부 연결에서 Maven 패키지 요청 - CodeArtifact

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

업스트림 및 외부 연결에서 Maven 패키지 요청

표준 자산 이름 가져오기

Maven Central과 같은 퍼블릭 리포지토리에서 Maven 패키지 버전을 가져올 때 AWS CodeArtifact는 해당 패키지 버전의 모든 자산을 가져오려고 시도합니다. 업스트림 리포지토리가 포함된 패키지 버전 요청에 설명된 대로 다음과 같은 경우에 가져오기가 실행됩니다.

  • 클라이언트는 CodeArtifact 리포지토리에서 Maven 자산을 요청합니다.

  • 패키지 버전은 리포지토리 또는 해당 업스트림에 아직 없습니다.

  • 퍼블릭 Maven 리포지토리에 연결할 수 있는 외부 연결이 있습니다.

클라이언트가 하나의 자산만 요청했더라도 CodeArtifact는 해당 패키지 버전에서 찾을 수 있는 모든 자산을 가져오려고 시도합니다. CodeArtifact가 Maven 패키지 버전에 사용할 수 있는 자산을 찾는 방법은 특정 퍼블릭 리포지토리에 따라 달라집니다. 일부 퍼블릭 Maven 리포지토리는 자산 목록 요청을 지원하지만 나머지 리포지토리는 지원하지 않습니다. 자산을 나열하는 방법을 제공하지 않는 리포지토리의 경우, CodeArtifact는 존재할 가능성이 있는 자산 이름의 세트를 생성합니다. 예를 들어, Maven 패키지 버전 junit 4.13.2의 자산이 요청되면 CodeArtifact는 다음 자산을 가져오려고 시도합니다.

  • junit-4.13.2.pom

  • junit-4.13.2.jar

  • junit-4.13.2-javadoc.jar

  • junit-4.13.2-sources.jar

비표준 자산 이름 가져오기

Maven 클라이언트가 위에서 설명한 패턴 중 하나와 일치하지 않는 자산을 요청하면 CodeArtifact는 해당 자산이 퍼블릭 리포지토리에 있는지 확인합니다. 해당 자산이 있는 경우, 그 자산을 가져와서 기존 패키지 버전 레코드(있는 경우)에 추가합니다. 예를 들어, Maven 패키지 버전 com.android.tools.build:aapt2 7.3.1-8691043에는 다음과 같은 자산이 포함되어 있습니다.

  • aapt2-7.3.1-8691043.pom

  • aapt2-7.3.1-8691043-windows.jar

  • aapt2-7.3.1-8691043-osx.jar

  • aapt2-7.3.1-8691043-linux.jar

클라이언트가 POM 파일을 요청할 때 CodeArtifact가 패키지 버전의 자산을 나열할 수 없는 경우, 가져오기가 완료된 자산은 POM 밖에 없습니다. 이는 다른 어떤 자산도 표준 자산 이름 패턴과 일치하지 않기 때문입니다. 하지만 클라이언트가 JAR 자산 중 하나를 요청하면 해당 자산을 가져와서 CodeArtifact에 저장된 기존 패키지 버전에 추가합니다. 업스트림 리포지토리의 패키지 보존에 설명된 대로 최대 다운스트림 리포지토리(클라이언트가 요청한 리포지토리)와 외부 연결이 연결된 리포지토리의 패키지 버전이 모두 새 자산을 포함하도록 업데이트됩니다.

일반적으로 패키지 버전이 CodeArtifact 리포지토리에 보존되면 업스트림 리포지토리의 변경에 영향을 받지 않습니다. 자세한 내용은 업스트림 리포지토리의 패키지 보존 섹션을 참조하세요. 하지만 앞에서 설명한 비표준 이름을 가진 Maven 자산의 동작은 이 규칙의 예외에 속합니다. 클라이언트가 추가 자산을 요청하지 않으면 다운스트림 패키지 버전이 변경되지 않지만 이 경우 보존된 패키지 버전은 맨 처음 보존된 후에 수정되므로 변경 불가능하지 않습니다. 그렇지 않으면 CodeArtifact를 통해 비표준 이름을 가진 Maven 자산에 액세스할 수 없기 때문에 이 동작이 필요합니다. 이 동작은 패키지 버전이 CodeArtifact 리포지토리에 보존된 후 퍼블릭 리포지토리의 Maven 패키지 버전에 추가된 경우에도 활성화됩니다.

자산 출처 확인

이전에 보존된 Maven 패키지 버전에 새 자산을 추가할 때 CodeArtifact는 보존된 패키지 버전의 원본이 새 자산의 원본과 동일한지 확인합니다. 이렇게 하면 서로 다른 퍼블릭 리포지토리에서 여러 자산이 생성되는 ‘혼합’ 패키지 버전을 만들 수 없습니다. 이 검사를 하지 않으면 Maven 패키지 버전이 둘 이상의 퍼블릭 리포지토리에 게시되고 해당 리포지토리가 CodeArtifact 리포지토리의 업스트림 그래프에 속하는 경우 자산 혼합이 발생할 수 있습니다.

업스트림 리포지토리에서 새 자산 가져오기 및 패키지 버전 상태

업스트림 리포지토리에 있는 패키지 버전의 패키지 버전 상태로 인해 CodeArtifact가 다운스트림 리포지토리에 해당 버전을 보존하지 못할 수 있습니다.

예를 들어, 하나의 도메인에 세 개의 리포지토리 즉, repo-A, repo-B, repo-C가 있는데 여기서 repo-Brepo-A의 업스트림이며 repo-Crepo-B의 업스트림이라고 가정해 보겠습니다.

Maven 패키지 com.android.tools.build:aapt2의 패키지 버전 7.3.1repo-B에 있으며 상태는 Published입니다. 이 버전은 repo-A에 있지 않습니다. 클라이언트가 repo-A를 출처로 한 이 패키지 버전의 자산을 요청하는 경우, 응답은 200(OK)이며 Maven 패키지 버전 7.3.1repo-A에 그대로 유지됩니다. 그러나 repo-B에서 패키지 버전 7.3.1의 상태가 Archived 또는 Disposed인 경우, 404(찾을 수 없음)라는 응답이 표시됩니다. 이 두 상태에서 패키지 버전의 자산은 다운로드할 수 없기 때문입니다.

repo-A, repo-Brepo-C에서 com.android.tools.build:aapt2에 대한 패키지 오리진 제어upstream=BLOCK로 설정하면 패키지 버전 상태와 관계없이 repo-A에서 해당 패키지의 모든 버전에 대한 새 자산을 가져오지 못하게 됩니다.