

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

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

# 자습서: 패키지 리포지토리에서 가져오기
<a name="packages-tutorial"></a>

이 자습서에서는 [CodeCatalyst 패키지 리포지토리](packages-concepts.md#packages-concepts-repository)에서 종속성을 가져오는 애플리케이션을 실행하는 워크플로를 생성하는 방법을 알아봅니다. 이 애플리케이션은 CodeCatalyst 로그에 'Hello World' 메시지를 출력하는 간단한 Node.js 앱입니다. 이 애플리케이션에는 단일 종속성으로 [lodash](https://www.npmjs.com/package/lodash) npm 패키지가 있습니다. `lodash` 패키지는 `hello-world` 문자열을 `Hello World`로 변환하는 데 사용됩니다. 이 패키지의 버전 4.17.20을 사용합니다.

애플리케이션 및 워크플로를 설정한 후 CodeCatalyst가 퍼블릭 외부 레지스트리([npmjs.com](https://www.npmjs.com/))에서 CodeCatalyst 패키지 리포지토리로 `lodash`의 추가 버전을 가져오는 것을 차단하도록 구성합니다. 그런 다음 `lodash`의 추가 버전이 성공적으로 차단되었는지 테스트합니다.

이 자습서를 마치면 워크플로가 CodeCatalyst 내부 및 외부의 패키지 리포지토리와 상호 작용하는 방식을 잘 이해하여 패키지를 검색할 수 있습니다. 또한 npm, 패키지 리포지토리, 워크플로 및 애플리케이션의 `package.json` 파일 간에 발생하는 백그라운드 상호 작용도 이해해야 합니다.

**Topics**
+ [사전 조건](#packages-tutorial-prereqs)
+ [1단계: 소스 리포지토리 생성](#packages-tutorial-source-repo)
+ [2단계: CodeCatalyst 및 게이트웨이 패키지 리포지토리 생성](#packages-tutorial-package-repo)
+ [3단계: 'Hello World' 애플리케이션 생성](#packages-tutorial-create-app)
+ [4단계: 'Hello World'를 실행하는 워크플로 생성](#packages-tutorial-create-workflow)
+ [5단계: 워크플로 확인](#packages-tutorial-verify)
+ [6단계: npmjs.com 가져오기 차단](#packages-tutorial-block)
+ [7단계: 차단 기능 테스트](#packages-tutorial-test-block)
+ [정리](#packages-tutorial-cleanup)

## 사전 조건
<a name="packages-tutorial-prereqs"></a>

시작하기 전:
+ CodeCatalyst **스페이스**가 필요합니다. 자세한 내용은 [스페이스 생성](spaces-create.md) 섹션을 참조하세요.
+ CodeCatalyst 스페이스에는 다음과 같은 빈 프로젝트가 필요합니다.

  ```
  codecatalyst-package-project
  ```

  **처음부터 시작** 옵션을 사용하여 이 프로젝트를 생성합니다.

  자세한 내용은 [Amazon CodeCatalyst에서 빈 프로젝트 생성](projects-create.md#projects-create-empty) 단원을 참조하십시오.

## 1단계: 소스 리포지토리 생성
<a name="packages-tutorial-source-repo"></a>

이 단계에서는 CodeCatalyst에 소스 리포지토리를 생성합니다. 이 리포지토리에는 `index.js` 및 `package.json` 파일과 같은 자습서의 소스 파일이 저장됩니다.

소스 리포지토리에 대한 자세한 정보는 [소스 리포지토리 생성](source-repositories-create.md) 섹션을 참조하세요.

**소스 리포지토리를 생성하려면**

1. [https://codecatalyst.aws/](https://codecatalyst.aws/)에서 CodeCatalyst 콘솔을 엽니다.

1. `codecatalyst-package-project` 프로젝트로 이동합니다.

1. 탐색 창에서 **코드**를 선택한 다음 **소스 리포지토리**를 선택합니다.

1. **리포지토리 추가**를 선택하고 **리포지토리 생성**을 선택합니다.

1. **리포지토리 이름**에 다음과 같이 입력합니다.

   ```
   hello-world-app
   ```

1. **생성(Create)**을 선택합니다.

## 2단계: CodeCatalyst 및 게이트웨이 패키지 리포지토리 생성
<a name="packages-tutorial-package-repo"></a>

이 단계에서는 CodeCatalyst 프로젝트에서 패키지 리포지토리를 생성하고 이를 게이트웨이 리포지토리와 CodeCatalyst 프로젝트에 연결합니다. 나중에 자습서의 종속성인 `lodash`를 npmjs.com에서 두 리포지토리로 가져옵니다.

게이트웨이 리포지토리는 CodeCatalyst의 패키지 리포지토리를 퍼블릭 npmjs.com 연결하는 '접착제' 역할을 합니다.

패키지 리포지토리에 대한 자세한 내용은 [CodeCatalyst에서 소프트웨어 패키지 게시 및 공유](packages.md) 섹션을 참조하세요.

**참고**  
이 자습서에서는 *CodeCatalyst 패키지 리포지토리* 및 *게이트웨이 리포지토리*라는 용어를 사용하여 다음 절차에서 CodeCatalyst에서 생성한 두 리포지토리를 참조합니다.

**CodeCatalyst 패키지 및 게이트웨이 리포지토리를 생성하려면**

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

1. **리포지토리 생성**을 선택합니다.

1. **리포지토리 이름**에 다음과 같이 입력합니다.

   ```
   codecatalyst-package-repository
   ```

1. **\$1 업스트림 리포지토리 선택**을 선택합니다.

1. **게이트웨이 리포지토리**를 선택합니다.

1. **npm-public-registry-gateway** 상자에서 **생성**을 선택합니다.

1. **선택**을 선택하세요.

1. **생성(Create)**을 선택합니다.

   CodeCatalyst는 게이트웨이 리포지토리에 연결된 `codecatalyst-package-repository`라는 패키지 리포지토리를 생성합니다. 게이트웨이 리포지토리는 npmjs.com 레지스트리에 연결됩니다.

## 3단계: 'Hello World' 애플리케이션 생성
<a name="packages-tutorial-create-app"></a>

이 단계에서는 'Hello World' Node.js 애플리케이션을 생성하고 해당 종속성(`lodash`)을 게이트웨이 및 CodeCatalyst 패키지 리포지토리로 가져옵니다.

애플리케이션을 생성하려면 Node.js와 연결된 `npm` 클라이언트가 설치된 개발 시스템이 필요합니다.

이 자습서에서는 CodeCatalyst 개발 환경을 개발 시스템으로 사용할 것이라고 가정합니다. CodeCatalyst 개발 환경을 사용할 필요는 없지만, 깨끗한 작업 환경을 제공하고 Node.js 및 `npm`가 사전 설치되어 있으며 자습서를 완료하고나서 쉽게 삭제할 수 있으므로 사용하는 것이 좋습니다. CodeCatalyst 개발 환경에 대한 자세한 내용은 [개발 환경 생성](devenvironment-create.md) 섹션을 참조하세요.

다음 지침을 사용하여 CodeCatalyst 개발 환경을 시작하고 이를 사용하여 'Hello World' 애플리케이션을 생성합니다.

**CodeCatalyst 개발 환경을 시작하려면**

1. 탐색 창에서 **코드**를 선택한 다음 **개발 환경**을 선택합니다.

1. 상단 근처에서 **개발 환경 생성**을 선택한 다음 **AWS Cloud9 (브라우저에서)**를 선택합니다.

1. **리포지토리**가 `hello-world-app`로 설정되어 있고 **기존 브랜치**가 `main`로 설정되어 있는지 확인합니다. **생성(Create)**을 선택합니다.

   개발 환경이 새 브라우저 탭에서 시작되고 리포지토리(`hello-world-app`)가 복제됩니다.

1. 두 CodeCatalyst 브라우저 탭을 모두 열어 두고 다음 절차로 이동합니다.

**'Hello World' Node.js 애플리케이션을 생성하려면**

1. 개발 환경으로 이동합니다.

1. 터미널 프롬프트에서 `hello-world-app` 소스 리포지토리 루트 디렉터리로 변경합니다.

   ```
   cd hello-world-app
   ```

1. Node.js 프로젝트 초기화:

   ```
   npm init -y
   ```

   초기화는 `hello-world-app`의 루트 디렉터리에 `package.json` 파일을 생성합니다.

1. 개발 환경의 npm 클라이언트를 CodeCatalyst 패키지 리포지토리에 연결합니다.

   1. CodeCatalyst 콘솔로 전환합니다.

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

   1. `codecatalyst-package-repository`을 선택합니다.

   1. **리포지토리에 연결**을 선택합니다.

   1. **토큰 생성**을 선택합니다. 개인 액세스 토큰(PAT)이 생성됩니다.

   1. **복사**를 선택하여 해당 명령을 복사합니다.

   1. 개발 환경으로 전환합니다.

   1. `hello-world-app` 디렉터리에 있는지 확인합니다.

   1. 해당 명령을 붙여넣습니다. 다음처럼 보일 것입니다.

      ```
      npm set registry=https://packages.us-west-2.codecatalyst.aws/npm/ExampleCompany/codecatalyst-package-project/codecatalyst-package-repository/ --location project
      npm set //packages.us-west-2.codecatalyst.aws/npm/ExampleCompany/codecatalyst-package-project/hello-world-app/:_authToken=username:token-secret
      ```

1. `lodash` 버전 4.17.20 가져오기:

   ```
   npm install lodash@v4.17.20 --save --save-exact
   ```

   npm은 다음 위치에서 `lodash` 버전 4.17.20을 다음 순서로 찾습니다.
   + 개발 환경. 여기에서는 찾을 수 없습니다.
   + CodeCatalyst 패키지 리포지토리. 여기에서는 찾을 수 없습니다.
   + 게이트웨이 리포지토리. 여기에서는 찾을 수 없습니다.
   + npmjs.com. 여기에서 발견합니다.

   npm은 `lodash`를 게이트웨이 리포지토리, CodeCatalyst 패키지 리포지토리 및 개발 환경으로 가져옵니다.
**참고**  
4단계에서 npm 클라이언트를 CodeCatalyst 패키지 리포지토리에 연결하지 않았다면, npm은 `lodash`를 npmjs.com에서 직접 가져오고 두 리포지토리로는 해당 패키지를 가져오지 않았을 것입니다.

   또한 npm은 `lodash` 종속성을 사용하여 `package.json` 파일을 업데이트하고 `lodash` 및 모든 종속성을 포함하는 `node_modules` 디렉터리를 생성합니다.

1. 개발 환경으로 `lodash`를 성공적으로 가져왔는지 테스트입니다. 입력:

   ```
   npm list
   ```

   가져오기가 성공했음을 나타내는 다음 메시지가 나타납니다.

   ```
   `-- lodash@4.17.20
   ```

1. (선택 사항) `hello-world-app/package.json` 를 열고 ***빨간색으로 굵게*** 표시된 선이 추가되었는지 확인합니다.

   ```
   {
     "name": "hello-world-app",
     "version": "1.0.0",
     "description": "",
     "main": "index.js",
     "scripts": {
       "test": "echo \"Error: no test specified\" && exit 1"
     },
     "keywords": [],
     "author": "",
     "license": "ISC",
     dependencies": {
       "lodash": "4.17.20"
     }
   }
   ```

1. `/hello-world-app`에서 다음 콘텐츠로 `index.js` 파일을 생성합니다.
**작은 정보**  
개발 환경에서 측면 탐색을 사용하여 이 파일을 생성할 수 있습니다.

   ```
   // Importing lodash library
   const _ = require('lodash');
   
   // Input string
   const inputString = 'hello-world';
   
   // Transforming the string using lodash
   const transformedString = _.startCase(inputString.replace('-', ' '));
   
   // Outputting the transformed string to the console
   console.log(transformedString);
   ```

**게이트웨이 및 CodeCatalyst 패키지 리포지토리로 'lodash'를 가져왔는지 테스트하려면**

1. CodeCatalyst 콘솔로 전환합니다.

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

1. **npm-public-registry-gateway**를 선택합니다.

1. `lodash`가 표시되는지 확인합니다. **최신 버전** 열은 `4.17.20`을 나타냅니다.

1. `codecatalyst-package-repository`에 대해 이 절차를 반복합니다. 가져온 패키지를 보려면 브라우저 창을 새로 고쳐야 할 수 있습니다.

**개발 환경에서 'Hello World'를 테스트하려면**

1. 개발 환경으로 전환합니다.

1. `hello-world-app` 디렉터리에 아직 있는지 확인한 다음 애플리케이션을 실행합니다.

   ```
   node index.js
   ```

   `Hello World` 메시지가 나타납니다. Node.js가 이전 단계에서 개발 환경에 다운로드한 `lodash` 패키지를 사용하여 애플리케이션을 실행했습니다.

**'node\$1modules' 디렉터리를 무시하고 'Hello World'를 커밋하려면**

1. `node_modules` 디렉터리를 무시합니다. 입력:

   ```
   echo "node_modules/" >> .gitignore
   ```

   이 디렉터리를 커밋하지 않는 것이 가장 좋습니다. 또한 이 디렉터리를 커밋하면 이 자습서의 이후 단계에 방해가 됩니다.

1. 추가, 커밋 및 푸시:

   ```
   git add .
   git commit -m "add the Hello World application"
   git push
   ```

   'Hello World' 애플리케이션 및 프로젝트 파일이 소스 리포지토리에 추가됩니다.

## 4단계: 'Hello World'를 실행하는 워크플로 생성
<a name="packages-tutorial-create-workflow"></a>

이 단계에서는 `lodash` 종속성을 사용하여 'Hello World' 애플리케이션을 실행하는 워크플로를 생성합니다. 워크플로에는 단일 *작업* 또는 `RunHelloWorldApp`라는 작업이 포함됩니다. 이 `RunHelloWorldApp` 작업에는 다음과 같은 주목할 만한 명령 및 섹션이 포함됩니다.
+ **`Packages`**

  이 섹션에서는 `npm install`를 실행할 때 작업이 연결해야 하는 CodeCatalyst 패키지 리포지토리의 이름을 나타냅니다.
+ **`- Run: npm install`** 

  이 명령은 `package.json` 파일에 지정된 종속성을 설치하도록 npm에 지시합니다. `package.json` 파일에 지정된 유일한 종속성은 `lodash`입니다. npm은 다음 위치에서 `lodash`를 찾습니다.
  + 작업을 실행하는 Docker 이미지. 여기에서는 찾을 수 없습니다.
  + CodeCatalyst 패키지 리포지토리. 여기에서 발견합니다.

  npm이 `lodash`를 찾으면 작업을 실행하는 Docker 이미지로 가져옵니다.
+ **`- Run: npm list`**

  이 명령은 해당 작업을 실행하는 Docker 이미지에 다운로드된 `lodash` 버전을 출력합니다.
+ **`- Run: node index.js`**

  이 명령은 `package.json` 파일에 지정된 종속성을 사용하여 'Hello World' 애플리케이션을 실행합니다.

`RunHelloWorldApp` 작업은 워크플로 상단 근처의 `aws/build@v1` 식별자로 표시되는 빌드 작업입니다. 빌드 작업에 대한 자세한 내용은 [워크플로로 빌드하기](build-workflow-actions.md) 섹션을 참조하세요.

다음 지침을 사용하여 CodeCatalyst 패키지 리포지토리에서 `lodash` 종속성을 가져온 다음 'Hello World' 애플리케이션을 실행하는 워크플로를 생성합니다.

**워크플로 생성**

1. CodeCatalyst 콘솔로 전환합니다.

1. 탐색 창에서 **CI/CD**를 선택한 다음 **워크플로**를 선택합니다.

1. **워크플로 생성**을 선택합니다.

1. **소스 리포지토리**에서 `hello-world-app`을 선택합니다.

1. **브랜치**에서 `main`을 선택합니다.

   워크플로 정의 파일은 선택한 소스 리포지토리 및 브랜치에 생성됩니다.

1. **생성(Create)**을 선택합니다.

1. 상단 근처에서 **YAML**을 선택합니다.

1. YAML 샘플 코드를 삭제합니다.

1. 다음 YAML 코드를 추가합니다.

   ```
   Name: codecatalyst-package-workflow
   SchemaVersion: "1.0"
   
   # Required - Define action configurations.
   Actions:
     RunHelloWorldApp:
       # Identifies the action. Do not modify this value.
       Identifier: aws/build@v1
       Compute:
         Type: Lambda
       Inputs:
         Sources:
           - WorkflowSource # This specifies your source repository. 
       Configuration:
         Steps:
           - Run: npm install
           - Run: npm list
           - Run: node index.js
         Container: # This specifies the Docker image that runs the action.
           Registry: CODECATALYST
           Image: CodeCatalystLinuxLambda_x86_64:2024_03
       Packages:
         NpmConfiguration:
           PackageRegistries:
             - PackagesRepository: codecatalyst-package-repository
   ```

   앞의 코드에서 *codecatalyst-package-repository*를 [2단계: CodeCatalyst 및 게이트웨이 패키지 리포지토리 생성](#packages-tutorial-package-repo)에서 생성한 CodeCatalyst 패키지 리포지토리의 이름으로 바꿉니다.

   이러한 파일의 속성에 대한 자세한 내용은 [빌드 및 테스트 작업 YAML](build-action-ref.md) 섹션을 참조하세요.

1. (선택 사항) 커밋하기 전에 YAML 코드가 유효한지 확인하려면 **검증**을 선택합니다.

1. **커밋**을 선택합니다.

1. **워크플로 커밋** 대화 상자에서 다음을 입력합니다.

   1. **워크플로 파일 이름**의 경우 기본값인 `codecatalyst-package-workflow`를 유지합니다.

   1. **커밋 메시지**에 다음을 입력합니다.

      ```
      add initial workflow file
      ```

   1. **리포지토리**에서 **hello-world-app**를 선택합니다.

   1. **브랜치 이름**에서 **기본**을 선택합니다.

   1. **커밋**을 선택합니다.

   이제 워크플로를 생성했습니다.

**해당 워크플로를 실행하려면**

1. 방금 생성한 워크플로(`codecatalyst-package-workflow`) 옆에 **작업**을 선택한 다음 **실행**을 선택합니다.

   워크플로 실행이 시작됩니다.

1. 상단의 녹색 알림에서 오른쪽의 실행에 대한 링크를 선택합니다. 링크는 `View Run-1234`와 같습니다.

   실행을 시작한 사람과 **RunHelloWorldApp** 작업을 보여주는 워크플로 다이어그램이 나타납니다.

1. **RunHelloWorldApp** 작업 상자를 선택하여 작업의 진행 상황을 확인합니다.

1. 실행이 완료되면 [5단계: 워크플로 확인](#packages-tutorial-verify)로 이동합니다.

## 5단계: 워크플로 확인
<a name="packages-tutorial-verify"></a>

이 단계에서는 워크플로가 `lodash` 종속성으로 'Hello World' 애플리케이션을 성공적으로 실행했는지 확인합니다.

**'Hello World' 애플리케이션이 종속성을 사용하여 실행되었는지 확인하려면**

1. 워크플로 다이어그램에서 **RunHelloWorldApp** 상자를 선택합니다.

   로그 메시지 목록이 나타납니다.

1. `node index.js` 로그 메시지를 확장합니다.

   다음 메시지가 나타납니다.

   ```
   [Container] 2024/04/24 21:15:41.545650 Running command node index.js
   Hello World
   ```

   `Hello Word`(`hello-world` 대신)이 나타나면 `lodash` 종속성이 성공적으로 사용되었음을 나타냅니다.

1. `npm list` 로그를 확장합니다.

   다음과 비슷한 메시지가 나타납니다.

   ```
   └── lodash@4.17.20
   ```

   이 메시지는 `lodash` 버전 4.17.20이 워크플로 작업을 실행하는 Docker 이미지에 다운로드되었음을 나타냅니다.

## 6단계: npmjs.com 가져오기 차단
<a name="packages-tutorial-block"></a>

 이제 게이트웨이 및 CodeCatalyst 패키지 리포지토리에 `lodash` 버전 4.17.20이 존재하므로 다른 버전 가져오기를 차단할 수 있습니다. 차단하면 악성 코드가 포함될 수 있는 `lodash`의 이후(또는 이전) 버전을 실수로 가져오는 일을 방지합니다. 자세한 내용은 [패키지 원본 제어 편집](package-origin-controls.md) 및 [종속성 대체 공격](package-origin-controls.md#dependency-substitution-attacks) 섹션을 참조하세요.

다음 지침에 따라 게이트웨이 리포지토리로 `lodash` 가져오기를 차단합니다. 게이트웨이에서 패키지를 차단하면 다운스트림 위치에서도 차단됩니다.

**게이트웨이 리포지토리로의 가져오기를 차단하려면**

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

1. **npm-publish-registry-gateway**를 선택합니다.

1. `lodash`을 선택합니다.

1. 상단 근처에서 **원본 제어**를 선택합니다.

1. **업스트림**에서 **차단**을 선택합니다.

1. **저장**을 선택합니다.

   이제 npmjs.com에서 게이트웨이 리포지토리(및 다운스트림 리포지토리 및 컴퓨터)로의 가져오기를 차단했습니다.

## 7단계: 차단 기능 테스트
<a name="packages-tutorial-test-block"></a>

이 섹션에서는 [6단계: npmjs.com 가져오기 차단](#packages-tutorial-block)에서 설정한 차단이 작동하는지 확인합니다. 게이트웨이 리포지토리에서 사용할 수 있는 버전인 4.17.2**0** `lodash` 대신 버전 4.17.2**1**을 요청하도록 'Hello World'를 구성하는 것으로 시작합니다. 그런 다음 애플리케이션이 nmpjs.com 버전 4.17.21을 가져올 수 없는지 확인하며, 이는 차단이 성공했음을 나타냅니다. 최종 테스트에서는 게이트웨이 리포지토리로의 가져오기 차단을 해제하고, 애플리케이션이 `lodash`의 버전 4.17.21을 성공적으로 가져올 수 있는지 확인합니다.

다음 절차 세트를 사용하여 차단 기능을 테스트합니다.

**시작하기 전 준비 사항**

1. 개발 환경으로 전환합니다.

1. CodeCatalyst 콘솔을 사용하여 이전에 생성한 `codecatalyst-package-workflow.yaml` 파일을 가져옵니다.

   ```
   git pull
   ```

**'lodash' 버전 4.17.21을 요청하도록 'Hello World'를 구성하려면**

1. `/hello-world-app/package.json`를 엽니다.

1. ***빨간색으로 굵게*** 표시된 내용과 같이 `lodash` 버전을 4.17.21로 변경합니다.

   ```
   {
     "name": "hello-world-app",
     "version": "1.0.0",
     "description": "",
     "main": "index.js",
     "scripts": {
       "test": "echo \"Error: no test specified\" && exit 1"
     },
     "keywords": [],
     "author": "",
     "license": "ISC",
     "dependencies": {
       "lodash": "4.17.21"
     }
   }
   ```

   이제 `package.json` 파일의 버전(4.17.21)과 게이트웨이 및 CodeCatalyst 패키지 리포지토리의 버전(4.17.20)이 일치하지 않습니다.

1. 추가, 커밋 및 푸시:

   ```
   git add .
   git commit -m "update package.json to use lodash 4.17.21"
   git push
   ```

**'Hello World'가 'lodash' 버전 4.17.21을 가져올 수 없는지 테스트하려면**

1. 버전이 불일치하는 워크플로를 실행합니다.

   1. CodeCatalyst 콘솔로 전환합니다.

   1. 탐색 창에서 **CI/CD**를 선택한 다음 **워크플로**를 선택합니다.

   1. `codecatalyst-package-workflow` 옆에 **작업**을 선택한 후 **실행**을 선택합니다.

      npm은 `package.json`에서 종속성을 찾고 'Hello World'에서 `lodash`의 버전 4.17.21이 필요함을 확인합니다. npm은 다음 위치에서 다음 순서로 종속성을 찾습니다.
      + 작업을 실행하는 Docker 이미지. 여기에서는 찾을 수 없습니다.
      + CodeCatalyst 패키지 리포지토리. 여기에서는 찾을 수 없습니다.
      + 게이트웨이 리포지토리. 여기에서는 찾을 수 없습니다.
      + npmjs.com. 여기에서 발견합니다.

      npm이 npmjs.com에서 버전 4.17.21을 찾은 후 게이트웨이 리포지토리로 가져오려고 시도하지만 `lodash`의 가져오기를 차단하도록 게이트웨이를 설정했으므로 가져오기가 발생하지 않습니다.

      가져오기가 발생하지 않으므로 워크플로가 실패합니다.

1. 워크플로가 실패했는지 확인합니다.

   1. 상단의 녹색 알림에서 오른쪽의 실행에 대한 링크를 선택합니다. 링크는 `View Run-2345`와 같습니다.

   1. 워크플로 다이어그램에서 **RunHelloWorldApp** 상자를 선택합니다.

   1. `npm install` 로그 메시지를 확장합니다.

      다음 메시지가 나타납니다.

      ```
      [Container] 2024/04/25 17:20:34.995591 Running command npm install
      npm ERR! code ETARGET
      npm ERR! notarget No matching version found for lodash@4.17.21.
      npm ERR! notarget In most cases you or one of your dependencies are requesting
      npm ERR! notarget a package version that doesn't exist.
      
      npm ERR! A complete log of this run can be found in: /tmp/.npm/_logs/2024-05-08T22_03_26_493Z-debug-0.log
      ```

      오류는 버전 4.17.21을 찾을 수 없음을 나타냅니다. 이는 차단했기 때문에 나타나는 것으로 봅니다.

**npmjs.com에서 가져오기 차단을 해제하려면**

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

1. **npm-publish-registry-gateway**를 선택합니다.

1. `lodash`을 선택합니다.

1. 상단 근처에서 **원본 제어**를 선택합니다.

1. **업스트림**에서 **허용**을 선택합니다.

1. **저장**을 선택합니다.

   이제 `lodash`의 가져오기가 차단 해제됩니다.

   이제 워크플로에서 `lodash`의 버전 4.17.21을 가져올 수 있습니다.

**npmjs.com에서 가져오기가 차단 해제되었는지 테스트하려면**

1. 워크플로를 다시 실행합니다. 이제 4.17.21의 가져오기가 작동하므로 이번에는 워크플로가 성공해야 합니다. 해당 워크플로를 실행하려면:

   1. **CI/CD**를 선택한 다음 **워크플로**를 선택합니다.

   1. `codecatalyst-package-workflow` 옆의 **작업**을 선택하고 **실행**을 선택합니다.

   1. 상단의 녹색 알림에서 오른쪽의 실행에 대한 링크를 선택합니다. 링크는 `View Run-3456`와 같습니다.

      실행을 시작한 사람과 **RunHelloWorldApp** 작업을 보여주는 워크플로 다이어그램이 나타납니다.

   1. **RunHelloWorldApp** 작업 상자를 선택하여 작업의 진행 상황을 확인합니다.

   1. `npm list` 로그 메시지를 확장하고 다음과 유사한 메시지가 나타나는지 확인합니다.

      ```
      └── lodash@4.17.21
      ```

      이 메시지는 `lodash` 버전 4.17.21이 다운로드되었음을 나타냅니다.

1. 버전 4.17.21을 CodeCatalyst 및 게이트웨이 리포지토리로 가져왔는지 확인합니다.

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

   1. **npm-public-registry-gateway**를 선택합니다.

   1. `lodash`를 찾아 버전이 `4.17.21`인지 확인합니다.
**참고**  
버전 4.17.20은 이 페이지에 나열되어 있지 않지만 `lodash`를 선택한 다음 상단에서 **버전**을 선택하여 찾을 수 있습니다.

   1. 이 단계를 반복하여 버전 4.17.21을 `codecatalyst-package-repository`로 가져왔는지 확인합니다.

## 정리
<a name="packages-tutorial-cleanup"></a>

요금이 부과되지 않도록 이 자습서에서 사용하는 파일과 서비스를 정리합니다.

**패키지 자습서를 정리하려면**

1. `codecatalyst-package-project`를 삭제합니다.

   1. CodeCatalyst 콘솔에서 아직 프로젝트로 이동하지 않은 경우, `codecatalyst-package-project` 프로젝트로 이동합니다.

   1. 탐색 창에서 **프로젝트 설정**을 선택합니다.

   1. **프로젝트 삭제**를 선택하고 **delete**를 입력한 다음 **프로젝트 삭제**를 선택합니다.

      CodeCatalyst는 소스, 게이트웨이 및 CodeCatalyst 패키지 리포지토리를 포함한 모든 프로젝트 리소스를 삭제합니다. 개발 환경도 삭제됩니다.

1. PAT 토큰을 삭제합니다.

   1. 오른쪽에서 사용자 이름을 선택한 다음 **내 설정**을 선택합니다.

   1. **개인 액세스 토큰**에서 이 자습서에서 생성한 토큰을 선택하고 **삭제**를 선택합니다.

이 자습서에서는 CodeCatalyst 패키지 리포지토리에서 종속성을 가져오는 애플리케이션을 실행하는 워크플로를 생성하는 방법을 배웠습니다. 또한 패키지가 게이트웨이 및 CodeCatalyst 패키지 리포지토리로 들어오는 것을 차단 및 차단 해제하는 방법을 배웠습니다.