

Amazon CodeCatalyst는 더 이상 신규 고객에게 공개되지 않습니다. 기존 고객은 정상적으로 서비스를 계속 이용할 수 있습니다. 자세한 내용은 [CodeCatalyst에서 마이그레이션하는 방법](migration.md) 단원을 참조하십시오.

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

# 업스트림 리포지토리 구성 및 사용
<a name="packages-upstream-repositories"></a>

게이트웨이 리포지토리와 기타 CodeCatalyst 패키지 리포지토리를 모두 패키지 리포지토리의 업스트림으로 연결할 수 있습니다. 이를 통해 패키지 관리자 클라이언트는 단일 패키지 리포지토리 엔드포인트를 사용하여 둘 이상의 패키지 리포지토리에 포함된 패키지에 액세스할 수 있습니다. 다음은 업스트림 리포지토리 사용의 주요 이점입니다.
+ 여러 소스에서 가져오고자 한다면 패키지 관리자를 단일 리포지토리 엔드포인트로 구성하기만 하면 됩니다.
+ 업스트림 리포지토리에서 사용되는 패키지는 다운스트림 리포지토리에 저장되므로 업스트림 리포지토리에서 예기치 않은 중단이 발생하거나 패키지가 삭제되더라도 패키지를 사용할 수 있습니다.

패키지 리포지토리를 생성할 때 업스트림 리포지토리를 추가할 수 있습니다. CodeCatalyst 콘솔의 기존 패키지 리포지토리에서 업스트림 리포지토리를 추가하거나 제거할 수도 있습니다.

