

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

# CodeArtifact에서의 패키지 작업
<a name="packages"></a>

다음 주제에서는 CodeArtifact CLI 및 API를 사용하여 패키지에 대한 작업을 수행하는 방법을 보여줍니다.

**Topics**
+ [패키지 개요](packages-overview.md)
+ [패키지 이름 나열](list-packages.md)
+ [패키지 버전 나열](list-packages-versions.md)
+ [패키지 버전 자산 나열](list-assets.md)
+ [패키지 버전 자산 다운로드](download-assets.md)
+ [리포지토리 간 패키지 복사](copy-package.md)
+ [패키지 또는 패키지 버전 삭제](delete-package.md)
+ [패키지 버전 세부 정보 및 종속성 보기 및 업데이트](describe-package-version.md)
+ [패키지 버전 상태 업데이트](update-package-version-status.md)
+ [패키지 원본 제어 편집](package-origin-controls.md)

# 패키지 개요
<a name="packages-overview"></a>

*패키지*는 종속성을 해결하고 소프트웨어를 설치하는 데 필요한 소프트웨어 및 메타데이터 번들입니다. CodeArtifact에서 패키지는 패키지 이름, [선택적](codeartifact-concepts.md#welcome-concepts-package-namespace) 네임스페이스(예: `@types/node`에 있는 `@types`), 패키지 버전 세트, 패키지 수준 메타데이터(예: npm 태그)로 구성됩니다.

**Contents**
+ [지원되는 패키지 형식](#supported-package-formats)
+ [패키지 게시](#package-publishing)
  + [게시 권한](#package-publishing-permissions)
  + [패키지 자산 덮어쓰기](#package-publishing-overwrite-assets)
  + [프라이빗 패키지 및 퍼블릭 리포지토리](#package-publishing-upstreams-direct)
  + [패치가 적용된 패키지 버전 게시](#package-publishing-patched-versions)
  + [게시를 위한 자산 크기 제한](#package-publishing-asset-size-limits)
  + [게시 지연 시간](#package-publishing-latency)
+ [패키지 버전 상태](#package-version-status)
+ [패키지 이름, 패키지 버전 및 자산 이름 표준화](#package-name-normalization)

## 지원되는 패키지 형식
<a name="supported-package-formats"></a>

AWS CodeArtifact는 [Cargo](using-cargo.md), [generic](using-generic.md), [Maven](using-maven.md), [npm](using-npm.md), [NuGet](using-nuget.md), [PyPI](using-python.md), [Ruby](using-ruby.md), [Swift](using-swift.md) 패키지 형식을 지원합니다.

## 패키지 게시
<a name="package-publishing"></a>

 `npm`,`twine`,`Maven`, `Gradle`, `nuget`, `dotnet` 등의 도구를 사용하여 [지원되는 모든 패키지 형식](#supported-package-formats)의 새 버전을 CodeArtifact 리포지토리에 게시할 수 있습니다.

### 게시 권한
<a name="package-publishing-permissions"></a>

 AWS Identity and Access Management (IAM) 사용자 또는 역할에는 대상 리포지토리에 게시할 수 있는 권한이 있어야 합니다. 패키지를 게시하려면 다음 권한이 필요합니다.
+ **Cargo:** `codeartifact:PublishPackageVersion`
+ **일반:** `codeartifact:PublishPackageVersion`
+ **Maven:** `codeartifact:PublishPackageVersion`, `codeartifact:PutPackageMetadata` 
+ **npm:** `codeartifact:PublishPackageVersion`
+ **NuGet:** `codeartifact:PublishPackageVersion`, `codeartifact:ReadFromRepository` 
+ **Python:** `codeartifact:PublishPackageVersion`
+ **Ruby:** `codeartifact:PublishPackageVersion`
+ **Swift:** `codeartifact:PublishPackageVersion`

위의 권한 목록에서 IAM 정책은 `codeartifact:PublishPackageVersion` 및 `codeartifact:PutPackageMetadata` 권한에 대한 `package` 리소스를 지정해야 합니다. 또한 `codeartifact:ReadFromRepository` 권한에 사용할 `repository` 리소스도 지정해야 합니다.

CodeArtifact에서의 권한에 대한 자세한 내용은 [AWS CodeArtifact 권한 참조](auth-and-access-control-permissions-reference.md) 섹션을 참조하세요.

### 패키지 자산 덮어쓰기
<a name="package-publishing-overwrite-assets"></a>

 이미 존재하며 콘텐츠가 다른 패키지 자산은 다시 게시할 수 없습니다. 예를 들어 Maven 패키지를 JAR 자산 `mypackage-1.0.jar`과 함께 이미 게시했다고 가정해 보겠습니다. 이 자산은 이전 자산과 새 자산의 체크섬이 동일한 경우에만 다시 게시할 수 있습니다. 새 콘텐츠가 있는 동일한 자산을 다시 게시하려면 먼저 **delete-package-versions** 명령을 이용해 패키지 버전을 삭제하세요. 콘텐츠가 다른 동일한 자산 이름을 다시 게시하려고 하면 HTTP 409 충돌 오류가 발생합니다.

 여러 자산을 지원하는 패키지 형식(일반, PyPI 및 Maven)의 경우, 필요한 권한이 있다면 기존 패키지 버전에 이름이 다른 새 자산을 추가할 수 있습니다. 일반 패키지의 경우 패키지 버전이 `Unfinished` 상태에 있는 한 새 자산을 추가할 수 있습니다. npm은 패키지 버전당 자산 하나만 지원하므로, 게시된 패키지 버전을 어떤 식으로든 수정하려면 먼저 **delete-package-versions**를 사용하여 패키지 버전을 삭제해야 합니다.

 이미 존재하는 자산(예:`mypackage-1.0.jar`)을 다시 게시하려고 할 때 게시된 자산과 새 자산의 내용이 동일하면, 작업은 멱등성이기 때문에 성공하게 됩니다.

### 프라이빗 패키지 및 퍼블릭 리포지토리
<a name="package-publishing-upstreams-direct"></a>

 CodeArtifact는 CodeArtifact 리포지토리에 저장된 패키지를 npmjs.com 또는 Maven Central 같은 퍼블릭 리포지토리에 게시하지 않습니다. CodeArtifact는 퍼블릭 리포지토리에서 CodeArtifact 리포지토리로 패키지를 가져오지만 패키지를 반대 방향으로 옮기지는 않습니다. CodeArtifact 리포지토리에 게시하는 패키지는 비공개로 유지되며 액세스 권한을 부여한 AWS 계정, 역할 및 사용자만 사용할 수 있습니다.

### 패치가 적용된 패키지 버전 게시
<a name="package-publishing-patched-versions"></a>

 수정된 패키지 버전을 게시하고 싶지만 이러한 버전이 퍼블릭 리포지토리에서 사용 가능한 버전일 수도 있습니다. 예를 들어 `mydep 1.1`이라는 중요한 애플리케이션 종속성에서 버그를 발견한 경우, 패키지 공급업체가 변경 사항을 검토하고 수락하기 전에 먼저 이를 수정해야 할 수 있습니다. 앞서 설명한 것처럼 CodeArtifact에서는 업스트림 리포지토리와 외부 연결을 통해 CodeArtifact 리포지토리에서 퍼블릭 리포지토리에 접근할 수 있는 경우 CodeArtifact 리포지토리에서 `mydep 1.1`을 게시할 수 없습니다.

이 문제를 해결하려면 퍼블릭 리포지토리에서는 접근할 수 없는 다른 CodeArtifact 리포지토리에 패키지 버전을 게시하세요. 그런 다음 `copy-package-versions` API를 사용하여 `mydep 1.1`의 패치된 버전을 사용할 CodeArtifact 리포지토리에 복사합니다.

### 게시를 위한 자산 크기 제한
<a name="package-publishing-asset-size-limits"></a>

게시할 수 있는 패키지 자산의 최대 크기는 [in AWS CodeArtifact 할당량](service-limits.md)에 표시된 **자산 파일 크기 최대** 할당량에 따라 제한됩니다. 예를 들어 현재 자산 파일 크기 최대 할당량보다 큰 Maven JAR 또는 Python 휠은 게시할 수 없습니다. CodeArtifact에 더 큰 자산을 저장해야 한다면 할당량 증가를 요청하세요.

자산 파일 크기 최대 할당량을 제외하고, npm 패키지 게시 요청의 최대 크기는 2GB입니다. 이 제한은 자산 파일 크기 최대 할당량과 무관하며 할당량을 늘려도 이 제한이 늘어나지는 않습니다. npm 게시 요청(HTTP PUT)에서는 패키지 메타데이터와 npm 패키지 tar 아카이브의 콘텐츠가 하나로 묶입니다. 따라서 게시할 수 있는 npm 패키지의 실제 최대 크기는 포함된 메타데이터의 크기에 따라 달라집니다.

**참고**  
게시된 npm 패키지는 최대 크기가 2GB 미만으로 제한됩니다.

### 게시 지연 시간
<a name="package-publishing-latency"></a>

CodeArtifact 리포지토리에 게시된 패키지 버전은 대부분 1초 이내에 다운로드할 수 있습니다. 예를 들어 npm 패키지 버전을 `npm publish`를 이용해 CodeArtifact에 게시하는 경우, `npm install` 명령을 이용하면 1초 이내에 해당 버전을 사용할 수 있습니다. 하지만 게시가 일관적이지 않으며 시간이 더 오래 걸릴 수도 있습니다. 게시 후 즉시 패키지 버전을 사용해야 한다면, 재시도를 통해 다운로드가 안정적인지 확인하세요. 예를 들어 패키지 버전을 게시한 후, 방금 게시한 패키지 버전을 최초 다운로드 시도에서 사용할 수 없다면 다운로드를 최대 3번 반복하세요.

**참고**  
일반적으로 퍼블릭 리포지토리에서 패키지 버전을 가져오는 작업은 게시보다 시간이 더 오래 걸립니다. 자세한 내용은 [외부 연결 지연 시간](external-connection-requesting-packages.md#external-connection-latency) 단원을 참조하십시오.

## 패키지 버전 상태
<a name="package-version-status"></a>

CodeArtifact의 각 패키지 버전에는 패키지 버전의 현재 상태 및 가용성을 설명하는 상태가 적용됩니다. AWS CLI 및 SDK에서 패키지 버전 상태를 변경할 수 있습니다. 자세한 내용은 [패키지 버전 상태 업데이트](update-package-version-status.md) 단원을 참조하십시오.

다음은 패키지 버전 상태에 적용되는 값입니다.
+  **게시됨** - 패키지 버전이 성공적으로 게시되었으며 패키지 관리자를 이용해 요청할 수 있습니다. 패키지 버전은 패키지 관리자에 반환되는 패키지 버전 목록(예: `npm view <package-name> versions` 출력)에 포함됩니다. 패키지 버전의 모든 자산은 리포지토리에서 사용할 수 있습니다.
+  **미완료** - 클라이언트가 패키지 버전용 자산을 하나 이상 업로드했지만 `Published` 상태로 전환하여 완료하지는 않았습니다. 현재는 일반 및 Maven 패키지 버전만이 `Unfinished` 상태가 될 수 있습니다. Maven 패키지의 경우, 클라이언트가 패키지 버전용 자산을 하나 이상 업로드하지만 해당 버전이 포함된 패키지의 `maven-metadata.xml` 파일을 게시하지 않으면 이 문제가 발생할 수 있습니다. Maven 패키지 버전이 **미완료**이면 `mvn` 또는 `gradle` 같은 클라이언트에게 반환되는 버전 목록에 패키지 버전이 포함되지 않으며, 따라서 빌드의 일부로 사용할 수 없습니다. [PublishPackageVersion API](https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_PublishPackageVersion.html)를 호출할 때 `unfinished` 플래그를 제공하면 일반 패키지를 의도적으로 `Unfinished` 상태로 유지할 수 있습니다. `unfinished` 플래그를 생략하거나 [UpdatePackageVersionsStatus](https://docs.aws.amazon.com//codeartifact/latest/APIReference/API_UpdatePackageVersionsStatus.html) API를 호출하면 일반 패키지를 `Published` 상태로 변경할 수 있습니다.
+  **미등록** - 패키지 버전의 자산을 리포지토리에서 다운로드할 수 있지만, 패키지 버전이 패키지 관리자에게 반환되는 버전 목록에 포함되지 않습니다. 예를 들어 npm 패키지의 경우 `npm view <package-name> versions` 출력에 패키지 버전이 포함되지 않습니다. 즉, 사용 가능한 버전 목록에 버전이 표시되지 않기 때문에 npm의 종속성 확인 로직은 패키지 버전을 선택하지 않습니다. 하지만 **미등록** 패키지 버전이 이미 `npm package-lock.json` 파일에서 참조된 경우, 예를 들어 `npm ci`를 실행 중일 때 해당 버전을 다운로드하여 설치할 수 있습니다.
+  **보관됨** - 패키지 버전의 자산을 더 이상 다운로드할 수 없습니다. 패키지 버전은 패키지 관리자에 반환되는 버전 목록에 포함됩니다. 자산을 사용할 수 없으므로 클라이언트의 패키지 버전 사용이 차단됩니다. 애플리케이션 빌드가 **보관됨**으로 업데이트된 버전을 사용하는 경우, 패키지 버전이 로컬에 캐시되지 않으면 빌드가 중단됩니다. **보관됨** 패키지 버전은 아직 리포지토리에 있기 때문에 패키지 관리자나 빌드 도구를 사용하여 다시 게시할 수 없지만, [UpdatePackageVersionsStatus API](https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_UpdatePackageVersionsStatus.html)를 사용하여 패키지 버전의 상태를 **미등록** 또는 **게시됨**으로 다시 변경할 수 있습니다.
+  **폐기됨** - 패키지 버전이 목록에 표시되지 않으며 리포지토리에서 자산을 다운로드할 수 없습니다. **폐기됨**과 **보관됨**의 주된 차이점은 **폐기됨** 상태인 경우 CodeArtifact가 패키지 버전의 자산을 영구적으로 삭제한다는 것입니다. 따라서 패키지 버전을 **폐기됨**에서 **보관됨**, **미등록** 또는 **게시됨**으로 전환할 수 없습니다. 자산이 삭제되었으므로 패키지 버전을 더 이상 사용할 수 없습니다. 패키지 버전이 **폐기됨**으로 표시되면 패키지 자산 보관 요금이 청구되지 않습니다.

`--status` 파라미터 없이 list-package-versions를 호출하면, 기본적으로 모든 상태의 패키지 버전이 반환됩니다.

 위에 나열된 상태 외에 [DeletePackageVersions API](https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_DeletePackageVersions.html)를 사용하여 패키지 버전을 삭제할 수도 있습니다. 삭제된 패키지 버전은 리포지토리에 더 이상 존재하지 않으며 패키지 관리자 또는 빌드 도구를 사용하여 해당 패키지 버전을 자유롭게 다시 게시할 수 있습니다. 패키지 버전이 삭제되면 패키지 버전의 자산 보관 요금이 청구되지 않습니다.

## 패키지 이름, 패키지 버전 및 자산 이름 표준화
<a name="package-name-normalization"></a>

CodeArtifact는 패키지 이름, 패키지 버전과 자산 이름을 저장하기 전에 먼저 표준화합니다. 즉, CodeArtifact의 이름 또는 버전은 패키지가 게시될 때 제공된 것과 다를 수 있습니다. CodeArtifact에서 각 패키지 유형의 이름 및 버전을 표준화하는 방법에 대한 자세한 내용은 다음 설명서를 참조하세요.
+ [Python 패키지 이름 정규화](python-name-normalization.md)
+ [NuGet 패키지 이름, 버전 및 자산 이름 표준화](nuget-name-normalization.md)

CodeArtifact는 다른 패키지 형식에서는 표준화를 수행하지 않습니다.

# 패키지 이름 나열
<a name="list-packages"></a>

CodeArtifact에서 `list-packages` 명령을 사용하여 리포지토리에 있는 모든 패키지 이름 목록을 가져옵니다. 이 명령은 버전이 아닌 패키지 이름만 반환합니다.

```
aws codeartifact list-packages --domain my_domain --domain-owner 111122223333 --repository my_repo
```

샘플 출력:

```
{
    "nextToken": "eyJidWNrZXRJZCI6I...",
    "packages": [
        {
            "package": "acorn",
            "format": "npm",
            "originConfiguration": {
                "restrictions": {
                    "publish": "BLOCK",
                    "upstream": "ALLOW"
            }
        },
        {
            "package": "acorn-dynamic-import",
            "format": "npm",
            "originConfiguration": {
                "restrictions": {
                    "publish": "BLOCK",
                    "upstream": "ALLOW"
            }
        },
        {
            "package": "ajv",
            "format": "npm",
            "originConfiguration": {
                "restrictions": {
                    "publish": "BLOCK",
                    "upstream": "ALLOW"
            }
        },
        {
            "package": "ajv-keywords",
            "format": "npm",
            "originConfiguration": {
                "restrictions": {
                    "publish": "BLOCK",
                    "upstream": "ALLOW"
            }
        },
        {
            "package": "anymatch",
            "format": "npm",
            "originConfiguration": {
                "restrictions": {
                    "publish": "BLOCK",
                    "upstream": "ALLOW"
            }
        },
        {
            "package": "ast",
            "namespace": "webassemblyjs",
            "format": "npm",
            "originConfiguration": {
                "restrictions": {
                    "publish": "BLOCK",
                    "upstream": "ALLOW"
            }
        }
    ]
}
```

## npm 패키지 이름 나열
<a name="list-packages-npm"></a>

npm 패키지 이름만 나열하려면 `--format` 옵션 값을 `npm`으로 설정합니다.

```
aws codeartifact list-packages --domain my_domain --domain-owner 111122223333 --repository my_repo  \
    --format npm
```

네임스페이스(npm *범위*)에 있는 npm 패키지를 나열하려면 `--namespace` 및 `--format` 옵션을 사용하세요.

**중요**  
`--namespace` 옵션 값에는 앞에 `@`이 올 수 없습니다. `@types` 네임스페이스를 검색하려면 값을 *유형*으로 설정하세요.

**참고**  
`--namespace` 옵션은 네임스페이스 접두사를 기준으로 필터링합니다. `--namespace` 옵션에 전달된 값으로 시작하는 범위를 가진 모든 npm 패키지가 `list-packages` 응답에서 반환됩니다.

```
aws codeartifact list-packages --domain my_domain --domain-owner 111122223333 --repository my_repo  \
    --format npm --namespace types
```

샘플 출력:

```
{
    "nextToken": "eyJidWNrZXRJZ...",
    "packages": [
        {
            "package": "3d-bin-packing",
            "namespace": "types",
            "format": "npm"

        },
        {
            "package": "a-big-triangle",
            "namespace": "types",
            "format": "npm"

        },
        {
            "package": "a11y-dialog",
            "namespace": "types",
            "format": "npm"

        }
    ]
}
```

## Maven 패키지 이름 나열
<a name="list-packages-maven"></a>

Maven 패키지 이름만 나열하려면 `--format` 옵션 값을 `maven`으로 설정합니다. 또한 `--namespace` 옵션에서 Maven 그룹 ID를 지정해야 합니다.

**참고**  
`--namespace` 옵션은 네임스페이스 접두사를 기준으로 필터링합니다. `--namespace` 옵션에 전달된 값으로 시작하는 범위를 가진 모든 npm 패키지가 `list-packages` 응답에서 반환됩니다.

```
aws codeartifact list-packages --domain my_domain --domain-owner 111122223333 --repository my_repo  \
    --format maven --namespace org.apache.commons
```

샘플 출력:

```
{
    "nextToken": "eyJidWNrZXRJZ...",
    "packages": [
        {
            "package": "commons-lang3",
            "namespace": "org.apache.commons",
            "format": "maven"

        },
        {
            "package": "commons-collections4",
            "namespace": "org.apache.commons",
            "format": "maven"

        },
        {
            "package": "commons-compress",
            "namespace": "org.apache.commons",
            "format": "maven"

        }
    ]
}
```

## Python 패키지 이름 나열
<a name="list-packages-python"></a>

Python 패키지 이름만 나열하려면 `--format` 옵션 값을 `pypi`로 설정합니다.

```
aws codeartifact list-packages --domain my_domain --domain-owner 111122223333 --repository my_repo  \
    --format pypi
```

## 패키지 이름 접두사 기준으로 필터링
<a name="list-packages-package-prefix"></a>

 지정된 문자열로 시작하는 패키지를 반환하려면 `--package-prefix` 옵션을 사용합니다.

```
aws codeartifact list-packages --domain my_domain --domain-owner 111122223333 --repository my_repo  \
    --format npm --package-prefix pat
```

샘플 출력:

```
{
    "nextToken": "eyJidWNrZXRJZ...",
    "packages": [
        {
            "package": "path",
            "format": "npm"

        },
        {
            "package": "pat-test",
            "format": "npm"

        },
        {
            "package": "patch-math3",
            "format": "npm"

        }
    ]
}
```

## 지원되는 검색 옵션 조합
<a name="list-packages-option-combinations"></a>

`--format`, `--namespace` 및 `--package-prefix` 옵션은 마음껏 조합해서 사용할 수 있으며, `--namespace`는 단독으로 사용할 수 없습니다. 범위가 `@types`로 시작하는 모든 npm 패키지를 검색하려면 `--format` 옵션을 지정해야 합니다. `--namespace`를 단독으로 사용하면 오류가 발생합니다.

 `list-packages`에서는 세 가지 옵션 중 어느 것도 사용하지 않을 수 있으며, 리포지토리에 있는 모든 형식의 모든 패키지가 반환됩니다.

## 출력 형식
<a name="list-packages-format-output"></a>

 모든 AWS CLI 명령에 사용할 수 있는 파라미터를 사용하여 `list-packages` 응답을 압축하고 더 읽기 쉽게 만들 수 있습니다. `--query` 파라미터를 사용하여, 반환되는 각 패키지 버전의 형식을 지정합니다. `--output` 파라미터를 사용하여 응답의 형식을 일반 텍스트로 지정합니다.

```
aws codeartifact list-packages --domain my_domain --domain-owner 111122223333 --repository my_repo \
  --output text --query 'packages[*].[package]'
```

샘플 출력:

```
accepts
array-flatten
body-parser
bytes
content-disposition
content-type
cookie
cookie-signature
```

 자세한 내용은 *AWS Command Line Interface 사용 설명서*의 [AWS CLI의 명령 출력 제어](https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-output.html)를 참조하세요.

## 기본값 및 기타 옵션
<a name="list-packages-defaults-options"></a>

 기본적으로 `list-packages`는 결과를 100개까지 반환합니다. `--max-results` 옵션을 사용하면 이 결과 제한을 변경할 수 있습니다.

```
aws codeartifact list-packages --domain my_domain --domain-owner 111122223333 --repository my_repo --max-results 20
```

`--max-results`에 허용되는 최대값은 1,000입니다. 1,000개 이상의 패키지가 있는 리포지토리의 패키지를 나열할 수 있도록, `list-packages`에서는 응답의 `nextToken` 필드를 사용한 페이지 매김을 지원합니다. 리포지토리에 있는 패키지 수가 `--max-results` 값보다 많다면, `nextToken` 값을 `list-packages`의 다른 호출에 전달하여 다음 결과 페이지를 가져올 수 있습니다.

```
aws codeartifact list-packages --domain my_domain --domain-owner 111122223333 --repository my_repo \
  --next-token rO0ABXNyAEdjb...
```

# 패키지 버전 나열
<a name="list-packages-versions"></a>

in AWS CodeArtifact `list-package-versions` 명령을 사용하여 리포지토리에 있는 패키지 이름의 모든 버전 목록을 가져옵니다.

```
aws codeartifact list-package-versions --package kind-of \ 
--domain my_domain --domain-owner 111122223333 \
--repository my_repository --format npm
```

샘플 출력:

```
{
  "defaultDisplayVersion": "1.0.1",
  "format": "npm",
  "package": "kind-of",
  "versions": [
      {
          "version": "1.0.1",
          "revision": "REVISION-SAMPLE-1-C7F4S5E9B772FC",
          "status": "Published",
          "origin": {
                "domainEntryPoint": {
                    "externalConnectionName": "public:npmjs"
                },
                "originType": "EXTERNAL"
            }
      },
      {
          "version": "1.0.0",
          "revision": "REVISION-SAMPLE-2-C752BEEF6D2CFC",
          "status": "Published",
          "origin": {
                "domainEntryPoint": {
                    "externalConnectionName": "public:npmjs"
                },
                "originType": "EXTERNAL"
            }
      },
      {
          "version": "0.1.2",
          "revision": "REVISION-SAMPLE-3-654S65A5C5E1FC",
          "status": "Published",
          "origin": {
                "domainEntryPoint": {
                    "externalConnectionName": "public:npmjs"
                },
                "originType": "EXTERNAL"
            }
      },
      {
          "version": "0.1.1",
          "revision": "REVISION-SAMPLE-1-C7F4S5E9B772FC"",
          "status": "Published",
          "origin": {
                "domainEntryPoint": {
                    "externalConnectionName": "public:npmjs"
                },
                "originType": "EXTERNAL"
            }
      },
      {
          "version": "0.1.0",
          "revision": "REVISION-SAMPLE-4-AF669139B772FC",
          "status": "Published",
          "origin": {
                "domainEntryPoint": {
                    "externalConnectionName": "public:npmjs"
                },
                "originType": "EXTERNAL"
            }
      }        
  ]
}
```

`list-package-versions` 호출에 `--status` 파라미터를 추가하면 패키지 버전 상태를 기준으로 결과를 필터링할 수 있습니다. 패키지 버전 상태에 대한 자세한 내용은 [패키지 버전 상태](packages-overview.md#package-version-status) 섹션을 참조하세요.

 `--max-results` 및 `--next-token` 파라미터를 사용하여 `list-package-versions`의 응답에 페이지를 매길 수 있습니다. `--max-results`의 경우 1에서 1000 사이의 정수를 지정하여 한 페이지에 반환되는 결과 수를 지정합니다. 기본값은 50입니다. 후속 페이지를 반환하려면 `list-package-versions`를 다시 실행하고 이전 명령 출력에서 받은 `nextToken` 값을 `--next-token`에 전달하세요. `--next-token` 옵션을 사용하지 않으면 결과의 첫 페이지가 항상 반환됩니다.

 `list-package-versions` 명령은 업스트림 리포지토리의 패키지 버전은 나열하지 않습니다. 하지만 패키지 버전 요청 중에 리포지토리로 복사된 업스트림 리포지토리의 패키지 버전에 대한 참조는 나열됩니다. 자세한 내용은 [CodeArtifact에서의 업스트림 리포지토리 작업](repos-upstream.md) 단원을 참조하십시오.

## npm 패키지 버전 나열
<a name="list-packages-versions-npm"></a>

npm 패키지의 모든 패키지 버전을 나열하려면 `--format` 옵션 값을 `npm`으로 설정합니다.

```
aws codeartifact list-package-versions --package my_package --domain my_domain \ 
 --domain-owner 111122223333 --repository my_repo --format npm
```

특정 네임스페이스(npm *범위*)에 있는 npm 패키지 버전을 나열하려면 `--namespace` 옵션을 사용하세요. `--namespace` 옵션 값에는 앞에 `@`이 올 수 없습니다. `@types` 네임스페이스를 검색하려면 값을 *유형*으로 설정하세요.

```
aws codeartifact list-package-versions --package my_package --domain my_domain \
 --domain-owner 111122223333 --repository my_repo --format npm \
 --namespace types
```

## Maven 패키지 버전 나열
<a name="list-packages-versions-maven"></a>

Maven 패키지의 모든 패키지 버전을 나열하려면 `--format` 옵션 값을 `maven`으로 설정합니다. 그리고 `--namespace` 옵션에서 Maven 그룹 ID를 지정해야 합니다.

```
aws codeartifact list-package-versions --package my_package --domain my_domain \
 --domain-owner 111122223333 --repository my_repo --format maven \
 --namespace org.apache.commons
```

## 버전 정렬
<a name="list-package-versions-sorting"></a>

 `list-package-versions`는 게시 시간을 기준으로 내림차순으로 정렬된 버전을 출력할 수 있습니다(가장 최근에 게시된 버전이 먼저 나열됨). 다음과 같이 값이 `PUBLISHED_TIME`인 `--sort-by` 파라미터를 사용합니다.

```
aws codeartifact list-package-versions --domain my_domain --domain-owner 111122223333 --repository my_repository  \
--format npm --package webpack --max-results 5 --sort-by PUBLISHED_TIME
```

 샘플 출력: 

```
{

  "defaultDisplayVersion": "4.41.2",
  "format": "npm",
  "package": "webpack",
  "versions": [
      { 
        "version": "5.0.0-beta.7", 
        "revision": "REVISION-SAMPLE-1-C7F4S5E9B772FC",
        "status": "Published"
      },
      { 
        "version": "5.0.0-beta.6", 
        "revision": "REVISION-SAMPLE-2-C752BEEF6D2CFC",
        "status": "Published" 
      },
      { 
        "version": "5.0.0-beta.5", 
        "revision": "REVISION-SAMPLE-3-654S65A5C5E1FC",
        "status": "Published"
      },
      { 
        "version": "5.0.0-beta.4", 
        "revision": "REVISION-SAMPLE-4-AF669139B772FC",
        "status": "Published"
      },
      { 
        "version": "5.0.0-beta.3", 
        "revision": "REVISION-SAMPLE-5-C752BEE9B772FC",
        "status": "Published"
      }
  ],
  "nextToken": "eyJsaXN0UGF...."
}
```

## 기본 표시 버전
<a name="list-package-versions-default-version"></a>

 `defaultDisplayVersion` 반환 값은 패키지 형식에 따라 달라집니다.
+  일반, Maven 및 PyPI 패키지의 경우 반환 값은 가장 최근에 게시된 패키지 버전입니다.
+  npm 패키지의 경우 반환 값은 `latest` 태그가 참조하는 버전입니다. `latest` 태그가 설정되지 않은 경우 반환 값은 가장 최근에 게시된 패키지 버전입니다.

## 출력 형식
<a name="list-package-versions-format-output"></a>

 모든 AWS CLI 명령에 사용할 수 있는 파라미터를 사용하여 `list-package-versions` 응답을 압축하고 더 읽기 쉽게 만들 수 있습니다. `--query` 파라미터를 사용하여, 반환되는 각 패키지 버전의 형식을 지정합니다. `--output` 파라미터를 사용하여 응답의 형식을 일반 텍스트로 지정합니다.

```
aws codeartifact list-package-versions --package my-package-name --domain my_domain --domain-owner 111122223333 \
--repository my_repo --format npm --output text --query 'versions[*].[version]'
```

샘플 출력:

```
0.1.1
0.1.2
0.1.0
3.0.0
```

 자세한 내용은 *AWS Command Line Interface 사용 설명서*의 [AWS CLI의 명령 출력 제어](https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-output.html)를 참조하세요.

# 패키지 버전 자산 나열
<a name="list-assets"></a>

*자산*은 패키지 버전과 연결된 CodeArtifact에 저장된 개별 파일(예: npm `.tgz` 파일 또는 Maven POM 또는 JAR 파일)입니다. `list-package-version-assets` 명령을 사용하여 각 패키지 버전의 자산을 나열할 수 있습니다.

`list-package-version-assets` 명령을 실행하여 AWS 계정 및 현재 AWS 리전의 각 자산에 대한 다음 정보를 반환합니다.
+  자산 이름.
+  크기(단위: 바이트).
+  체크섬 검증에 사용한 해시 값 세트.

예를 들어 다음 명령을 사용하여 Python 패키지 `flatten-json`, 버전 `0.1.7`의 자산을 나열합니다.

```
aws codeartifact list-package-version-assets --domain my_domain --domain-owner 111122223333 \
 --repository my_repo --format pypi --package flatten-json \
 --package-version 0.1.7
```

다음은 출력값을 보여줍니다.

```
{
    "format": "pypi",
    "package": "flatten-json",
    "version": "0.1.7",
    "versionRevision": "REVISION-SAMPLE-1-C7F4S5E9B772FC",
    "assets": [
        {
            "name": "flatten_json-0.1.7-py3-none-any.whl",
            "size": 31520,
            "hashes": {
                "MD5": "41bba98d5b9219c43089eEXAMPLE-MD5",
                "SHA-1": "69b215c25dd4cda1d997a786ec6EXAMPLE-SHA-1",
                "SHA-256": "43f24850b7b7b7d79c5fa652418518fbdf427e602b1edabe6EXAMPLE-SHA-256",
                "SHA-512": "3947382ac2c180ee3f2aba4f8788241527c8db9dfe9f4b039abe9fc560aaf5a1fced7bd1e80a0dca9ce320d95f0864e0dec3ac4f2f7b2b2cbEXAMPLE-SHA-512"
            }
        },
        {
            "name": "flatten_json-0.1.7.tar.gz",
            "size": 2865,
            "hashes": {
                "MD5": "41bba98d5b9219c43089eEXAMPLE-MD5",
                "SHA-1": "69b215c25dd4cda1d997a786ec6EXAMPLE-SHA-1",
                "SHA-256": "43f24850b7b7b7d79c5fa652418518fbdf427e602b1edabe6EXAMPLE-SHA-256",
                "SHA-512": "3947382ac2c180ee3f2aba4f8788241527c8db9dfe9f4b039abe9fc560aaf5a1fced7bd1e80a0dca9ce320d95f0864e0dec3ac4f2f7b2b2cbEXAMPLE-SHA-512"
            }
        }
    ]
}
```

## npm 패키지의 자산 나열
<a name="list-assets-npm"></a>

npm 패키지에는 항상 이름이 `package.tgz`인 단일 자산이 있습니다. 범위가 지정된 npm 패키지의 자산을 나열하려면 `--namespace` 옵션에 범위를 포함하세요.

```
aws codeartifact list-package-version-assets --domain my_domain --domain-owner 111122223333 \
 --repository my_repo --format npm --package webpack \
 --namespace types --package-version 4.9.2
```

## Maven 패키지의 자산 나열
<a name="list-assets-maven"></a>

Maven 패키지의 자산을 나열하려면 `--namespace` 옵션에 패키지 네임스페이스를 포함하세요. Maven 패키지 `commons-cli:commons-cli`의 자산을 나열하는 방법은 다음과 같습니다.

```
aws codeartifact list-package-version-assets --domain my_domain --domain-owner 111122223333 \
 --repository my_repo --format maven --package commons-cli \
 --namespace commons-cli --package-version 1.0
```

# 패키지 버전 자산 다운로드
<a name="download-assets"></a>

*자산*은 패키지 버전과 연결된 CodeArtifact에 저장된 개별 파일(예: npm `.tgz` 파일 또는 Maven POM 또는 JAR 파일)입니다. `get-package-version-assets command`를 사용하여 패키지 자산을 다운로드할 수 있습니다. 이렇게 하면 `npm`이나 `pip` 같은 패키지 관리자 클라이언트를 사용하지 않고도 자산을 검색할 수 있습니다. 자산을 다운로드하려면 `list-package-version-assets` 명령을 사용하여 얻을 수 있는 자산 이름을 제공해야 합니다. 자세한 내용은 [패키지 버전 자산 나열](list-assets.md) 섹션을 참조하세요. 자산은 사용자가 지정한 파일 이름으로 로컬 스토리지에 다운로드됩니다.

다음 예제에서는 버전이 *27.1-jre*인 Maven 패키지 *com.google.guava:guava*에서 *guava-27.1-jre.jar* 자산을 다운로드합니다.

```
aws codeartifact get-package-version-asset --domain my_domain --domain-owner 111122223333 --repository my_repo \
    --format maven --namespace com.google.guava --package guava --package-version 27.1-jre \
    --asset guava-27.1-jre.jar \
    guava-27.1-jre.jar
```

 이 예제에서는 이전 명령의 마지막 인수를 사용하여 파일 이름을 *guava-27.1-jre.jar*로 지정했으므로, 다운로드한 자산의 이름은 *guava-27.1-jre.jar*로 지정됩니다.

명령의 출력은 다음과 같습니다.

```
{
    "assetName": "guava-27.1-jre.jar",
    "packageVersion": "27.1-jre",
    "packageVersionRevision": "YGp9ck2tmy03PGSxioclfYzQ0BfTLR9zzhQJtERv62I="
}
```

**참고**  
범위가 지정된 npm 패키지에서 자산을 다운로드하려면 `--namespace` 옵션에 범위를 포함하세요. `--namespace`를 사용할 때는 `@` 기호를 생략해야 합니다. 예를 들어 범위가 `@types`라면 `--namespace types`를 사용합니다.

 `get-package-version-asset`을 사용하여 자산을 다운로드하려면 패키지 리소스에 대한 `codeartifact:GetPackageVersionAsset` 권한이 필요합니다. 리소스 기반 정책에 대한 자세한 내용은 *AWS Identity and Access Management 사용 설명서*의 [리소스 기반 정책](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_resource-based)을 참조하세요.

# 리포지토리 간 패키지 복사
<a name="copy-package"></a>

CodeArtifact에서는 특정 리포지토리의 패키지 버전을 다른 리포지토리로 복사할 수 있습니다. 이 기능은 패키지 프로모션 워크플로우나 팀 또는 프로젝트 간 패키지 버전 공유 같은 시나리오에 유용합니다. 소스 리포지토리와 대상 리포지토리는 패키지 버전을 복사하는 도메인과 동일한 도메인에 있어야 합니다.

## 패키지 복사에 필요한 IAM 권한
<a name="copypackageversions-iam-actions"></a>

CodeArtifact에서 패키지 버전을 복사하려면, 호출하는 사용자에게 필수 IAM 권한이 있어야 하고 소스 및 대상 리포지토리에 연결된 리소스 기반 정책에도 필수 권한이 있어야 합니다. 리소스 기반 권한 정책 및 CodeArtifact 리포지토리에 대한 자세한 내용은 [리포지토리 정책](repo-policies.md) 섹션을 참조하세요.

`copy-package-versions`를 호출하는 사용자에게는 소스 리포지토리에 대한 `ReadFromRepository` 권한과 대상 리포지토리에 대한 `CopyPackageVersions` 권한이 있어야 합니다.

소스 리포지토리에는 `ReadFromRepository` 권한이 있어야 하고 대상 리포지토리에는 IAM 계정 또는 사용자 복사 패키지에 할당된 `CopyPackageVersions` 권한이 있어야 합니다. 다음 정책은 `put-repository-permissions-policy` 명령을 사용하여 소스 리포지토리 또는 대상 리포지토리에 추가할 예제 리포지토리 정책입니다. *111122223333*을 계정 호출 `copy-package-versions`의 ID로 바꿉니다.

**참고**  
현재 리포지토리 정책이 있는 경우 `put-repository-permissions-policy`를 호출하면 현재 정책이 대체됩니다. `get-repository-permissions-policy` 명령을 사용하면 정책이 존재하는지 확인할 수 있습니다. 자세한 내용은 [정책 읽기](repo-policies.md#reading-a-policy) 섹션을 참조하세요. 정책이 존재한다면, 정책을 바꾸는 대신 이러한 권한을 추가하는 것이 좋습니다.

**소스 리포지토리 권한 정책 예시**

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": [
                "codeartifact:ReadFromRepository"
            ],
            "Effect": "Allow",
            "Principal": {
                 "AWS": "arn:aws:iam::111122223333:root"
            },
            "Resource": "*"
        }
    ]
}
```

------

**대상 리포지토리 권한 정책 예제**

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": [
                "codeartifact:CopyPackageVersions"
            ],
            "Effect": "Allow",
            "Principal": {
                 "AWS": "arn:aws:iam::111122223333:root"
            },
            "Resource": "*"
        }
    ]
}
```

------

## 패키지 버전 복사
<a name="copy-package-versions"></a>

CodeArtifact에서 `copy-package-versions` 명령을 사용하여 소스 리포지토리에 있는 하나 이상의 패키지 버전을 동일한 도메인에 있는 대상 리포지토리로 복사합니다. 다음 예제는 `my_repo` 리포지토리에 있는 `my-package`라는 npm 패키지의 버전 6.0.2 및 4.0.0을 `repo-2` 리포지토리로 복사합니다.

```
aws codeartifact copy-package-versions --domain my_domain --domain-owner 111122223333 --source-repository my_repo \
 --destination-repository repo-2 --package my-package --format npm \
 --versions 6.0.2 4.0.0
```

단일 작업으로 패키지 이름이 같은 여러 버전을 복사할 수 있습니다. 패키지 이름이 다른 버전을 복사하려면 버전별로 `copy-package-versions`를 호출해야 합니다.

두 버전을 모두 성공적으로 복사할 수 있다면, 앞의 명령은 다음과 같은 출력을 생성합니다.

```
{
   "successfulVersions": {
        "6.0.2": {
            "revision": "REVISION-1-SAMPLE-6C81EFF7DA55CC",
            "status": "Published"
        },
        "4.0.0": {
            "revision": "REVISION-1-SAMPLE-6C81EFF7DA55CC",
            "status": "Published"
        }
    },
    "failedVersions": {}
}
```

## 업스트림 리포지토리에서 패키지 복사
<a name="copy-package-upstream"></a>

일반적으로 `copy-package-versions`는 복사할 버전을 `--source-repository` 옵션에서 지정한 리포지토리에서만 찾습니다. 하지만 `--include-from-upstream` 옵션을 사용하면 소스 리포지토리와 업스트림 리포지토리 모두에서 버전을 복사할 수 있습니다. CodeArtifact SDK를 사용하는 경우 `includeFromUpstream` 파라미터를 true로 설정하여 `CopyPackageVersions` API를 호출하세요. 자세한 내용은 [CodeArtifact에서의 업스트림 리포지토리 작업](repos-upstream.md) 단원을 참조하십시오.

## 범위가 지정된 npm 패키지 복사
<a name="copying-a-scoped-npm-package"></a>

 범위 내의 npm 패키지 버전을 복사하려면 `--namespace` 옵션을 사용하여 범위를 지정하세요. 예를 들어 `@types/react` 패키지를 복사하려면 `--namespace types`를 사용합니다. `--namespace`를 사용할 때는 `@` 기호를 생략해야 합니다.

```
aws codeartifact copy-package-versions  --domain my_domain --domain-owner 111122223333 --source-repository repo-1 \
 --destination-repository repo-2 --format npm --namespace types \
 --package react --versions 0.12.2
```

## Maven 패키지 버전 복사
<a name="copying-a-maven-package"></a>

리포지토리 간에 Maven 패키지 버전을 복사하려면 `--namespace` 옵션을 적용해 Maven 그룹 ID를 전달하고 `--name` 옵션을 적용해 Maven artifactID를 전달하여 복사할 패키지를 지정하세요. 예를 들어 `com.google.guava:guava`의 단일 버전을 복사하는 방법은 다음과 같습니다.

```
 aws codeartifact copy-package-versions --domain my_domain --domain-owner 111122223333  \
 --source-repository my_repo --destination-repository repo-2 --format maven --namespace com.google.guava \
 --package guava --versions 27.1-jre
```

패키지 버전이 성공적으로 복사되면 다음과 비슷한 출력이 표시됩니다.

```
{
    "successfulVersions": {
        "27.1-jre": {
            "revision": "REVISION-1-SAMPLE-6C81EFF7DA55CC",
            "status": "Published"
        }
    },
    "failedVersions": {}
}
```

## 소스 리포지토리에 없는 버전
<a name="versions-that-do-not-exist-in-the-source-repository"></a>

소스 리포지토리에 없는 버전을 지정하면 복사가 되지 않습니다. 소스 리포지토리에 있는 버전도 있고 없는 버전도 있다면, 모든 버전이 복사되지 않습니다. 다음 예제에서 `array-unique` npm 패키지의 버전 0.2.0은 소스 리포지토리에 있지만 버전 5.6.7은 그렇지 않습니다.

```
aws codeartifact copy-package-versions --domain my_domain --domain-owner 111122223333 \
         --source-repository my_repo --destination-repository repo-2 --format npm \
         --package array-unique --versions 0.2.0 5.6.7
```

이 시나리오에서는 다음과 비슷한 출력이 표시됩니다.

```
{
    "successfulVersions": {},
    "failedVersions": {
        "0.2.0": {
            "errorCode": "SKIPPED",
            "errorMessage": "Version 0.2.0 was skipped"
        },
        "5.6.7": {
            "errorCode": "NOT_FOUND",
            "errorMessage": "Could not find version 5.6.7"
        }
    }
}
```

`SKIPPED` 오류 코드는 다른 버전을 복사할 수 없어 해당 버전이 대상 리포지토리에 복사되지 않았음을 나타내는 데 사용합니다.

## 대상 리포지토리에 이미 존재하는 버전
<a name="versions-that-already-exist-in-the-destination-repository"></a>

 패키지 버전이 이미 존재하는 리포지토리에 복사되면, CodeArtifact는 두 리포지토리의 패키지 자산과 패키지 버전 수준 메타데이터를 비교합니다.

 소스 및 대상 리포지토리의 패키지 버전 자산과 메타데이터가 동일한 경우 복사가 수행되지 않지만 작업은 성공한 것으로 간주됩니다. 즉, `copy-package-versions`는 멱등성입니다. 이 경우 소스 리포지토리와 대상 리포지토리에 이미 존재하는 버전은 `copy-package-versions`의 출력에 나열되지 않습니다.

다음 예제에서는 npm 패키지 `array-unique`의 두 버전이 소스 리포지토리 `repo-1`에 존재합니다. 버전 0.2.1도 대상 리포지토리 `dest-repo`에 있지만 버전 0.2.0은 없습니다.

```
aws codeartifact copy-package-versions --domain my_domain --domain-owner 111122223333 \
         --source-repository my_repo --destination-repository repo-2 --format npm --package array-unique \
         --versions 0.2.1 0.2.0
```

이 시나리오에서는 다음과 비슷한 출력이 표시됩니다.

```
{
    "successfulVersions": {
        "0.2.0": {
            "revision": "Yad+B1QcBq2kdEVrx1E1vSfHJVh8Pr61hBUkoWPGWX0=",
            "status": "Published"
        }
    },
    "failedVersions": {}
}
```

버전 0.2.0은 소스에서 대상 리포지토리로 성공적으로 복사되었기 때문에 `successfulVersions`에 나열됩니다. 버전 0.2.1은 대상 리포지토리에 이미 존재하므로 출력에 표시되지 않습니다.

 패키지 버전 자산 또는 메타데이터가 소스 및 대상 리포지토리에서 서로 다르다면 복사 작업이 실패하게 됩니다. `--allow-overwrite` 파라미터를 사용하여 강제로 덮어쓸 수 있습니다.

대상 리포지토리에 있는 버전도 있고 없는 버전도 있다면, 모든 버전이 복사되지 않습니다. 다음 예제에서 `array-unique` npm 패키지의 버전 0.3.2는 소스 리포지토리와 대상 리포지토리에 모두 존재하지만 패키지 버전의 콘텐츠가 다릅니다. 버전 0.2.1은 소스 리포지토리에는 있지만 대상 리포지토리에는 없습니다.

```
aws codeartifact copy-package-versions --domain my_domain --domain-owner 111122223333 \
         --source-repository my_repo --destination-repository repo-2 --format npm --package array-unique \
         --versions 0.3.2 0.2.1
```

이 시나리오에서는 다음과 비슷한 출력이 표시됩니다.

```
{
    "successfulVersions": {},
    "failedVersions": {
        "0.2.1": {
            "errorCode": "SKIPPED",
            "errorMessage": "Version 0.2.1 was skipped"
        },
        "0.3.2": {
            "errorCode": "ALREADY_EXISTS",
            "errorMessage": "Version 0.3.2 already exists"
        }
    }
}
```

버전 0.2.1은 대상 리포지토리에 복사되지 않았기 때문에 `SKIPPED`로 표시됩니다. 버전 0.3.2는 대상 리포지토리에 존재했지만 소스 및 대상 리포지토리에서 동일하지 않아 복사에 실패했습니다.

## 패키지 버전 개정 지정
<a name="specify-package-version-revision"></a>

 패키지 버전 개정은 패키지 버전의 특정 자산 및 메타데이터 세트를 지정하는 문자열입니다. 패키지 버전 개정을 지정하여 특정 상태의 패키지 버전을 복사할 수 있습니다. 패키지 버전 개정을 지정하려면 `--version-revisions` 파라미터를 사용하여, 쉼표로 구분된 패키지 버전 하나 이상과 패키지 버전 개정 쌍을 `copy-package-versions` 명령에 전달합니다.

**참고**  
`copy-package-versions`가 있는 `--versions` 또는 `--version-revisions` 파라미터를 지정해야 합니다. 둘 다 지정할 수는 없습니다.

다음 예제에서는 패키지 버전 개정 `REVISION-1-SAMPLE-6C81EFF7DA55CC`와 함께 소스 리포지토리에 존재하는 패키지 `my-package`의 버전 0.3.2만 복사합니다.

```
aws codeartifact copy-package-versions --domain my_domain --domain-owner 111122223333 --source-repository repo-1 \
 --destination-repository repo-2 --format npm --namespace my-namespace \
 --package my-package --version-revisions 0.3.2=REVISION-1-SAMPLE-6C81EFF7DA55CC
```

다음 예제에서는 패키지 `my-package`의 두 버전(0.3.2 및 0.3.13)을 복사합니다. `my-package`의 소스 리포지토리 버전 0.3.2에 개정 `REVISION-1-SAMPLE-6C81EFF7DA55CC`가 있고 버전 0.3.13에 개정 `REVISION-2-SAMPLE-55C752BEE772FC`가 있는 경우에만 복사가 성공합니다.

```
aws codeartifact copy-package-versions --domain my_domain --domain-owner 111122223333 --source-repository repo-1 \
 --destination-repository repo-2 --format npm --namespace my-namespace \
 --package my-package --version-revisions 0.3.2=REVISION-1-SAMPLE-6C81EFF7DA55CC,0.3.13=REVISION-2-SAMPLE-55C752BEE772FC
```

 패키지 버전의 개정을 찾으려면 `describe-package-version` 또는 `list-package-versions` 명령을 사용합니다.

 자세한 내용은 *CodeArtifact API 참조*의 [패키지 버전 개정](codeartifact-concepts.md#welcome-concepts-package-version-revision) 및 [CopyPackageVersion](https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_CopyPackageVersions.html)을 참조하세요.

## npm 패키지 복사
<a name="copying-npm-packages"></a>

 npm 패키지의 `copy-package-versions` 동작에 대한 자세한 내용은 [npm 태그 및 CopyPackageVersions API](npm-tags.md#tags-and-cpv)를 참조하세요.

# 패키지 또는 패키지 버전 삭제
<a name="delete-package"></a>

`delete-package-versions` 명령을 사용하여 한 번에 하나 이상의 패키지 버전을 삭제할 수 있습니다. 리포지토리에서 관련된 모든 버전 및 구성을 포함하여 패키지를 완전히 제거하려면 `delete-package` 명령을 사용합니다. 패키지는 패키지 버전 없이 리포지토리에 존재할 수 있습니다. `delete-package-versions` 명령을 사용하여 모든 버전을 삭제하거나, `put-package-origin-configuration` API 작업을 사용하여 버전 없이 패키지를 만들면 이렇게 될 수 있습니다([패키지 원본 제어 편집](package-origin-controls.md) 참조).

**Topics**
+ [패키지 삭제(AWS CLI)](#delete-package-CLI)
+ [패키지 삭제(콘솔)](#delete-package-console)
+ [패키지 버전 삭제(AWS CLI)](#delete-package-version-CLI)
+ [패키지 버전 삭제(콘솔)](#delete-package-version-console)
+ [npm 패키지 또는 패키지 버전 삭제](#delete-package-npm)
+ [Maven 패키지 또는 패키지 버전 삭제](#delete-package-maven)
+ [패키지 또는 패키지 버전 삭제에 대한 모범 사례](#delete-package-bp)

## 패키지 삭제(AWS CLI)
<a name="delete-package-CLI"></a>

`delete-package` 명령을 사용하면 패키지를 모든 패키지 버전 및 구성과 함께 삭제할 수 있습니다. 다음 예제에서는 `my_domain` 도메인의 `my_repo` 리포지토리에 있는 `my-package`라는 PyPI 패키지를 삭제합니다.

```
aws codeartifact delete-package --domain my_domain --domain-owner 111122223333 \
--repository my_repo --format pypi \
--package my-package
```

샘플 출력:

```
{
   "deletedPackage": { 
      "format": "pypi",
      "originConfiguration": { 
         "restrictions": { 
            "publish": "ALLOW",
            "upstream": "BLOCK"
         }
      },
      "package": "my-package"
   }
}
```

동일한 패키지 이름에 대해 `describe-package`를 실행하면 패키지가 삭제되었는지 확인할 수 있습니다.

```
aws codeartifact describe-package --domain my_domain --domain-owner 111122223333 \
--repository my_repo --format pypi --package my-package
```

## 패키지 삭제(콘솔)
<a name="delete-package-console"></a>

1. [https://console.aws.amazon.com/codesuite/codeartifact/home](https://console.aws.amazon.com/codesuite/codeartifact/home) AWS CodeArtifact 콘솔을 엽니다.

1. 탐색 창에서 **리포지토리**를 선택합니다.

1. 패키지를 삭제할 **리포지토리**를 선택합니다.

1. 삭제할 **패키지**를 선택합니다.

1. **패키지 삭제**를 선택합니다.

## 패키지 버전 삭제(AWS CLI)
<a name="delete-package-version-CLI"></a>

`delete-package-versions` 명령을 사용하여 한 번에 하나 이상의 패키지 버전을 삭제할 수 있습니다. 다음 예제는 `my_domain` 도메인의 `my_repo`에 있는 `my-package`라는 PyPI 패키지의 버전 `4.0.0`, `4.0.1` 및 `5.0.0`을 삭제합니다.

```
aws codeartifact delete-package-versions --domain my_domain --domain-owner 111122223333 \
--repository my_repo --format pypi \
--package my-package --versions 4.0.0 4.0.1 5.0.0
```

샘플 출력:

```
{
   "successfulVersions": {
      "4.0.0": {
         "revision": "oxwwYC9dDeuBoCt6+PDSwL6OMZ7rXeiXy44BM32Iawo=",
            "status": "Deleted"
      },
      "4.0.1": {
         "revision": "byaaQR748wrsdBaT+PDSwL6OMZ7rXeiBKM0551aqWmo=",
            "status": "Deleted"
      },
      "5.0.0": {
         "revision": "yubm34QWeST345ts+ASeioPI354rXeiSWr734PotwRw=",
            "status": "Deleted"
      }
   },
   "failedVersions": {}
}
```

동일한 패키지 이름에 대해 `list-package-versions`를 실행하면 버전이 삭제되었는지 확인할 수 있습니다.

```
aws codeartifact list-package-versions --domain my_domain --domain-owner 111122223333 \
--repository my_repo --format pypi --package my-package
```

## 패키지 버전 삭제(콘솔)
<a name="delete-package-version-console"></a>

1. [https://console.aws.amazon.com/codesuite/codeartifact/home](https://console.aws.amazon.com/codesuite/codeartifact/home) AWS CodeArtifact 콘솔을 엽니다.

1. 탐색 창에서 **리포지토리**를 선택합니다.

1. 패키지 버전을 삭제할 **리포지토리**를 선택합니다.

1. 버전을 삭제할 **패키지**를 선택합니다.

1. 삭제할 **패키지 버전**을 선택합니다.

1. **삭제**를 선택합니다.
**참고**  
콘솔에서는 패키지 버전을 한 번에 하나만 삭제할 수 있습니다. 한 번에 두 개 이상을 삭제하려면 CLI를 사용하세요.

## npm 패키지 또는 패키지 버전 삭제
<a name="delete-package-npm"></a>

npm 패키지 또는 개별 패키지 버전을 삭제하려면 `--format` 옵션을 `npm`으로 설정하세요. 범위 내의 npm 패키지의 패키지 버전을 삭제하려면 `--namespace` 옵션을 사용하여 범위를 지정하세요. 예를 들어 `@types/react` 패키지를 복사하려면 `--namespace types`를 사용합니다. `--namespace`를 사용할 때는 `@` 기호를 생략하세요.

```
aws codeartifact delete-package-versions --domain my_domain --domain-owner 111122223333 \
--repository my_repo --format npm --namespace types \
--package react --versions 0.12.2
```

`@types/react` 패키지를 모든 관련 버전과 함께 삭제하는 방법은 다음과 같습니다.

```
aws codeartifact delete-package --domain my_domain --domain-owner 111122223333 \
--repository my_repo --format npm --namespace types \
--package react
```

## Maven 패키지 또는 패키지 버전 삭제
<a name="delete-package-maven"></a>

Maven 패키지 또는 개별 패키지 버전을 삭제하려면, `--format` 옵션을 `maven`으로 설정하고 `--namespace` 옵션과 함께 Maven 그룹 ID를 전달하고 `--name` 옵션과 함께 Maven artifactID를 전달하여 삭제할 패키지를 지정합니다. 예를 들어 아래에서는 `com.google.guava:guava`의 단일 버전을 삭제하는 방법을 확인할 수 있습니다.

```
 aws codeartifact delete-package-versions --domain my_domain --domain-owner 111122223333 \
--repository my_repo --format maven --namespace com.google.guava \
--package guava --versions 27.1-jre
```

다음 예제에서는 `com.google.guava:guava` 패키지를 모든 관련 버전과 함께 삭제하는 방법을 보여줍니다.

```
 aws codeartifact delete-package --domain my_domain --domain-owner 111122223333 \
--repository my_repo --format maven --namespace com.google.guava \
--package guava
```

## 패키지 또는 패키지 버전 삭제에 대한 모범 사례
<a name="delete-package-bp"></a>

패키지 버전을 삭제해야 하는 경우 삭제하려는 패키지 버전의 백업 복사본을 저장할 리포지토리를 생성하는 것이 좋습니다. 먼저 백업 리포지토리에 `copy-package-versions`를 직접 호출하여 이 작업을 수행할 수 있습니다.

```
aws codeartifact copy-package-versions --domain my_domain --domain-owner 111122223333 --source-repository my_repo \
 --destination-repository repo-2 --package my-package --format npm \
 --versions 6.0.2 4.0.0
```

패키지 버전을 복사한 후에는 삭제하려는 패키지 또는 패키지 버전에서 `delete-package-versions`를 호출할 수 있습니다.

```
aws codeartifact delete-package-versions --domain my_domain --domain-owner 111122223333 \
--repository my_repo --format pypi \
--package my-package --versions 4.0.0 4.0.1 5.0.0
```

# 패키지 버전 세부 정보 및 종속성 보기 및 업데이트
<a name="describe-package-version"></a>

CodeArtifact에서는 종속성을 포함한 패키지 버전 관련 정보를 확인할 수 있습니다. 패키지 버전의 상태를 업데이트할 수도 있습니다. 패키지 버전 상태에 대한 자세한 내용은 [패키지 버전 상태](packages-overview.md#package-version-status) 섹션을 참조하세요.

## 패키지 버전 세부 정보 보기
<a name="view-package-details"></a>

 `describe-package-version` 명령을 사용하여 패키지 버전 관련 세부 정보를 봅니다. 패키지 버전 세부 정보는 CodeArtifact에 게시될 때 패키지에서 추출됩니다. 각 패키지의 세부 정보는 패키지 형식과 작성자가 패키지에 추가한 정보의 양에 따라 달라집니다.

 `describe-package-version` 명령 출력에 포함되는 대부분의 정보는 패키지 형식에 따라 달라집니다. 예를 들어 `describe-package-version`은 `package.json` 파일에서 npm 패키지의 정보를 추출합니다. 개정은 CodeArtifact에서 생성합니다. 자세한 내용은 [패키지 버전 개정 지정](copy-package.md#specify-package-version-revision) 단원을 참조하십시오.

 이름이 같은 두 패키지 버전은 서로 다른 네임스페이스에 있다면 동일한 리포지토리에 존재할 수 있습니다. 선택 사항인 `--namespace` 파라미터를 사용하여 네임스페이스를 지정하세요. 자세한 내용은 [npm 패키지 버전 세부 정보 보기](#describe-package-version-npm) 또는 [Maven 패키지 버전 세부 정보 보기](#describe-package-version-maven)을 참조하세요.

 다음 예제는 `my_repo` 리포지토리에 있는 `pyhamcrest`라는 Python 패키지의 `1.9.0` 버전 관련 세부 정보를 반환합니다.

```
aws codeartifact describe-package-version --domain my_domain --domain-owner 111122223333 --repository my_repo \
--format pypi --package pyhamcrest --package-version 1.9.0
```

 출력은 다음과 같을 수 있습니다.

```
{
  "format": "pypi",
  "package": "PyHamcrest",
  "displayName": "PyHamcrest",
  "version": "1.9.0",
  "summary": "Hamcrest framework for matcher objects",
  "homePage": "https://github.com/hamcrest/PyHamcrest",
  "publishedTime": 1566002944.273,
  "licenses": [
    {
      "id": "license-id",
      "name": "license-name"
    }
  ],
  "revision": "REVISION-SAMPLE-55C752BEE9B772FC"
}
```

**참고**  
CodeArtifact는 패키지 작성자가 제공한 메타데이터에서 패키지 홈 페이지 또는 패키지 라이선스 정보와 같은 패키지 버전 세부 정보를 가져옵니다. 이 정보 중 하나라도 DynamoDB 항목 크기 제한인 400KB를 초과하는 경우 CodeArtifact는 이러한 데이터를 처리할 수 없으며 콘솔 또는 `describe-package-version`의 응답에서 이 정보를 볼 수 없습니다. 예를 들어 [https://pypi.org/project/rapyd-sdk/](https://pypi.org/project/rapyd-sdk/) 같은 Python 패키지에는 매우 큰 라이선스 필드가 있으므로 CodeArtifact에서 이 정보를 처리하지 않습니다.

## npm 패키지 버전 세부 정보 보기
<a name="describe-package-version-npm"></a>

npm 패키지 버전의 세부 정보를 보려면 `--format` 옵션 값을 **npm**으로 설정하세요. 원한다면 `--namespace` 옵션에 패키지 버전 네임스페이스(npm *범위*)를 포함해도 됩니다. `--namespace` 옵션 값에는 앞에 `@`이 올 수 없습니다. `@types` 네임스페이스를 검색하려면 값을 *유형*으로 설정하세요.

다음 예제에서는 `@types` 범위에 있는 `webpack`이라는 npm 패키지의 `4.41.5` 버전 관련 세부 정보를 반환합니다.

```
aws codeartifact describe-package-version --domain my_domain --domain-owner 111122223333 --repository my_repo \
--format npm --package webpack --namespace types --package-version 4.41.5
```

 출력은 다음과 같을 수 있습니다.

```
{
  "format": "npm",
  "namespace": "types",
  "package": "webpack",
  "displayName": "webpack",
  "version": "4.41.5",
  "summary": "Packs CommonJs/AMD modules for the browser. Allows ... further output omitted for brevity",
  "homePage": "https://github.com/webpack/webpack",
  "sourceCodeRepository": "https://github.com/webpack/webpack.git",
  "publishedTime": 1577481261.09,
  "licenses": [
    {
      "id": "license-id",
      "name": "license-name"
    }
  ],
  "revision": "REVISION-SAMPLE-55C752BEE9B772FC",
  "status": "Published",
  "origin": {
            "domainEntryPoint": {
                "externalConnectionName": "public:npmjs"
            },
            "originType": "EXTERNAL"
  }
}
```

## Maven 패키지 버전 세부 정보 보기
<a name="describe-package-version-maven"></a>

Maven 패키지 버전 세부 정보를 보려면 `--format` 옵션의 값을 `maven`으로 설정하고 `--namespace` 옵션에 패키지 버전 네임스페이스를 포함하세요.

 다음 예제는 `org.apache.commons` 네임스페이스와 `my_repo` 리포지토리에 있는 `commons-rng-client-api`라는 Maven 패키지의 `1.2` 버전 관련 세부 정보를 반환합니다.

```
aws codeartifact describe-package-version --domain my_domain --domain-owner 111122223333 --repository my_repo \
--format maven --namespace org.apache.commons --package commons-rng-client-api --package-version 1.2
```

 출력은 다음과 같을 수 있습니다.

```
{
  "format": "maven",
  "namespace": "org.apache.commons",
  "package": "commons-rng-client-api",
  "displayName": "Apache Commons RNG Client API",
  "version": "1.2",
  "summary": "API for client code that uses random numbers generators.",
  "publishedTime": 1567920624.849,
  "licenses": [],
  "revision": "REVISION-SAMPLE-55C752BEE9B772FC"
}
```

**참고**  
CodeArtifact는 상위 POM 파일에서 패키지 버전 세부 정보를 추출하지 않습니다. 지정된 패키지 버전의 메타데이터에는 정확한 패키지 버전에 대한 정보만 POM에 포함되며, 상위 POM이나 POM `parent` 태그를 사용하여 전이적으로 참조하는 다른 POM에 대한 정보는 포함되지 않습니다. 즉, `parent` 참조를 사용하여 이 메타데이터를 포함하는 Maven 패키지 버전의 경우 `describe-package-version`의 출력에서 메타데이터(예: 라이선스 정보)가 생략됩니다.

## 패키지 버전 종속성 보기
<a name="view-package-dependencies"></a>

 `list-package-version-dependencies` 명령을 사용하여 패키지 버전의 종속성 목록을 가져옵니다. 다음 명령은 `my_domain` 도메인의 `my_repo` 리포지토리에 있는 `my-package`라는 npm 패키지 버전 `4.41.5`의 종속성을 나열합니다.

```
aws codeartifact list-package-version-dependencies --domain my_domain --domain-owner 111122223333 --repository my_repo \
--format npm --package my-package --package-version 4.41.5
```

 출력은 다음과 같을 수 있습니다.

```
{
  "dependencies": [
    {
      "namespace": "webassemblyjs",
      "package": "ast",
      "dependencyType": "regular",
      "versionRequirement": "1.8.5"
    },
    {
      "namespace": "webassemblyjs",
      "package": "helper-module-context",
      "dependencyType": "regular",
      "versionRequirement": "1.8.5"
    },
    {
      "namespace": "webassemblyjs",
      "package": "wasm-edit",
      "dependencyType": "regular",
      "versionRequirement": "1.8.5"
    }
  ],
  "versionRevision": "REVISION-SAMPLE-55C752BEE9B772FC"
}
```

dependencyType 필드에 지원되는 값의 범위는 *CodeArtifact API*의 [PackageDependency](https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_PackageDependency.html) 데이터 유형을 참조하세요.

## 패키지 버전 readme 파일 보기
<a name="view-package-readme"></a>

 npm과 같은 일부 패키지 형식에는 `README` 파일이 포함되어 있습니다. `get-package-version-readme`를 사용하여 패키지 버전의 `README` 파일을 가져옵니다. 다음 명령은 `my_domain` 도메인의 `my_repo` 리포지토리에 있는 `my-package`라는 npm 패키지 버전 `4.41.5`의 `README` 파일을 반환합니다.

**참고**  
CodeArtifact는 일반 또는 Maven 패키지의 readme 파일을 표시하는 기능을 지원하지 않습니다.

```
aws codeartifact get-package-version-readme --domain my_domain --domain-owner 111122223333 --repository my_repo \
--format npm --package my-package --package-version 4.41.5
```

 출력은 다음과 같을 수 있습니다.

```
{  
  "format": "npm",
  "package": "my-package",
  "version": "4.41.5"
  "readme": "<div align=\"center\">\n   <a href=\https://github.com/webpack/webpack\"> ... more content ... \n",
  "versionRevision": "REVISION-SAMPLE-55C752BEE9B772FC"
}
```

# 패키지 버전 상태 업데이트
<a name="update-package-version-status"></a>

CodeArtifact의 각 패키지 버전에는 패키지 버전의 현재 상태 및 가용성을 설명하는 상태가 적용됩니다. AWS CLI 및 콘솔을 모두 사용하여 패키지 버전 상태를 변경할 수 있습니다.

**참고**  
사용 가능한 상태 목록을 포함한 패키지 버전 상태에 대한 자세한 내용은 [패키지 버전 상태](packages-overview.md#package-version-status) 섹션을 참조하세요.

## 패키지 버전 상태 업데이트
<a name="updating-pv-status"></a>

패키지 버전의 상태를 설정하면 리포지토리에서 패키지 버전을 완전히 삭제하지 않고도 패키지 버전 사용 방법을 제어할 수 있습니다. 예를 들어 패키지 버전의 상태가 `Unlisted`라면 정상적으로 다운로드할 수는 있지만, `npm view` 같은 명령으로 반환되는 패키지 버전 목록에 표시되지는 않습니다. [UpdatePackageVersionsStatus API](https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_UpdatePackageVersionsStatus.html)를 사용하면 단일 API 직접 호출로 동일한 패키지의 여러 버전에 대한 패키지 버전 상태를 설정할 수 있습니다. 다양한 상태에 대한 설명은 [패키지 개요](packages-overview.md) 섹션을 참조하세요.

`update-package-versions-status` 명령을 사용하여 패키지 버전의 상태를 `Published`, `Unlisted` 또는 `Archived`로 변경합니다. 명령을 사용하는 데 필요한 IAM 권한을 보려면 [패키지 버전 상태를 업데이트하는 데 필요한 IAM 권한](#update-package-version-status-iam) 섹션을 참조하세요. 다음 예제는 npm 패키지 `chalk` 버전 4.1.0의 상태를 `Archived`로 설정합니다.

```
aws codeartifact update-package-versions-status --domain my_domain
 --domain-owner 111122223333 --repository my_repo --format npm --package chalk 
--versions 4.1.0 --target-status Archived
```

샘플 출력:

```
{
    "successfulVersions": {
        "4.1.0": {
            "revision": "+Oz8skWbwY3k8M6SrNIqNj6bVH/ax+CxvkJx+No5j8I=",
            "status": "Archived"
        }
    },
    "failedVersions": {}
}
```

이 예제에서는 npm 패키지를 사용하지만 명령은 다른 형식에서도 동일하게 작동합니다. 단일 명령을 사용하여 여러 버전을 동일한 대상 상태로 전환할 수 있습니다. 다음 예제를 참조하세요.

```
aws codeartifact update-package-versions-status --domain my_domain
 --domain-owner 111122223333 --repository my_repo --format npm --package chalk 
--versions 4.1.0 4.1.1 --target-status Archived
```

샘플 출력:

```
{
    "successfulVersions": {
        "4.1.0": {
            "revision": "25/UjBleHs1DZewk+zozoeqH/R80Rc9gL1P8vbzVMJ4=",
            "status": "Archived"
        },
        "4.1.1": {
            "revision": "+Oz8skWbwY3k8M6SrNIqNj6bVH/ax+CxvkJx+No5j8I=",
            "status": "Archived"
        }
    },
    "failedVersions": {}
}
```

게시한 패키지 버전은 `Unfinished` 상태로 되돌릴 수 없으며, 따라서 이 상태는 `--target-status` 파라미터 값으로 사용할 수 없습니다. 패키지 버전을 `Disposed` 상태로 전환하려면 아래 설명처럼 `dispose-package-versions` 명령을 대신 사용하세요.

## 패키지 버전 상태를 업데이트하는 데 필요한 IAM 권한
<a name="update-package-version-status-iam"></a>

패키지에 대한 `update-package-versions-status`를 요청하려면 패키지 리소스에 대한 `codeartifact:UpdatePackageVersionsStatus` 권한이 있어야 합니다. 즉, 패키지별로 `update-package-versions-status`를 호출하는 권한을 부여할 수 있습니다. 예를 들어 npm 패키지 *chalk*에서 `update-package-versions-status`를 호출할 수 있는 권한을 부여하는 IAM 정책에는 다음과 같은 설명이 포함됩니다.

```
{
  "Action": [
    "codeartifact:UpdatePackageVersionsStatus"
  ],
  "Effect": "Allow",
  "Resource": "arn:aws:codeartifact:us-east-1:111122223333:package/my_domain/my_repo/npm//chalk"
}
```

## 범위가 지정된 npm 패키지의 상태 업데이트
<a name="update-package-version-status-scoped-npm"></a>

범위가 지정된 npm 패키지 버전의 패키지 버전 상태를 업데이트하려면 `--namespace` 파라미터를 사용하세요. 예를 들어 `@nestjs/core`의 버전 8.0.0을 나열하지 않으려면 다음 명령을 사용합니다.

```
aws codeartifact update-package-versions-status --domain my_domain
 --domain-owner 111122223333 --repository my_repo --format npm --namespace nestjs 
--package core --versions 8.0.0 --target-status Unlisted
```

## Maven 패키지의 상태 업데이트
<a name="update-package-version-status-maven"></a>

Maven 패키지에는 항상 그룹 ID가 있으며, CodeArtifact에서는 이를 네임스페이스라고 합니다. `update-package-versions-status`를 호출할 때 `--namespace` 파라미터를 사용하여 Maven 그룹 ID를 지정합니다. 예를 들어 Maven 패키지 `org.apache.logging.log4j:log4j`의 버전 2.13.1을 보관하려면 다음 명령을 사용합니다.

```
aws codeartifact update-package-versions-status --domain my_domain
 --domain-owner 111122223333 --repository my_repo --format maven 
--namespace org.apache.logging.log4j --package log4j 
--versions 2.13.1 --target-status Archived
```

## 패키지 버전 개정 지정
<a name="update-status-specify-package-version-revision"></a>

패키지 버전 개정은 패키지 버전의 특정 자산 및 메타데이터 세트를 지정하는 문자열입니다. 패키지 버전 개정을 지정하여 특정 상태에 있는 패키지 버전의 상태를 업데이트할 수 있습니다. 패키지 버전 개정을 지정하려면 `--version-revisions` 파라미터를 사용하여, 쉼표로 구분된 패키지 버전 하나 이상과 패키지 버전 개정 쌍을 명령에 전달해야 합니다. 패키지 버전의 상태는 패키지 버전의 현재 개정이 지정된 값과 일치하는 경우에만 업데이트됩니다.

**참고**  
`--version-revisions` 파라미터를 사용할 때는 `—-versions` 파라미터도 정의해야 합니다.

```
aws codeartifact update-package-versions-status --domain my_domain 
   --domain-owner 111122223333 --repository my_repo --format npm --package chalk 
   --version-revisions "4.1.0=25/UjBleHs1DZewk+zozoeqH/R80Rc9gL1P8bzVMJ4=" 
   --versions 4.1.0 --target-status Archived
```

단일 명령으로 여러 버전을 업데이트하려면 쉼표로 구분된 버전 및 버전 개정 쌍 목록을 `--version-revisions` 옵션에 전달해야 합니다. 다음 예제 명령은 서로 다른 두 가지 패키지 버전과 패키지 버전 개정 쌍을 정의합니다.

```
aws codeartifact update-package-versions-status --domain my_domain 
 --domain-owner 111122223333 --repository my_repo --format npm 
 --package chalk
 --version-revisions "4.1.0=25/UjBleHs1DZewk+zozoeqH/R80Rc9gL1P8vbzVMJ4=,4.0.0=E3lhBp0RObRTut4pkjV5c1AQGkgSA7Oxtil6hMMzelc="  
 --versions 4.1.0 4.0.0 --target-status Published
```

샘플 출력:

```
{
    "successfulVersions": {
        "4.0.0": {
            "revision": "E3lhBp0RObRTut4pkjV5c1AQGkgSA7Oxtil6hMMzelc=",
            "status": "Published"
        },
        "4.1.0": {
            "revision": "25/UjBleHs1DZewk+zozoeqH/R80Rc9gL1P8vbzVMJ4=",
            "status": "Published"
        }
    },
    "failedVersions": {}
}
```

여러 패키지 버전을 업데이트하는 경우 `--version-revisions`에 전달된 버전이 `--versions`에 전달된 버전과 동일해야 합니다. 개정을 잘못 지정하면 해당 버전의 상태가 업데이트되지 않습니다.

## 예상 상태 파라미터 사용
<a name="using-expected-status"></a>

`update-package-versions-status` 명령은 패키지 버전의 예상 현재 상태 지정을 지원하는 `--expected-status` 파라미터를 제공합니다. 현재 상태가 `--expected-status`에 전달된 값과 일치하지 않으면 해당 패키지 버전의 상태가 업데이트되지 않습니다.

예를 들어 *my\$1repo*의 경우 npm 패키지 `chalk`의 버전 4.0.0 및 4.1.0은 현재 상태가 `Published`입니다. 예상 상태를 `Unlisted`로 지정하는 `update-package-versions-status`를 호출하면, 상태 불일치 때문에 두 패키지 버전 모두가 업데이트되지 않습니다.

```
aws codeartifact update-package-versions-status --domain my_domain
--domain-owner 111122223333 --repository my_repo --format npm --package chalk 
--versions 4.1.0 4.0.0 --target-status Archived --expected-status Unlisted
```

샘플 출력:

```
{
    "successfulVersions": {},
    "failedVersions": {
        "4.0.0": {
            "errorCode": "MISMATCHED_STATUS",
            "errorMessage": "current status: Published, expected status: Unlisted"
        },
        "4.1.0": {
            "errorCode": "MISMATCHED_STATUS",
            "errorMessage": "current status: Published, expected status: Unlisted"
        }
    }
}
```

## 개별 패키지 버전 관련 오류
<a name="update-package-version-status-errors"></a>

`update-package-versions-status` 호출 시 패키지 버전 상태가 업데이트되지 않는 데는 다양한 이유가 있습니다. 대표적인 이유는 패키지 버전 개정이 잘못 지정되었거나 예상 상태가 현재 상태와 일치하지 않는 것입니다. 이 경우 버전은 API 응답의 `failedVersions` 맵에 포함됩니다. 한 버전에 오류가 발생하면 `update-package-versions-status`에 대한 동일한 호출에 지정된 다른 버전을 건너뛰며 상태가 업데이트되지 않을 수 있습니다. 이러한 버전도 `SKIPPED` `errorCode`가 있는 `failedVersions` 맵에 포함됩니다.

현재 `update-package-versions-status` 구현에서는 하나 이상의 버전이 상태를 변경할 수 없는 경우 다른 버전은 모두 건너뜁니다. 즉, 모든 버전이 성공적으로 업데이트되거나 어떤 버전도 업데이트되지 않게 됩니다. 이 동작은 API 계약에서 보장되지 않습니다. 향후에는 `update-package-versions-status`에 대한 단일 호출에서 일부 버전은 성공하지만 다른 버전은 실패하게 될 것입니다.

다음 예제 명령에는 패키지 버전 개정 불일치 때문에 발생한 버전 상태 업데이트 실패가 포함되어 있습니다. 이 업데이트 실패 때문에 다른 버전 상태 업데이트 호출은 건너뛰게 됩니다.

```
aws codeartifact update-package-versions-status --domain my_domain
  --domain-owner 111122223333 --repository my_repo 
  --format npm --package chalk 
  --version-revisions "4.1.0=25/UjBleHs1DZewk+zozoeqH/R80Rc9gL1P8vbzVMJ=,4.0.0=E3lhBp0RObRTut4pkjV5c1AQGkgSA7Oxtil6hMMzelc=" 
  --versions 4.1.0 4.0.0 --target-status Archived
```

샘플 출력:

```
{
    "successfulVersions": {},
    "failedVersions": {
        "4.0.0": {
            "errorCode": "SKIPPED",
            "errorMessage": "version 4.0.0 is skipped"
        },
        "4.1.0": {
            "errorCode": "MISMATCHED_REVISION",
            "errorMessage": "current revision: 25/UjBleHs1DZewk+zozoeqH/R80Rc9gL1P8vbzVMJ4=, expected revision: 25/UjBleHs1DZewk+zozoeqH/R80Rc9gL1P8vbzVMJ="
        }
    }
}
```

## 패키지 버전 폐기
<a name="dispose-package-versions"></a>

`Disposed` 패키지 상태는 `Archived`에 대한 동작과 비슷하지만, CodeArtifact에서 패키지 자산을 영구적으로 삭제하기 때문에 도메인 소유자의 계정에 자산 스토리에 대한 요금이 더 이상 청구되지 않는다는 점이 다릅니다. 각 패키지 버전 상태에 대한 자세한 내용은 [패키지 버전 상태](packages-overview.md#package-version-status) 섹션을 참조하십시오. 패키지 버전의 상태를 `Disposed`로 변경하려면 `dispose-package-versions` 명령을 사용합니다. 이 기능은 `update-package-versions-status`와는 별개인데, 패키지 버전 폐기는 되돌릴 수 없기 때문입니다. 패키지 자산은 삭제되기 때문에 버전 상태를 `Archived`, `Unlisted` 또는 `Published`로 되돌릴 수 없습니다. 폐기된 패키지 버전에 대해 취할 수 있는 유일한 조치는 `delete-package-versions` 명령을 사용하여 삭제하는 것입니다.

`dispose-package-versions`를 성공적으로 호출하려면, 호출하는 IAM 보안 주체에 패키지 리소스에 대한 `codeartifact:DisposePackageVersions` 권한이 있어야 합니다.

`dispose-package-versions` 명령의 동작은 `update-package-versions-status`와 비슷하며, [버전 개정](#update-status-specify-package-version-revision) 및 [예상 상태](#using-expected-status) 섹션에서 설명하는 `--version-revisions ` 및 `--expected-status` 옵션의 동작도 마찬가지입니다. 예를 들어 다음 명령은 패키지 버전 폐기를 시도하지만 예상 상태가 일치하지 않아 실패하게 됩니다.

```
aws codeartifact dispose-package-versions —domain my_domain --domain-owner 111122223333 
--repository my_repo --format npm --package chalk --versions 4.0.0 
--expected-status Unlisted
```

샘플 출력:

```
{
    "successfulVersions": {},
    "failedVersions": {
        "4.0.0": {
            "errorCode": "MISMATCHED_STATUS",
            "errorMessage": "current status: Published, expected status: Unlisted"
        }
    }
}
```

`--expected-status`를 `Published`로 하여 동일한 명령을 다시 실행하면 폐기에 성공하게 됩니다.

```
aws codeartifact dispose-package-versions —domain my_domain --domain-owner 111122223333 
--repository my_repo --format npm --package chalk --versions 4.0.0 
--expected-status Published
```

샘플 출력:

```
{
    "successfulVersions": {
        "4.0.0": {
            "revision": "E3lhBp0RObRTut4pkjV5c1AQGkgSA7Oxtil6hMMzelc=",
            "status": "Disposed"
        }
    },
    "failedVersions": {}
}
```

# 패키지 원본 제어 편집
<a name="package-origin-controls"></a>

In AWS CodeArtifact에서는 패키지 버전을 리포지토리에 직접 게시하거나, 업스트림 리포지토리에서 가져오거나, 외부 퍼블릭 리포지토리에서 수집하여 패키지 버전을 리포지토리에 추가할 수 있습니다. 직접 게시와 퍼블릭 리포지토리에서 수집하는 방법 모두를 통해 패키지의 패키지 버전을 추가할 수 있기 때문에, 종속성 대체 공격에 취약해집니다. 자세한 내용은 [종속성 대체 공격](dependency-substitution-attacks.md) 단원을 참조하십시오. 종속성 대체 공격을 방어하는 대표적인 방법은 리포지토리의 패키지에서 패키지 원본 제어를 구성하여 패키지 버전을 리포지토리에 추가하는 방법을 제한하는 것입니다.

직접 게시 같은 내부 소스와 퍼블릭 리포지토리 같은 외부 소스 모두에서 서로 다른 패키지의 새 버전을 가져오고 싶은 팀은 패키지 원본 제어 구성을 고려해야 합니다. 기본적으로 패키지 원본 제어는 패키지의 첫 번째 버전이 리포지토리에 추가되는 방식을 기반으로 구성됩니다. 패키지 원본 컨트롤 설정 및 기본값에 대한 자세한 내용은 [패키지 원본 제어 설정](#package-origin-control-settings) 섹션을 참조하세요.

`put-package-origin-configuration` API 작업을 사용한 후 패키지 기록을 제거하려면 `delete-package`를 사용하세요([패키지 또는 패키지 버전 삭제](delete-package.md) 참조).

## 일반적인 패키지 액세스 제어 시나리오
<a name="package-origin-control-scenarios"></a>

이 섹션에는 CodeArtifact 리포지토리에 패키지 버전이 추가되는 일반적인 시나리오가 포함되어 있습니다. 새 패키지에 대한 패키지 원본 제어 설정은 첫 번째 패키지 버전이 추가되는 방식에 따라 설정됩니다.

다음 시나리오에서 *내부 패키지*는 패키지 관리자가 리포지토리에 직접 게시하는 패키지(예: 사용자 또는 사용자 팀이 작성하고 유지 관리하는 패키지)입니다. *외부 패키지*는 외부 연결을 통해 리포지토리에 수집될 수 있는 퍼블릭 리포지토리에 있는 패키지입니다.

**외부 패키지 버전은 기존 내부 패키지를 대상으로 게시됩니다.**

이 시나리오에서는 내부 패키지인 *packageA*를 가정합니다. 팀은 *packageA*의 첫 번째 패키지 버전을 CodeArtifact 리포지토리에 게시합니다. 이 패키지의 첫 번째 패키지 버전이므로, 패키지 원본 제어 설정은 **게시: 허용** 및 **업스트림: 차단**으로 자동 설정됩니다. 패키지가 리포지토리에 존재하면, CodeArtifact 리포지토리에 연결된 퍼블릭 리포지토리에 같은 이름의 패키지가 게시됩니다. 이것은 내부 패키지에 대한 종속성 대체 공격 시도일 수도 있고 단순한 우연의 일치일 수도 있습니다. 하지만 패키지 원본 제어는 새로운 외부 버전의 수집을 차단하여 잠재적 공격을 방어하도록 구성되어 있습니다.

다음 이미지에서 *repoA*는 퍼블릭 리포지토리에 대한 외부 연결이 있는 CodeArtifact 리포지토리입니다. 리포지토리에 *packageA* 버전 1.1 및 2.1이 있지만 버전 3.0은 퍼블릭 리포지토리에 게시됩니다. 일반적으로 *repoA*는 패키지 관리자가 패키지를 요청한 후 버전 3.0을 수집합니다. 패키지 수집이 **차단**으로 설정되어 있기 때문에 버전 3.0은 CodeArtifact 리포지토리에 수집되지 않으며 이 리포지토리에 연결된 패키지 관리자가 사용할 수 없습니다.

![\[퍼블릭 리포지토리에서 차단된 새 외부 패키지 버전을 보여주는 간단한 그래픽입니다.\]](http://docs.aws.amazon.com/ko_kr/codeartifact/latest/ug/images/package-origin-controls-one.png)


**내부 패키지 버전은 기존 외부 패키지를 대상으로 게시됩니다.**

이 시나리오에서는 패키지인 *packageB*가 리포지토리에 연결된 퍼블릭 리포지토리의 외부에 존재합니다. 리포지토리에 연결된 패키지 관리자가 *packageB*를 요청하면 해당 패키지 버전이 퍼블릭 리포지토리에서 사용자의 리포지토리로 수집됩니다. 이것은 리포지토리에 추가된 *packageB*의 첫 번째 패키지 버전이므로, 패키지 원본 설정은 **게시: 차단** 및 **업스트림: 허용**으로 구성됩니다. 나중에 패키지 이름이 동일한 버전을 리포지토리에 게시합니다. 퍼블릭 패키지를 모르는 상태에서 관련 없는 패키지를 같은 이름으로 게시하려고 하거나, 패치가 적용된 버전을 게시하려고 하거나, 이미 외부에 있는 패키지 버전을 직접 게시하게 됩니다. CodeArtifact는 사용자가 게시하려는 버전을 거부하지만, 사용자가 거부를 명시적으로 무시하고 필요한 경우에만 버전을 게시할 수 있습니다.

다음 이미지에서 *repoA*는 퍼블릭 리포지토리에 대한 외부 연결이 있는 CodeArtifact 리포지토리입니다. 리포지토리에는 퍼블릭 리포지토리에서 수집된 버전 3.0이 포함되어 있습니다. 버전 1.1을 리포지토리에 게시하려 합니다. 일반적으로 버전 1.2를 *repoA*에 게시할 수 있지만 게시가 **차단**으로 설정되어 있기 때문에 버전 1.2는 게시할 수 없습니다.

![\[퍼블릭 리포지토리에서 차단된 새 외부 패키지 버전을 보여주는 간단한 그래픽입니다.\]](http://docs.aws.amazon.com/ko_kr/codeartifact/latest/ug/images/package-origin-controls-two.png)


**기존 외부 패키지의 패치가 적용된 패키지 버전 게시**

이 시나리오에서는 패키지인 *packageB*가 리포지토리에 연결된 퍼블릭 리포지토리의 외부에 존재합니다. 리포지토리에 연결된 패키지 관리자가 *packageB*를 요청하면 해당 패키지 버전이 퍼블릭 리포지토리에서 사용자의 리포지토리로 수집됩니다. 이것은 사용자의 리포지토리에 추가된 *packageB*의 첫 번째 패키지 버전이므로, 패키지 원본 설정은 **게시: 차단** 및 **업스트림: 허용**으로 구성됩니다. 팀에서 이 패키지의 패치가 적용된 패키지 버전을 리포지토리에 게시하기로 합니다. 패키지 버전을 직접 게시하기 위해 팀은 패키지 원본 제어 설정을 **게시: 허용** 및 **업스트림: 차단**으로 변경합니다. 이제 이 패키지의 버전을 리포지토리에 직접 게시하고 퍼블릭 리포지토리에서 수집할 수 있습니다. 팀에서 패치된 패키지 버전을 게시하면 패키지 원본 설정을 **게시: 차단** 및 **업스트림: 허용**으로 되돌립니다.

## 패키지 원본 제어 설정
<a name="package-origin-control-settings"></a>

패키지 원본 제어를 사용하여 패키지 버전을 리포지토리에 추가하는 방법을 구성할 수 있습니다. 다음 목록에는 사용 가능한 패키지 원본 제어 설정 및 값이 포함되어 있습니다.

**참고**  
패키지 그룹에서 원본 제어를 구성할 때는 사용 가능한 설정과 값이 다릅니다. 자세한 내용은 [패키지 그룹 원본 제어](package-group-origin-controls.md) 단원을 참조하십시오.

**게시**

이 설정은 패키지 관리자 또는 이와 유사한 도구를 사용하여 패키지 버전을 리포지토리에 직접 게시할 수 있는지를 구성합니다.
+ **허용**: 패키지 버전을 직접 게시할 수 있습니다.
+ **차단**: 패키지 버전을 직접 게시할 수 없습니다.

**업스트림**

이 설정은 패키지 관리자가 요청하는 경우 패키지 버전을 외부 또는 퍼블릭 리포지토리에서 수집하거나 업스트림 리포지토리에서 유지할 수 있는지를 구성합니다.
+ **허용**: 모든 패키지 버전은 업스트림 리포지토리로 구성된 다른 CodeArtifact 리포지토리에서 유지하거나 외부 연결을 통해 공개 소스에서 수집할 수 있습니다.
+ **차단**: 패키지 버전은 업스트림 리포지토리로 구성된 다른 CodeArtifact 리포지토리에서 유지하거나 외부 연결을 통해 공개 소스에서 수집할 수 없습니다.

## 기본 패키지 원본 제어 설정
<a name="default-package-origin-control-settings"></a>

기본 패키지 원본 제어 설정은 패키지의 연결된 패키지 그룹 원본 제어 설정을 기반으로 구성됩니다. 패키지 그룹 및 패키지 그룹 원본 제어에 대한 자세한 내용은 [CodeArtifact에서의 패키지 그룹 작업](package-groups.md) 및 [패키지 그룹 원본 제어](package-group-origin-controls.md) 섹션을 참조하세요.

패키지가 모든 제한 유형에 대해 제한 설정이 `ALLOW`인 패키지 그룹과 연결된 경우 패키지에 대한 기본 패키지 원본 제어는 해당 패키지의 첫 번째 버전이 리포지토리에 추가되는 방법을 기반으로 합니다.
+ 패키지 관리자가 첫 번째 패키지 버전을 직접 게시하는 경우 설정은 **게시: 허용** 및 **업스트림: 차단**이 됩니다.
+ 첫 번째 패키지 버전을 공개 소스에서 수집하는 경우 설정은 **게시: 차단** 및 **업스트림: 허용**이 됩니다.

**참고**  
2022년 5월 이전에 CodeArtifact 리포지토리에 존재했던 패키지는 기본 패키지 원본 제어가 **게시: 허용** 및 **업스트림: 허용**으로 설정됩니다. 이러한 패키지에서는 패키지 원본 제어를 수동으로 설정해야 합니다. 현재 기본값은 2022년 5월 이후로 새 패키지에 설정되었고, 2022년 7월 14일 기능이 출시되면서 실행되기 시작했습니다. 패키지 원본 제어 설정에 대한 자세한 내용은 [패키지 원본 제어 편집](#edit-package-origin-controls) 섹션을 참조하세요.

그렇지 않으면 패키지가 `BLOCK` 또는 `ALLOW_SPECIFIC_REPOSITORIES`의 제한 설정이 하나 이상 있는 패키지 그룹과 연결된 경우 해당 패키지의 기본 원본 제어 설정이 **게시: 허용** 및 **업스트림: 허용**으로 설정됩니다.

## 패키지 원본 제어가 패키지 그룹 원본 제어와 상호 작용하는 방법
<a name="package-origin-controls-interaction-package-groups"></a>

패키지에 원본 제어 설정이 있고 연결된 패키지 그룹에도 원본 제어 설정이 있으므로 이러한 서로 다른 두 설정이 서로 어떻게 상호 작용하는지 이해하는 것이 중요합니다.

두 설정 간의 상호 작용은 `BLOCK`의 설정이 항상 `ALLOW`의 설정보다 우선한다는 것입니다. 다음 표에는 몇 가지 예제 구성과 해당 유효 원본 제어 설정이 나와 있습니다.


| 패키지 원본 제어 설정 | 패키지 그룹 원본 제어 설정 | 유효 원본 제어 설정 | 
| --- | --- | --- | 
| 게시: 허용업스트림: 허용 | 게시: 허용업스트림: 허용 | 게시: 허용업스트림: 허용 | 
| 게시: 차단업스트림: 허용 | 게시: 허용업스트림: 허용 | 게시: 차단업스트림: 허용 | 
| 게시: 허용업스트림: 허용 | 게시: 허용업스트림: 차단 | 게시: 허용업스트림: 차단 | 

즉, 원본 설정이 **게시: 허용** 및 **업스트림: 허용**인 패키지는 사실상 연결된 패키지 그룹의 원본 제어 설정을 따르고 있음을 의미합니다.

## 패키지 원본 제어 편집
<a name="edit-package-origin-controls"></a>

패키지 원본 제어는 패키지 첫 번째 패키지 버전이 리포지토리에 추가되는 방식에 따라 자동으로 구성됩니다. 자세한 내용은 [기본 패키지 원본 제어 설정](#default-package-origin-control-settings) 섹션을 참조하세요. CodeArtifact 리포지토리에서 패키지의 패키지 원본 제어를 추가하거나 편집하려면 다음 절차의 단계를 수행하세요.

**패키지 원본 제어 추가 또는 편집(콘솔)**

1. [https://console.aws.amazon.com/codesuite/codeartifact/home](https://console.aws.amazon.com/codesuite/codeartifact/home) AWS CodeArtifact 콘솔을 엽니다.

1. 탐색 창에서 **리포지토리**를 선택한 다음 수정할 패키지가 포함된 리포지토리를 선택합니다.

1. **패키지** 테이블에서 편집할 패키지를 검색하여 선택합니다.

1. 패키지 요약 페이지의 **원본 제어**에서 **편집**을 선택합니다.

1. **원본 제어 편집**에서 이 패키지에 설정할 패키지 원본 제어를 선택합니다. 패키지 원본 제어 설정인 게시와 업스트림을 동시에 설정해야 합니다.
   + 패키지 버전을 직접 게시할 수 있도록 허용하려면 **게시**에서 **허용**을 선택합니다. 패키지 버전 게시를 차단하려면 **차단**을 선택합니다.
   + 외부 리포지토리에서 패키지를 수집하고 업스트림 리포지토리에서 패키지를 가져오도록 허용하려면 **업스트림 소스**에서 **허용**을 선택합니다. 외부 및 업스트림 리포지토리에서의 패키지 버전 수집과 가져오기를 모두 차단하려면 **차단**을 선택합니다.

**패키지 원본 제어 추가 또는 편집(AWS CLI)**

1. 그렇지 않은 경우의 단계에 AWS CLI 따라를 구성합니다[with AWS CodeArtifact 설정](get-set-up-for-codeartifact.md).

1. `put-package-origin-configuration` 명령을 사용하여 패키지 원본 제어를 추가하거나 편집합니다. 다음 필드를 교체합니다.
   + *my\$1domain*을 업데이트할 패키지가 들어 있는 CodeArtifact 도메인으로 바꿉니다.
   + *my\$1repo*를 업데이트할 패키지가 들어 있는 CodeArtifact 리포지토리로 바꿉니다.
   + *npm*을 업데이트할 패키지의 패키지 형식으로 바꿉니다.
   + *my\$1package*를 업데이트할 패키지의 이름으로 바꿉니다.
   + *허용* 및 *차단*을 원하는 패키지 원본 제어 설정으로 바꿉니다.

   ```
   aws codeartifact put-package-origin-configuration --domain my_domain \
   --repository my_repo --format npm --package my_package \ 
   --restrictions publish=ALLOW,upstream=BLOCK
   ```

## 리포지토리 게시 및 업스트림
<a name="package-publishing-upstreams"></a>

CodeArtifact에서는 연결 가능한 업스트림 리포지토리 또는 퍼블릭 리포지토리에 있는 패키지 버전을 게시할 수 없습니다. 예를 들어 Maven 패키지 `com.mycompany.mypackage:1.0`을 리포지토리 `myrepo`에 게시하려고 하는데 `myrepo`에 Maven Central과의 외부 연결이 있는 업스트림 리포지토리가 있다고 가정해 보겠습니다. 다음 시나리오를 고려해 보세요.

1. `com.mycompany.mypackage`에서의 패키지 원본 제어 설정은 **게시: 허용**과 **업스트림: 허용**입니다. `com.mycompany.mypackage:1.0`이 업스트림 리포지토리 또는 Maven Central에 있다면, CodeArtifact는 `myrepo`에서 이에 게시하려는 모든 시도를 거부하며 409 충돌 오류가 발생합니다. `com.mycompany.mypackage:1.1` 같은 다른 버전은 게시할 수 있습니다.

1. `com.mycompany.mypackage`에서의 패키지 원본 제어 설정은 **게시: 허용**과 **업스트림: 차단**입니다. `com.mycompany.mypackage`의 모든 버전은 아직 존재하지 않는 리포지토리에 게시할 수 있습니다. 패키지 버전에 연결할 수 없기 때문입니다.

1. `com.mycompany.mypackage`에서의 패키지 원본 제어 설정은 **게시: 차단**과 **업스트림: 하용**입니다. 패키지 버전은 리포지토리에 직접 게시할 수 없습니다.