

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

# CodeArtifact로 npm 구성 및 사용
<a name="npm-auth"></a>

CodeArtifact에서 리포지토리를 만든 후 npm 클라이언트를 사용하여 패키지를 설치하고 게시할 수 있습니다. 리포지토리 엔드포인트와 인증 토큰을 사용하여 npm을 구성하기 위해 권장되는 방법은 `aws codeartifact login` 명령을 사용하는 것입니다. npm을 수동으로 구성할 수도 있습니다.

**Contents**
+ [로그인 명령으로 npm 구성하기](#configure-npm-login-command)
+ [로그인 명령을 실행하지 않고 npm 구성하기](#configuring-npm-without-using-the-login-command)
+ [npm 명령 실행](#running-npm-commands)
+ [npm 인증 및 권한 부여 확인](#verifying-npm-authentication-and-authorization)
+ [기본 npm 레지스트리로 다시 변경](#revert-default-npm-registry)
+ [npm 8.x 이상을 사용한 느린 설치 속도 문제 해결](#troubleshooting-slow-npm-install)

## 로그인 명령으로 npm 구성하기
<a name="configure-npm-login-command"></a>

`aws codeartifact login` 명령을 사용하여 npm에 사용할 보안 인증 정보를 가져올 수 있습니다.

**참고**  
소유한 도메인의 리포지토리에 액세스하는 경우 `--domain-owner`를 포함하지 않아도 됩니다. 자세한 내용은 [크로스 계정 도메인](domain-overview.md#domain-overview-cross-account) 단원을 참조하십시오.

**중요**  
npm 10.x 이상을 사용하는 경우 AWS CLI 버전 2.9.5 이상을 사용하여 `aws codeartifact login` 명령을 성공적으로 실행해야 합니다.

```
aws codeartifact login --tool npm --domain my_domain --domain-owner 111122223333 --repository my_repo
```

이 명령은 \$1/.npmrc 파일을 다음과 같이 변경합니다.
+  AWS 보안 인증을 사용하여 CodeArtifact에서 가져온 인증 토큰을 추가합니다.
+ npm 레지스트리를 `--repository` 옵션으로 지정된 리포지토리로 설정합니다.
+ **npm 6 이하의 경우:** 모든 npm 명령에 대해 인증 토큰이 전송되도록 `"always-auth=true"`를 추가합니다.

`login` 직접 호출 후의 기본 승인 기간은 12시간이며, 토큰을 주기적으로 재발급하려면 `login`를 직접적으로 호출해야 합니다. `login` 명령으로 만든 인증 토큰에 관한 자세한 내용은 [`login` 명령으로 생성된 토큰](tokens-authentication.md#auth-token-login)을 참조하세요.

## 로그인 명령을 실행하지 않고 npm 구성하기
<a name="configuring-npm-without-using-the-login-command"></a>

npm 구성을 수동으로 업데이트하여 `aws codeartifact login` 명령 없이 CodeArtifact 리포지토리로 npm을 구성할 수 있습니다.

**로그인 명령을 실행하지 않고 npm을 구성하려면**

1. 명령줄에서 CodeArtifact 인증 토큰을 가져와 환경 변수에 저장합니다. npm은 이 토큰을 사용하여 CodeArtifact 리포지토리로 인증합니다.
**참고**  
다음 명령은 macOS 또는 Linux 시스템에 사용됩니다. Windows 시스템에서 환경 변수를 구성하는 방법에 관한 자세한 내용은 [환경 변수를 사용하여 인증 토큰 전달](tokens-authentication.md#env-var)을 참조합니다.

   ```
   CODEARTIFACT_AUTH_TOKEN=`aws codeartifact get-authorization-token --domain my_domain --domain-owner 111122223333 --query authorizationToken --output text`
   ```

1. 다음 명령을 실행하여 CodeArtifact 리포지토리의 엔드포인트를 가져올 수 있습니다. 리포지토리 엔드포인트는 패키지를 설치하거나 게시하도록 npm을 리포지토리로 이동하는 데 사용됩니다.
   + *my\$1domain*을 CodeArtifact 도메인 이름으로 변경합니다.
   + *111122223333*을 도메인 소유자의 AWS 계정 ID로 바꿉니다. 소유한 도메인의 리포지토리에 액세스하는 경우 `--domain-owner`를 포함하지 않아도 됩니다. 자세한 내용은 [크로스 계정 도메인](domain-overview.md#domain-overview-cross-account) 단원을 참조하십시오.
   + *my\$1repo*를 CodeArtifact 리포지토리 이름으로 변경합니다.

   ```
   aws codeartifact get-repository-endpoint --domain my_domain --domain-owner 111122223333 --repository my_repo --format npm
   ```

   다음 URL은 리포지토리 엔드포인트의 예입니다.

   ```
   https://my_domain-111122223333.d.codeartifact.us-west-2.amazonaws.com/npm/my_repo/
   ```
**중요**  
레지스트리 URL은 슬래시(/)로 끝나야 합니다. 그렇지 않으면 리포지토리에 연결할 수 없습니다.

1. `npm config set` 명령을 실행하여 레지스트리를 CodeArtifact 리포지토리로 설정합니다. URL을 이전 단계의 리포지토리 엔드포인트 URL로 바꿉니다.

   ```
   npm config set registry=https://my_domain-111122223333.d.codeartifact.region.amazonaws.com/npm/my_repo/
   ```
**참고**  
듀얼 스택 엔드포인트를 사용하려면 `codeartifact.region.on.aws` 엔드포인트를 사용합니다.

1. `npm config set` 명령을 사용하여 npm 구성에 인증 토큰을 추가합니다.

   ```
   npm config set //my_domain-111122223333.d.codeartifact.region.amazonaws.com/npm/my_repo/:_authToken=$CODEARTIFACT_AUTH_TOKEN
   ```

   **npm 6 이하의 경우:** `GET` 요청이 있을 경우에도 npm이 항상 CodeArtifact에 인증 토큰을 전달하도록 하려면 `always-auth` 구성 변수를 `npm config set`로 설정합니다.

   ```
   npm config set //my_domain-111122223333.d.codeartifact.region.amazonaws.com/npm/my_repo/:always-auth=true
   ```

**npm 구성 파일 예(`.npmrc`)**

 다음은 위의 지침에 따라 CodeArtifact 레지스트리 엔드포인트를 설정하고 인증 토큰을 추가하며 `always-auth`를 구성한 후의 `.npmrc` 예제 파일입니다.

```
registry=https://my_domain-111122223333.d.codeartifact.us-west-2.amazonaws.com/npm/my-cli-repo/
//my_domain-111122223333.d.codeartifact.us-west-2.amazonaws.com/npm/my_repo/:_authToken=eyJ2ZX...
//my_domain-111122223333.d.codeartifact.us-west-2.amazonaws.com/npm/my_repo/:always-auth=true
```

## npm 명령 실행
<a name="running-npm-commands"></a>

npm 클라이언트를 구성한 후 npm 명령을 실행할 수 있습니다. 패키지가 리포지토리 또는 업스트림 리포지토리 중 하나에 있다고 할 경우, `npm install`을 사용하여 패키지를 설치할 수 있습니다. 예를 들어, 다음 명령을 사용해 `lodash` 패키지를 설치합니다.

```
npm install lodash
```

다음 명령을 사용하여 새 npm 패키지를 CodeArtifact 리포지토리에 게시하세요.

```
npm publish
```

npm 패키지를 만드는 방법에 관한 자세한 내용은 npm 설명서 웹 사이트에서 [Node.js 모듈 생성](https://docs.npmjs.com/getting-started/creating-node-modules) 섹션을 참조하세요. CodeArtifact에서 지원하는 npm 명령 목록은 [npm 명령 지원](npm-commands.md)을 참조하세요.

## npm 인증 및 권한 부여 확인
<a name="verifying-npm-authentication-and-authorization"></a>

`npm ping` 명령을 간접적으로 호출하면 다음을 확인할 수 있습니다.
+ CodeArtifact 리포지토리에 인증할 수 있도록 보안 인증을 올바르게 구성했습니다.
+ 권한 부여 구성 시 `ReadFromRepository` 권한이 부여됩니다.

`npm ping`을 성공적으로 간접 호출한 결과는 다음과 같습니다.

```
$ npm -d ping
npm info it worked if it ends with ok
npm info using npm@6.4.1
npm info using node@v9.5.0
npm info attempt registry request try #1 at 4:30:59 PM
npm http request GET https://<domain>.d.codeartifact.us-west-2.amazonaws.com/npm/shared/-/ping?write=true
npm http 200 https:///npm/shared/-/ping?write=true
Ping success: {}
npm timing npm Completed in 716ms
npm info ok
```

이 `-d` 옵션을 사용하면 npm이 리포지토리 URL을 포함한 추가 디버그 정보를 인쇄합니다. 이 정보를 통해 npm이 사용자가 예상한 리포지토리를 사용하도록 구성되어 있는지 쉽게 확인할 수 있습니다.

## 기본 npm 레지스트리로 다시 변경
<a name="revert-default-npm-registry"></a>

CodeArtifact로 npm을 구성하면 npm 레지스트리는 지정된 CodeArtifact 리포지토리로 설정됩니다. CodeArtifact에 대한 연결이 완료되면 다음 명령을 실행하여 npm 레지스트리를 기본 레지스트리로 다시 설정할 수 있습니다.

```
npm config set registry https://registry.npmjs.com/
```

## npm 8.x 이상을 사용한 느린 설치 속도 문제 해결
<a name="troubleshooting-slow-npm-install"></a>

패키지 리포지토리에 요청을 보내고 리포지토리가 자산을 직접 스트리밍하는 대신 클라이언트를 Amazon S3로 리디렉션하는 경우 npm 클라이언트가 종속성별로 몇 분 동안 중단될 수 있는 문제가 npm 버전 8.x 이상에 있다고 알려져 있습니다.

CodeArtifact 리포지토리는 요청을 항상 Amazon S3로 리디렉션하도록 설계되었으므로 이 문제가 발생하여 npm 설치 시간이 길어져 구축 시간이 길어지는 경우가 있습니다. 이 동작의 인스턴스는 몇 분 동안 진행률 표시줄로 표시됩니다.

이 문제를 방지하려면 다음 예시와 같이 `npm` cli 명령과 함께 `--no-progress` 또는 `progress=false` 플래그를 사용하십시오.

```
npm install lodash --no-progress
```