게이트웨이 리포지토리를 업스트림 리포지토리로 추가하면, 패키지 리포지토리가 게이트웨이 리포지토리의 해당 퍼블릭 패키지 리포지토리에 연결됩니다. 지원되는 퍼블릭 패키지 리포지토리 목록은 [지원되는 외부 패키지 리포지토리 및 해당 리포지토리의 게이트웨이 리포지토리](packages-connect-external.md#packages-upstream-repositories-supported-external)를 참조하세요.

여러 리포지토리를 업스트림 리포지토리로 함께 연결할 수 있습니다. 예를 들어 팀이 `project-repo`라는 리포지토리를 생성하는데, 퍼블릭 npm 리포지토리인 `npmjs.com`에 연결되어 업스트림 리포지토리로 추가된 **npm-public-registry-gateway**가 있는 `team-repo`라는 다른 리포지토리를 이미 사용하고 있다고 가정해 보겠습니다. `team-repo`을 업스트림 리포지토리로 `project-repo`에 추가할 수 있습니다. 이 경우 `project-repo`, `team-repo`, `npm-public-registry-gateway` 및 `npmjs.com`에서 패키지를 가져오는데 `project-repo`를 사용하도록 패키지 관리자만 구성하면 됩니다.

**Topics**
+ [업스트림 리포지토리 추가](packages-upstream-repositories-add.md)
+ [업스트림 리포지토리의 검색 순서 편집](packages-upstream-repositories-search-order.md)
+ [업스트림 리포지토리가 포함된 패키지 버전 요청](packages-upstream-repositories-request.md)
+ [업스트림 리포지토리 제거](packages-upstream-repositories-remove.md)

# 업스트림 리포지토리 추가
<a name="packages-upstream-repositories-add"></a>

퍼블릭 패키지 리포지토리 또는 다른 CodeCatalyst 패키지 리포지토리를 다운스트림 리포지토리에 업스트림 리포지토리로 추가하면, 다운스트림 리포지토리에 연결된 패키지 관리자가 업스트림 리포지토리의 모든 패키지를 사용할 수 있습니다.

**업스트림 리포지토리를 추가하려면**

1. 탐색 창에서 **패키지**를 선택합니다.

1. **패키지 리포지토리** 페이지에서 업스트림 리포지토리를 추가할 패키지 리포지토리를 선택합니다.

1. 패키지 리포지토리 이름에서 **업스트림**을 선택하고 **업스트림 리포지토리 선택**을 선택합니다.

1. **업스트림 유형 선택**에서 다음 중 하나를 선택합니다.
   + **게이트웨이 리포지토리**

     사용 가능한 게이트웨이 리포지토리 목록에서 선택할 수 있습니다.
**참고**  
CodeCatalyst는 Maven Central, npmjs.com 또는 Nuget Gallery와 같은 퍼블릭 외부 패키지 권한에 연결하기 위해 게이트웨이 리포지토리를 외부 리포지토리에서 가져온 패키지를 검색하고 저장하는 중개 리포지토리로 사용합니다. 이렇게 하면 프로젝트의 모든 패키지 리포지토리가 게이트웨이 중개 리포지토리의 패키지를 사용하므로 시간과 데이터 전송이 절약됩니다. 자세한 내용은 [퍼블릭 외부 리포지토리에 연결](packages-connect-external.md) 단원을 참조하십시오.
   + **CodeCatalyst 리포지토리**

     프로젝트의 사용 가능한 CodeCatalyst 패키지 리포지토리 목록에서 선택할 수 있습니다.

1. 업스트림 리포지토리로 추가하려는 모든 리포지토리를 선택한 후 **선택**을 선택한 다음 **저장**을 선택합니다.

   업스트림 리포지토리의 검색 순서 변경에 대한 자세한 내용은 [업스트림 리포지토리의 검색 순서 편집](packages-upstream-repositories-search-order.md) 섹션을 참조하세요.

업스트림 리포지토리를 추가한 경우 로컬 리포지토리에 연결된 패키지 관리자를 사용하여 업스트림 리포지토리에서 패키지를 가져올 수 있습니다. 패키지 관리자 구성을 업데이트할 필요는 없습니다. 업스트림 리포지토리에서 패키지 버전을 요청하는 방법에 대한 자세한 내용은 [업스트림 리포지토리가 포함된 패키지 버전 요청](packages-upstream-repositories-request.md) 섹션을 참조하세요.

# 업스트림 리포지토리의 검색 순서 편집
<a name="packages-upstream-repositories-search-order"></a>

CodeCatalyst는 구성된 검색 순서로 업스트림 리포지토리를 검색합니다. 패키지가 발견되면 CodeCatalyst는 검색을 중지합니다. 패키지를 찾기 위해 업스트림 리포지토리를 검색하는 순서는 변경할 수 있습니다.

**업스트림 리포지토리의 검색 순서를 편집하려면**

1. 탐색 창에서 **패키지**를 선택합니다.

1. **패키지 리포지토리** 페이지에서 업스트림 리포지토리 검색 순서를 편집할 패키지 리포지토리를 선택합니다.

1. 패키지 리포지토리 이름에서 **업스트림**을 선택합니다.

1. **업스트림 리포지토리** 섹션에서 업스트림 리포지토리와 해당 검색 순서를 볼 수 있습니다. 검색 순서를 변경하려면 목록에 리포지토리를 끌어다 놓습니다.

1. 업스트림 리포지토리의 검색 순서 편집이 완료되면 **저장**을 선택합니다.

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

다음 예시는 패키지 관리자가 업스트림 리포지토리가 있는 CodeCatalyst 패키지 리포지토리에서 패키지를 요청하는 경우 발생할 수 있는 시나리오를 보여줍니다.

이 예시에서는 `npm`과 같은 패키지 관리자가 여러 업스트림 리포지토리가 있는 `downstream`이라는 패키지 리포지토리에서 패키지 버전을 요청합니다. 패키지를 요청하면 다음이 발생할 수 있습니다.
+  요청된 패키지 버전이 `downstream`에 포함되어 있는 경우 클라이언트에 반환됩니다.
+  요청된 패키지 버전이 `downstream`에 포함되어 있지 않은 경우 CodeCatalyst는 `downstream` 업스트림 리포지토리에서 구성된 검색 순서에 따라 해당 버전을 찾습니다. 패키지 버전을 찾으면 해당 패키지에 대한 참조가 `downstream`에 복사되고 패키지 버전이 클라이언트에 반환됩니다.
+  `downstream` 및 해당 업스트림 리포지토리 모두에 패키지 버전이 포함되어 있지 않은 경우 HTTP 404 `Not Found` 응답이 클라이언트에 반환됩니다.

 하나의 리포지토리에 허용되는 최대 직접 업스트림 리포지토리 수는 10개입니다. 패키지 버전이 요청될 때 CodeCatalyst가 확인하는 최대 리포지토리 수는 25개입니다.

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

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

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

CodeCatalyst는 업스트림 리포지토리라는 연결된 여러 리포지토리를 통해 패키지를 가져올 수 있습니다. CodeCatalyst 패키지 리포지토리에 게이트웨이 리포지토리에 대한 업스트림 연결이 있는 다른 CodeCatalyst 패키지 리포지토리에 대한 업스트림 연결이 있는 경우, 업스트림 리포지토리에 없는 패키지에 대한 요청은 외부 리포지토리에서 복사됩니다. 예를 들어, 다음과 같은 구성을 살펴보겠습니다. `repo-A`라는 리포지토리는 `npm-public-registry-gateway`라는 게이트웨이 리포지토리에 대한 업스트림 연결이 있습니다. `npm-public-registry-gateway`는 퍼블릭 패키지 리포지토리인 [https://npmjs.com](https://npmjs.com) 대한 업스트림 연결이 있습니다.

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


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

```
$ npm config get registry
https://packages.region.codecatalyst.aws/npm/space-name/proj-name/repo-name/
$ 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`를 통해 가져온 버전이기 때문입니다.

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

`npm-public-registry-gateway`의 내용은 시간이 지남에 따라 [https://npmjs.com](https://npmjs.com)에서 가져온 모든 패키지 및 패키지 버전을 볼 수 있는 방법을 제공합니다.

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

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

![\[세 개의 리포지토리가 서로 연결되어 있는 모습을 보여주는 간단한 업스트림 리포지토리 다이어그램\]](http://docs.aws.amazon.com/ko_kr/codecatalyst/latest/userguide/images/packages/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-B`는 `repo-A`의 업스트림 리포지토리로 사용됩니다. `npm-public-registry-gateway`는 `repo-B`의 업스트림 리포지토리로, 퍼블릭 리포지토리 **npmjs.com**에 대한 업스트림 연결이 연결됩니다. 아래 다이어그램을 참조하세요.

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


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

# 업스트림 리포지토리 제거
<a name="packages-upstream-repositories-remove"></a>

업스트림 리포지토리 내의 패키지에 더 이상 액세스하지 않으려면 패키지 리포지토리에서 업스트림 리포지토리를 제거할 수 있습니다.

**주의**  
업스트림 리포지토리를 제거하면 업스트림 관계 체인이 중단되어 프로젝트 또는 빌드가 중단될 수 있습니다.

**업스트림 리포지토리를 제거하려면**

1. 탐색 창에서 **패키지**를 선택합니다.

1. **패키지 리포지토리** 페이지에서 업스트림 리포지토리를 제거할 패키지 리포지토리를 선택합니다.

1. 패키지 리포지토리 이름에서 **업스트림**을 선택합니다.

1. **업스트림 리포지토리 편집** 섹션에서 제거하려는 업스트림 리포지토리를 찾은 다음 ![\[Remove\]](http://docs.aws.amazon.com/ko_kr/codecatalyst/latest/userguide/images/packages/remove.png)를 선택합니다.

1. 업스트림 리포지토리 제거가 완료되면 **저장**을 선택합니다.