

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

# CodeArtifact를 npm과 함께 사용
<a name="using-npm"></a>

이 항목에서는 Node.js 패키지 관리자인 npm을 CodeArtifact와 함께 사용하는 방법을 설명합니다.

**참고**  
CodeArtifact는 `node v4.9.1` 이상 및 `npm v5.0.0` 이상을 지원합니다.

**Topics**
+ [npm 구성 및 사용](npm-auth.md)
+ [Yarn 구성 및 사용](npm-yarn.md)
+ [npm 명령 지원](npm-commands.md)
+ [npm 태그 처리](npm-tags.md)
+ [npm 호환 패키지 관리자 지원](npm-other-clients.md)

# 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
```

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

리포지토리를 만든 후 Yarn 클라이언트를 사용하여 npm 패키지를 관리할 수 있습니다.

**참고**  
`Yarn 1.X`는 npm 구성 파일(.npmrc)에서 정보를 읽고 사용하지만 `Yarn 2.X`는 그렇지 않습니다. `Yarn 2.X`에 대한 구성은 .yarnrc.yml 파일에 정의해야 합니다.

**Contents**
+ [`aws codeartifact login` 명령을 사용하여 Yarn 1.X를 구성합니다.](#npm-yarn-configure-login)
+ [`yarn config set` 명령을 사용하여 Yarn 2.X를 구성합니다.](#npm-yarn-configure-yarn-command)

## `aws codeartifact login` 명령을 사용하여 Yarn 1.X를 구성합니다.
<a name="npm-yarn-configure-login"></a>

`Yarn 1.X`의 경우, `aws codeartifact login` 명령을 실행하여 CodeArtifact로 Yarn을 구성할 수 있습니다. 이 `login` 명령을 실행하면 CodeArtifact 리포지토리 엔드포인트 정보 및 보안 인증으로 \$1/.npmrc 파일이 구성됩니다. `Yarn 1.X`를 사용하면 `yarn` 명령은 \$1/.npmrc 파일의 구성 정보를 사용합니다.

**login 명령으로 `Yarn 1.X`를 구성하려면**

1. AWS 보안 인증을 아직 구성하지 않았다면 [CodeArtifact 시작하기](getting-started.md)에 설명된 대로 AWS CLI에서 사용할 이 보안 인증을 구성합니다.

1. `aws codeartifact login` 명령을 성공적으로 실행하려면 npm을 설치해야 합니다. 설치 지침에 관한 내용은 **npm 설명서의 [Node.js 및 npm 다운로드 및 설치](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm/)를 참조합니다.

1. `aws codeartifact login` 명령을 실행하여 CodeArtifact 보안 인증을 가져오고 \$1/.npmrc 파일을 구성합니다.
   + *my\$1domain*을 CodeArtifact 도메인 이름으로 변경합니다.
   + *111122223333*을 도메인 소유자의 AWS 계정 ID로 변경합니다. 소유한 도메인의 리포지토리에 액세스하는 경우 `--domain-owner`를 포함하지 않아도 됩니다. 자세한 내용은 [크로스 계정 도메인](domain-overview.md#domain-overview-cross-account) 섹션을 참조하세요.
   + *my\$1repo*를 CodeArtifact 리포지토리 이름으로 변경합니다.

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

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

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

1. **npm 7.X 및 8.X의 경우** Yarn을 사용하려면 \$1/.npmrc 파일에 `always-auth=true`를 추가해야 합니다.

   1. 텍스트 편집기에서 \$1/.npmrc 파일을 열고 `always-auth=true`를 새 줄에 추가합니다.

`yarn config list` 명령을 실행하면 Yarn이 올바른 구성을 사용하고 있는지 확인할 수 있습니다. 명령을 실행한 후 `info npm config` 섹션의 값을 확인합니다. 내용은 다음 코드 조각과 비슷해야 합니다.

```
info npm config
{
  registry: 'https://my_domain-111122223333.d.codeartifact.us-west-2.amazonaws.com/npm/my_repo/',
  '//my_domain-111122223333.d.codeartifact.us-west-2.amazonaws.com/npm/my_repo/:_authToken': 'eyJ2ZXI...',
  'always-auth': true
}
```

## `yarn config set` 명령을 사용하여 Yarn 2.X를 구성합니다.
<a name="npm-yarn-configure-yarn-command"></a>

다음 절차는 `yarn config set` 명령을 사용해 명령줄에서 `.yarnrc.yml` 구성을 업데이트하여 `Yarn 2.X`를 구성하는 방법을 자세히 설명합니다.

**명령줄에서 `yarnrc.yml` 구성을 업데이트하려면**

1. AWS 보안 인증을 아직 구성하지 않았다면 [CodeArtifact 시작하기](getting-started.md)에 설명된 대로 AWS CLI에서 사용할 이 보안 인증을 구성합니다.

1. `aws codeartifact get-repository-endpoint` 명령을 실행하여 CodeArtifact 리포지토리의 엔드포인트를 가져올 수 있습니다.
   + *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
   ```

