

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

# 업스트림 리포지토리가 포함된 패키지 버전 요청
<a name="repo-upstream-behavior"></a>

 클라이언트(예: npm)가 여러 업스트림 리포지토리가 있는 `my_repo` 이름이 지정된 CodeArtifact 리포지토리에서 패키지 버전을 요청하면 다음과 같은 상황이 발생할 수 있습니다.
+  요청된 패키지 버전이 `my_repo`에 포함되어 있는 경우 클라이언트에 반환됩니다.
+  요청된 패키지 버전이 `my_repo`에 포함되어 있지 않은 경우 CodeArtifact는 `my_repo` 업스트림 리포지토리에서 해당 버전을 찾습니다. 패키지 버전을 찾으면 해당 패키지에 대한 참조가 `my_repo`에 복사되고 패키지 버전이 클라이언트에 반환됩니다.
+  `my_repo` 및 해당 업스트림 리포지토리 모두에 패키지 버전이 포함되어 있지 않은 경우 HTTP 404 `Not Found` 응답이 클라이언트에 반환됩니다.

 `create-repository` 또는 `update-repository` 명령을 사용하여 업스트림 리포지토리를 추가할 경우 패키지 버전 요청 시 우선 순위는 `--upstreams` 파라미터에 전달되는 순서에 따라 결정됩니다. `--upstreams`를 사용하여 패키지 버전이 요청될 때 CodeArtifact가 사용할 순서대로 업스트림 리포지토리를 지정합니다. 자세한 내용은 [업스트림 리포지토리 우선순위 순서](repo-upstream-search-order.md) 단원을 참조하십시오.

 하나의 리포지토리에 허용되는 최대 직접 업스트림 리포지토리 수는 10개입니다. 직접 업스트림 리포지토리에도 자체 업스트림 리포지토리가 있을 수 있으므로 CodeArtifact는 10개 이상의 리포지토리에서 패키지 버전을 검색할 수 있습니다. 패키지 버전이 요청될 때 CodeArtifact가 확인하는 최대 리포지토리 수는 25개입니다.

## 업스트림 리포지토리의 패키지 보존
<a name="package-retention-upstream-repos"></a>

 요청된 패키지 버전이 업스트림 저장소에서 발견되면 해당 버전에 대한 참조가 유지되며 다운스트림 저장소에서 항상 사용할 수 있습니다. 유지되는 패키지 버전은 다음 사항에 영향을 받지 않습니다.
+  업스트림 리포지토리 삭제 
+  업스트림 리포지토리와 다운스트림 리포지토리 간 연결 해제 
+  업스트림 리포지토리에서 패키지 버전 삭제 
+  업스트림 리포지토리의 패키지 버전 편집(예: 새 자산 추가) 

## 업스트림 관계를 통해 패키지 가져오기
<a name="fetching-packages-through-an-upstream-relationship"></a>