1. .yarnrc.yml 파일의 `npmRegistryServer` 값을 리포지토리 엔드포인트로 업데이트합니다.

   ```
   yarn config set npmRegistryServer "https://my_domain-111122223333.d.codeartifact.region.amazonaws.com/npm/my_repo/"
   ```

1. CodeArtifact 인증 토큰을 가져와 환경 변수에 저장합니다.
**참고**  
다음 명령은 macOS 또는 Linux 시스템에 사용됩니다. Windows 시스템에서 환경 변수를 구성하는 방법에 관한 자세한 내용은 [환경 변수를 사용하여 인증 토큰 전달](tokens-authentication.md#env-var)을 참조합니다.
   + *my\$1domain*을 CodeArtifact 도메인 이름으로 변경합니다.
   + *111122223333*을 도메인 소유자의 AWS 계정 ID로 변경합니다. 소유한 도메인의 리포지토리에 액세스하는 경우 `--domain-owner`를 포함하지 않아도 됩니다. 자세한 내용은 [크로스 계정 도메인](domain-overview.md#domain-overview-cross-account) 섹션을 참조하세요.
   + *my\$1repo*를 CodeArtifact 리포지토리 이름으로 변경합니다.

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

1. `yarn config set` 명령을 사용하여 CodeArtifact 인증 토큰을 .yarnrc.yml 파일에 추가합니다. 다음 명령의 URL을 2단계의 리포지토리 엔드포인트 URL로 변경합니다.

   ```
   yarn config set 'npmRegistries["https://my_domain-111122223333.d.codeartifact.region.amazonaws.com/npm/my_repo/"].npmAuthToken' "${CODEARTIFACT_AUTH_TOKEN}"
   ```

1. `yarn config set` 명령을 실행하여 `npmAlwaysAuth`의 값을 `true`로 설정합니다. 다음 명령의 URL을 2단계의 리포지토리 엔드포인트 URL로 변경합니다.

   ```
   yarn config set 'npmRegistries["https://my_domain-111122223333.d.codeartifact.region.amazonaws.com/npm/my_repo/"].npmAlwaysAuth' "true"
   ```

구성한 후에는 .yarnrc.yml 구성 파일에 다음 코드 조각과 비슷한 내용이 포함되어야 합니다.

```
npmRegistries:
  "https://my_domain-111122223333.d.codeartifact.us-west-2.amazonaws.com/npm/my_repo/":
    npmAlwaysAuth: true
    npmAuthToken: eyJ2ZXI...

npmRegistryServer: "https://my_domain-111122223333.d.codeartifact.us-west-2.amazonaws.com/npm/my_repo/"
```

`yarn config` 명령을 실행하여 `npmRegistries` 및 `npmRegistryServer`의 값을 확인할 수도 있습니다.

# npm 명령 지원
<a name="npm-commands"></a>

다음 섹션에는 지원되지 않는 특정 명령 외에도 CodeArtifact 리포지토리에서 지원하는 npm 명령이 요약되어 있습니다.

**Contents**
+ [리포지토리와 상호 작용하는 지원되는 명령](#supported-commands-that-interact-with-a-repository)
+ [지원되는 클라이언트 측 명령](#supported-client-side-commands)
+ [지원되지 않는 명령](#unsupported-commands)

## 리포지토리와 상호 작용하는 지원되는 명령
<a name="supported-commands-that-interact-with-a-repository"></a>

이 섹션에는 npm 클라이언트가 구성될 때 사용된 레지스트리(예: `npm config set registry` 포함)에 하나 이상의 요청을 보내는 npm 명령이 나열되어 있습니다. CodeArtifact 리포지토리에 대해 이러한 명령을 간접적으로 호출했을 때 제대로 작동하는 것으로 확인되었습니다.


****  

| 명령 | 설명 | 
| --- | --- | 
|   [bugs](https://docs.npmjs.com/cli/bugs)   |  패키지의 버그 추적기 URL 위치를 추측한 후 URL 열기를 시도합니다.  | 
|   [ci](https://docs.npmjs.com/cli/ci)   |  프로젝트를 새로 다시 설치합니다.  | 
|   [deprecate](https://docs.npmjs.com/cli/deprecate)   |  패키지 버전을 더 이상 사용하지 않습니다.  | 
|   [dist-tag](https://docs.npmjs.com/cli/dist-tag)   |  패키지 배포 태그를 수정합니다.  | 
|   [docs](https://docs.npmjs.com/cli/docs)   |  패키지 설명서 URL의 위치를 추측한 다음 `--browser` config 파라미터를 사용하여 URL 열기를 시도합니다.  | 
|   [doctor](https://docs.npmjs.com/cli/doctor)   |  일련의 검사를 실행하여 JavaScript 패키지를 관리하는 데 필요한 것이 npm 설치에 있는지 확인합니다.  | 
|   [install](https://docs.npmjs.com/cli/install)   |  패키지를 설치합니다.  | 
|   [install-ci-test](https://docs.npmjs.com/cli/install-ci-test)   |  프로젝트를 새로 다시 설치하고 테스트를 실행합니다. 별칭: `npm cit`. 이 명령은 `npm ci`를 실행한 후 즉시 `npm test`를 실행합니다.  | 
|   [install-test](https://docs.npmjs.com/cli/install-test)   |  패키지를 설치하고 테스트를 실행합니다. `npm install`을 실행한 후 즉시 `npm test`를 실행합니다.  | 
|   [outdated](https://docs.npmjs.com/cli/outdated)   |  구성된 레지스트리를 검사하여 설치된 패키지가 현재 만료되었는지 확인합니다.  | 
|   [ping](https://docs.npmjs.com/cli/ping)   |  구성되거나 지정된 npm 레지스트리를 ping하고 인증을 확인합니다.  | 
|   [publish](https://docs.npmjs.com/cli/publish)   |  패키지 버전을 레지스트리에 게시합니다.  | 
|   [update](https://docs.npmjs.com/cli/update)   |  패키지의 리포지토리 URL 위치를 추측한 다음, `--browser` config 파라미터를 사용하여 URL 열기를 시도합니다.  | 
|   [view](https://docs.npmjs.com/cli/view)   |  패키지 메타데이터를 표시합니다. 메타데이터 속성을 인쇄하는 데 사용할 수 있습니다.  | 

## 지원되는 클라이언트 측 명령
<a name="supported-client-side-commands"></a>

이러한 명령은 리포지토리와 직접 상호 작용할 필요가 없으므로 CodeArtifact는 명령을 지원하기 위해 아무 것도 할 필요가 없습니다.


****  

| 명령 | 설명 | 
| --- | --- | 
|   [build](https://docs.npmjs.com/cli/v6/commands/npm-build)   |  패키지를 빌드합니다.  | 
|   [cache](https://docs.npmjs.com/cli/cache)   |  패키지 캐시를 조작합니다.  | 
|   [completion](https://docs.npmjs.com/cli/completion)   |  모든 npm 명령에서 탭 완성을 활성화합니다.  | 
|   [config](https://docs.npmjs.com/cli/config)   |  사용자 및 글로벌 `npmrc` 파일의 내용을 업데이트합니다.  | 
|   [dedupe](https://docs.npmjs.com/cli/dedupe)   |  로컬 패키지 트리를 검색하고 종속성을 트리 위로 이동하여 구조를 단순화하려고 합니다. 여기서 종속성을 여러 종속 패키지에서 더 효과적으로 공유할 수 있습니다.  | 
|   [edit](https://docs.npmjs.com/cli/edit)   |  설치된 패키지를 편집합니다. 현재 작업 디렉터리에서 종속성을 선택하고 기본 편집기에서 패키지 폴더를 엽니다.  | 
|   [explore](https://docs.npmjs.com/cli/explore)   |  설치된 패키지를 찾아봅니다. 설치된 특정 패키지의 디렉터리에 서브셸을 생성합니다. 명령이 지정되면 해당 명령은 서브셸에서 실행된 후 즉시 종료됩니다.  | 
|   [help](https://docs.npmjs.com/cli/help)   |  npm에 관한 도움말을 가져옵니다.  | 
|   [help-search](https://docs.npmjs.com/cli/help-search)   |  npm 도움말 설명서를 검색합니다.  | 
|   [init](https://docs.npmjs.com/cli/init)   |  `package.json` 파일을 생성합니다.  | 
|   [link](https://docs.npmjs.com/cli/link)   |  패키지 폴더를 symlink합니다.  | 
|   [ls](https://docs.npmjs.com/cli/ls)   |  설치된 패키지를 나열합니다.  | 
|   [pack](https://docs.npmjs.com/cli/pack)   |  패키지에서 tarball을 생성합니다.  | 
|   [prefix](https://docs.npmjs.com/cli/prefix)   |  접두사를 표시합니다. `-g`도 지정되지 않는 한, 이 디렉터리는 `package.json` 파일을 포함하는 가장 가까운 상위 디렉터리입니다.  | 
|   [prune](https://docs.npmjs.com/cli/prune)   |  상위 패키지의 종속성 목록에 나열되지 않은 패키지를 제거합니다.  | 
|   [rebuild](https://docs.npmjs.com/cli/rebuild)   |  일치하는 폴더에서 `npm build` 명령을 실행합니다.  | 
|   [restart](https://docs.npmjs.com/cli/restart)   |  패키지의 중지, 재시작, 시작 스크립트와 관련 사전/사후 스크립트를 실행합니다.  | 
|   [root](https://docs.npmjs.com/cli/root)   |  유효 `node_modules` 폴더를 표준 출력으로 출력합니다.  | 
|   [run-script](https://docs.npmjs.com/cli/run-script)   |  임의의 패키지 스크립트를 실행합니다.  | 
|   [shrinkwrap](https://docs.npmjs.com/cli/shrinkwrap)   |  게시할 종속 버전을 잠급니다.  | 
|   [uninstall](https://docs.npmjs.com/cli/uninstall)   |  패키지를 제거합니다.  | 

## 지원되지 않는 명령
<a name="unsupported-commands"></a>

이러한 npm 명령은 CodeArtifact 리포지토리에서 지원하지 않습니다.


****  

| 명령 | 설명 | 참고 | 
| --- | --- | --- | 
|   [access](https://docs.npmjs.com/cli/access)   |  게시된 패키지에서 액세스 수준을 설정합니다.  |  CodeArtifact는 퍼블릭 npmjs 리포지토리와는 다른 권한 모델을 사용합니다.  | 
|   [adduser](https://docs.npmjs.com/cli/adduser)   |  레지스트리 사용자 계정을 추가합니다.  |  CodeArtifact는 퍼블릭 npmjs 리포지토리와는 다른 사용자 모델을 사용합니다.  | 
|   [audit](https://docs.npmjs.com/cli/audit)   |  보안 감사를 실행합니다.  |  CodeArtifact는 현재 보안 취약성 데이터를 제공하지 않습니다.  | 
|   [hook](https://docs.npmjs.com/cli/hook)   |  추가, 제거, 나열 및 업데이트를 포함하여 npm 후크를 관리합니다.  |  CodeArtifact는 현재 어떠한 종류의 변경 알림 메커니즘도 지원하지 않습니다.  | 
|   [login](https://docs.npmjs.com/cli-commands/adduser.html)   |  사용자를 인증합니다. `npm adduser`에 대한 별칭입니다.  |  CodeArtifact는 퍼블릭 npmjs 리포지토리와는 다른 인증 모델을 사용합니다. 자세한 내용은 [npm으로 인증](npm-auth.md)을 참조하세요.  | 
|   [logout](https://docs.npmjs.com/cli/logout)   |  레지스트리에서 로그아웃합니다.  |  CodeArtifact는 퍼블릭 npmjs 리포지토리와는 다른 인증 모델을 사용합니다. CodeArtifact 리포지토리에서 로그아웃할 수 있는 방법은 없지만 인증 토큰은 구성 가능한 만료 시간이 지나면 만료됩니다. 기본 토큰 지속 시간은 12시간입니다.  | 
|   [owner](https://docs.npmjs.com/cli/owner)   |  패키지 소유자를 관리합니다.  |  CodeArtifact는 퍼블릭 npmjs 리포지토리와는 다른 권한 모델을 사용합니다.  | 
|   [profile](https://docs.npmjs.com/cli/profile)   |  레지스트리 프로필의 설정을 변경합니다.  |  CodeArtifact는 퍼블릭 npmjs 리포지토리와는 다른 사용자 모델을 사용합니다.  | 
|   [search](https://docs.npmjs.com/cli/search)   |  레지스트리에서 검색어와 일치하는 패키지를 검색합니다.  |  CodeArtifact는 [list-packages](list-packages.md) 명령으로 제한된 검색 기능을 지원합니다.  | 
|   [star](https://docs.npmjs.com/cli/star)   |  좋아하는 패키지를 표시합니다.  |  CodeArtifact는 현재 어떠한 종류의 즐겨찾기 메커니즘도 지원하지 않습니다.  | 
|   [stars](https://docs.npmjs.com/cli/stars)   |  즐겨찾기로 표시된 패키지를 조회합니다.  |  CodeArtifact는 현재 어떠한 종류의 즐겨찾기 메커니즘도 지원하지 않습니다.  | 
|   [team](https://docs.npmjs.com/cli/team)   |  조직 팀 및 팀 멤버십을 관리합니다.  |  CodeArtifact는 퍼블릭 npmjs 리포지토리와는 다른 사용자 및 그룹 구성원 모델을 사용합니다. 자세한 내용은 **IAM 사용 설명서의 [자격 증명(사용자, 그룹 및 역할)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id.html) 섹션을 참조하세요.  | 
|   [token](https://docs.npmjs.com/cli/token)   |  인증 토큰을 관리합니다.  |  CodeArtifact는 인증 토큰을 가져오기 위해 다른 모델을 사용합니다. 자세한 내용은 [npm으로 인증](npm-auth.md)을 참조하세요.  | 
|   [unpublish](https://docs.npmjs.com/cli/unpublish)   |  레지스트리에서 패키지를 제거합니다.  |  CodeArtifact는 npm 클라이언트를 사용하여 리포지토리에서 패키지 버전을 제거하는 것을 지원하지 않습니다. [delete-package-version](delete-package.md) 명령을 사용할 수 있습니다.  | 
|   [whoami](https://docs.npmjs.com/cli/whoami)   |  npm 사용자 이름을 표시합니다.  |  CodeArtifact는 퍼블릭 npmjs 리포지토리와는 다른 사용자 모델을 사용합니다.  | 

# npm 태그 처리
<a name="npm-tags"></a>

 npm 레지스트리는 패키지 버전의 문자열 별칭인 **태그를 지원합니다. 태그를 사용하여 버전 번호 대신 별칭을 제공할 수 있습니다. 예를 들어, 여러 개발 스트림이 있는 프로젝트에서 각 스트림마다 다른 태그(예: `stable`, `beta`, `dev`, `canary`)를 사용할 수 있습니다. 자세한 내용은 npm 웹 사이트에서 [dist-tag](https://docs.npmjs.com/cli/dist-tag)를 참조하세요.

 기본적으로 npm은 `latest` 태그를 사용하여 패키지의 현재 버전을 식별합니다. `npm install pkg`(`@version` 또는 `@tag` 지정자가 없는)는 최신 태그를 설치합니다. 일반적으로 프로젝트는 안정적인 릴리스 버전에만 최신 태그를 사용합니다. 그 밖의 태그는 불안정한 버전이나 프리릴리스 버전에 사용됩니다.

## npm 클라이언트로 태그를 편집
<a name="editing-tags-with-the-npm-client"></a>

 CodeArtifact 리포지토리에서는 세 개의 `npm dist-tag` 명령(`add`, `rm` 및 `ls`)이 [기본 npm 레지스트리](https://registry.npmjs.com/)에서와 동일하게 작동합니다.

## npm 태그와 CopyPackageVersions API
<a name="tags-and-cpv"></a>

`CopyPackageVersions` API를 사용하여 npm 패키지 버전을 복사하면 해당 버전의 별칭을 지정하는 모든 태그가 대상 리포지토리에 복사됩니다. 대상에 있는 태그가 복사 중인 버전에도 있을 때 복사 작업은 대상 리포지토리의 태그 값을 소스 리포지토리의 값과 일치하도록 설정합니다.

예를 들어, 다음 표에 나와 있는 것처럼 리포지토리 S와 리포지토리 D에 모두 최신 태그가 설정된 단일 버전의 `web-helper` 패키지가 포함되어 있다고 가정해 보겠습니다.


****  

| 리포지토리 | 패키지 이름 | 패키지 태그 | 
| --- | --- | --- | 
|  S  |  `web-helper`  |   **latest(버전 1.0.1의 별칭)  | 
|  D  |  `web-helper`  |   **latest(버전 1.0.0의 별칭)  | 

 `CopyPackageVersions`는 `web-helper` 1.0.1을 S에서 D로 복사하기 위해 간접적으로 호출됩니다. 작업이 완료된 후 리포지토리 D의 `web-helper`에서 `latest` 태그는 1.0.0이 아닌 1.0.1로 별칭을 지정합니다.

복사 후 태그를 변경해야 하는 경우, `npm dist-tag` 명령을 사용하여 대상 리포지토리에서 직접 태그를 수정합니다. `CopyPackageVersions` API에 관한 자세한 내용은 [리포지토리 간 패키지 복사](copy-package.md)를 참조합니다.

## npm 태그와 업스트림 리포지토리
<a name="tags-and-upstreams"></a>

npm이 패키지에 대한 태그를 요청하고 해당 패키지의 버전이 업스트림 리포지토리에도 있을 때 CodeArtifact는 태그를 병합한 후 클라이언트에 반환합니다. 예를 들면, R이라는 리포지토리에 U라는 업스트림 리포지토리가 있습니다. 다음 표에는 두 리포지토리에 모두 존재하는 `web-helper`라는 패키지의 태그가 나와 있습니다.


****  

| 리포지토리 | 패키지 이름 | 패키지 태그 | 
| --- | --- | --- | 
|  R  |  `web-helper`  |   *latest*(버전 1.0.0의 별칭)  | 
|  U  |  `web-helper`  |   **alpha(버전 1.0.1의 별칭)  | 

이 경우, npm 클라이언트가 리포지토리 R에서 `web-helper` 패키지의 태그를 가져오면 **latest 태그와 **alpha 태그를 모두 받습니다. 태그가 가리키는 버전은 변경되지 않습니다.

업스트림 리포지토리와 다운스트림 리포지토리의 동일한 패키지에 동일한 태그가 있는 경우, CodeArtifact는 **업스트림 리포지토리에 있는 태그를 사용합니다. 예를 들어, **webhelper의 태그가 다음과 같이 수정되었다고 가정해 보겠습니다.


****  

| 리포지토리 | 패키지 이름 | 패키지 태그 | 
| --- | --- | --- | 
|  R  |  `web-helper`  |   *latest*(버전 1.0.0의 별칭)  | 
|  U  |  `web-helper`  |   **latest(버전 1.0.1의 별칭)  | 

이 경우, npm 클라이언트가 리포지토리 R에서 패키지 **web-helper의 태그를 가져오면 **latest 태그는 버전 **1.0.1에 별칭을 지정합니다. 이는 업스트림 리포지토리에 있기 때문입니다. 이렇게 하면 `npm update`를 실행하여 다운스트림 리포지토리에 아직 없는 업스트림 리포지토리의 새 패키지 버전을 쉽게 사용할 수 있습니다.

다운스트림 리포지토리에 패키지의 새 버전을 게시할 때 업스트림 리포지토리의 태그를 사용하면 문제가 될 수 있습니다. 예를 들어, 패키지 **web-helper의 latest 태그가 R과 U에서 모두 동일하다고 가정해 보겠습니다.


****  

| 리포지토리 | 패키지 이름 | 패키지 태그 | 
| --- | --- | --- | 
|  R  |  `web-helper`  |   **latest(버전 1.0.1의 별칭)  | 
|  U  |  `web-helper`  |   **latest(버전 1.0.1의 별칭)  | 

버전 1.0.2가 R에 게시되면 npm은 **latest 태그를 1.0.2로 업데이트합니다.


****  

| 리포지토리 | 패키지 이름 | 패키지 태그 | 
| --- | --- | --- | 
|  R  |  `web-helper`  |   **latest(버전 1.0.2의 별칭)  | 
|  U  |  `web-helper`  |   **latest(버전 1.0.1의 별칭)  | 

하지만 U의 **latest 값이 1.0.1이기 때문에 npm 클라이언트는 이 태그 값을 볼 수 없습니다. 1.0.2를 게시한 직후 리포지토리 R을 대상으로 `npm install`을 실행하면 방금 게시된 버전 대신 1.0.1이 설치됩니다. 가장 최근에 게시된 버전을 설치하려면 다음과 같이 정확한 패키지 버전을 지정해야 합니다.

```
npm install web-helper@1.0.2
```

# npm 호환 패키지 관리자 지원
<a name="npm-other-clients"></a>

다음과 같은 기타 패키지 관리자는 CodeArtifact와 호환되며 npm 패키지 형식 및 npm 와이어 프로토콜과 함께 작동합니다.
+  [pnpm package manager](https://pnpm.js.org). CodeArtifact와 연동하는 것으로 확인된 최신 버전은 2019년 5월 18일에 릴리스된 3.3.4 버전입니다.
+  [Yarn package manager](https://yarnpkg.com/). CodeArtifact와 연동하는 것으로 확인된 최신 버전은 2019년 12월 11일에 릴리스된 1.21.1 버전입니다.

**참고**  
CodeArtifact와 함께 Yarn 2.x를 사용하는 것이 좋습니다. Yarn 1.x에는 HTTP 재시도가 없으므로 500수준 상태 코드나 오류가 발생하는 간헐적인 서비스 오류에 더 취약합니다. Yarn 1.x에 대해 다른 재시도 전략을 구성할 수 있는 방법은 없지만 Yarn 2.x에서는 이것이 추가되었습니다. Yarn 1.x를 사용할 수 있지만 빌드 스크립트에 더 높은 수준의 재시도를 추가해야 할 수도 있습니다. 예를 들어, 루프에서 yarn 명령을 실행하면 패키지 다운로드가 실패할 경우 다시 시도하게 됩니다.