CodeArtifact 리포지토리가 외부 연결이 있는 리포지토리와 업스트림 관계에 있는 경우 업스트림 리포지토리에 없는 패키지에 대한 요청은 외부 리포지토리에서 복사됩니다. 예를 들어, 다음과 같은 구성을 살펴보겠습니다. `repo-A` 이름이 지정된 리포지토리에는 `repo-B` 이름이 지정된 업스트림 저장소가 있고 `repo-B`는 [https://npmjs.com](https://npmjs.com)에 대한 외부 연결이 있습니다.

![\[세 개의 리포지토리가 서로 연결되어 있는 것을 보여주는 간단한 업스트림 저장소 다이어그램\]](http://docs.aws.amazon.com/ko_kr/codeartifact/latest/ug/images/upstream-with-external.png)


`npm`이 `repo-A` 리포지토리를 사용하도록 구성된 경우 `npm install`을 실행하면 [https://npmjs.com](https://npmjs.com)에서 `repo-B`로 패키지 복사가 트리거됩니다. 설치된 버전도 함께 `repo-A`로 가져옵니다. 다음 예제에서는 `lodash`를 설치합니다.

```
$ npm config get registry
https://my_domain-111122223333.d.codeartifact.us-west-2.amazonaws.com/npm/my-downstream-repo/
$ npm install lodash
+ lodash@4.17.20
added 1 package from 2 contributors in 6.933s
```

`npm install`을 실행한 후에는 `repo-A`에는 최신 버전(`lodash 4.17.20`)만 포함됩니다. 해당 버전이 `repo-A`에서 `npm`를 통해 가져온 버전이기 때문입니다.

```
aws codeartifact list-package-versions --repository repo-A --domain my_domain \
            --domain-owner 111122223333 --format npm --package lodash
```

출력 예시:

```
{
    "package": "lodash",
    "format": "npm",
    "versions": [
        {
            "version": "4.17.15",
            "revision": "REVISION-1-SAMPLE-6C81EFF7DA55CC",
            "status": "Published"
        }
    ]
}
```

 `repo-B`에 [https://npmjs.com](https://npmjs.com)에 대한 외부 연결이 있기 때문에 [https://npmjs.com](https://npmjs.com)에서 가져온 모든 패키지 버전이 `repo-B`에 저장됩니다. 이러한 패키지 버전은 `repo-B`와 업스트림 관계가 있는 모든 다운스트림 리포지토리에서 가져올 수 있었을 것입니다.

`repo-B`의 내용은 시간이 지남에 따라 [https://npmjs.com](https://npmjs.com)에서 가져온 모든 패키지 및 패키지 버전을 볼 수 있는 방법을 제공합니다. 예를 들어, 시간이 지남에 따라 가져온 `lodash` 패키지의 모든 버전을 보려면 다음과 같이 `list-package-versions`를 사용할 수 있습니다.

```
aws codeartifact list-package-versions --repository repo-B --domain my_domain \
            --domain-owner 111122223333 --format npm --package lodash --max-results 5
```

출력 예시:

```
{
    "package": "lodash",
    "format": "npm",
    "versions": [
        {
            "version": "0.10.0",
            "revision": "REVISION-1-SAMPLE-6C81EFF7DA55CC",
            "status": "Published"
        },
        {
            "version": "0.2.2",
            "revision": "REVISION-2-SAMPLE-6C81EFF7DA55CC",
            "status": "Published"
        },
        {
            "version": "0.2.0",
            "revision": "REVISION-3-SAMPLE-6C81EFF7DA55CC",
            "status": "Published"
        },
        {
            "version": "0.2.1",
            "revision": "REVISION-4-SAMPLE-6C81EFF7DA55CC",
            "status": "Published"
        },
        {
            "version": "0.1.0",
            "revision": "REVISION-5-SAMPLE-6C81EFF7DA55CC",
            "status": "Published"
        }
    ],
    "nextToken": "eyJsaXN0UGFja2FnZVZlcnNpb25zVG9rZW4iOiIwLjIuMiJ9"
}
```

## 중간 리포지토리에 패키지 보존
<a name="package-retention-intermediate-repositories"></a>

 CodeArtifact를 사용하면 업스트림 리포지토리를 체인화하여 연결할 수 있습니다. 예를 들어 `repo-A`는 `repo-B`의 업스트림이 되고 `repo-B`는 `repo-C`의 업스트림이 됩니다. 이 구성을 통해 `repo-A`에서 `repo-B` 및 `repo-C` 패키지 버전을 사용할 수 있습니다.

![\[세 개의 리포지토리가 서로 연결되어 있는 모습을 보여주는 간단한 업스트림 리포지토리 다이어그램\]](http://docs.aws.amazon.com/ko_kr/codeartifact/latest/ug/images/upstream-chaining.png)


 패키지 관리자가 `repo-A` 리포지토리에 연결하고 `repo-C` 리포지토리에서 패키지 버전을 가져오면 해당 패키지 버전은 `repo-B` 리포지토리에 유지되지 않습니다. 이 예시에서는 패키지 버전은 최종 `repo-A` 다운스트림 리포지토리에만 유지됩니다. 중간 리포지토리에는 유지되지 않습니다. 더 긴 체인의 경우에도 마찬가지입니다. 예를 들어, 네 개의 리포지토리 `repo-A`, `repo-B`, `repo-C`, `repo-D` 및 패키지 관리자가 `repo-A`에 연결되어 있고 `repo-D`에서 패키지 버전을 가져온 경우, 해당 패키지 버전은 `repo-A`에는 유지되지만 `repo-B` 또는 `repo-C`에는 유지되지 않습니다.

 패키지 보존 동작은 외부 저장소에서 패키지 버전을 가져올 때와 비슷합니다. 단, 패키지 버전이 외부 연결이 연결된 리포지토리에 항상 유지된다는 점이 다릅니다. 예를 들어 `repo-A`는 `repo-B`의 업스트림입니다. `repo-B`는 `repo-C`의 업스트림이고 `repo-C`는 **npmjs.com** 이 외부 연결로 구성되어 있습니다. 다음 다이어그램을 참조하세요.

![\[npmjs.com에 대한 외부 연결과 함께 연결된 세 개의 리포지토리를 보여주는 업스트림 리포지토리 다이어그램\]](http://docs.aws.amazon.com/ko_kr/codeartifact/latest/ug/images/upstream-chaining-external.png)


 `repo-A`에 연결된 패키지 관리자가 패키지 버전(예: *lodash 4.17.20*)을 요청했으나 해당 패키지 버전이 세 리포지토리 중 어디에도 없는 경우 **npmjs.com**에서 해당 패키지 버전을 가져옵니다. *lodash 4.17.20*을 가져오면 이는 최종 다운스트림 리포지토리인 `repo-A`와 **npmjs.com**에 대한 외부 연결이 되어 있는 `repo-C`에 유지됩니다. *lodash 4.17.20*은 중간 저장소인 `repo-B`에는 유지되지 않습니다.