{"meta":{"title":"npm 레지스트리 작업","intro":"npm 프로젝트에 종속성으로 저장된 GitHub Packages 패키지를 GitHub Packages 게시하고 사용하도록 npm을 구성할 수 있습니다.","product":"GitHub Packages","breadcrumbs":[{"href":"/ko/packages","title":"GitHub Packages"},{"href":"/ko/packages/working-with-a-github-packages-registry","title":"GitHub 패키지 레지스트리 작업"},{"href":"/ko/packages/working-with-a-github-packages-registry/working-with-the-npm-registry","title":"npm 레지스트리"}],"documentType":"article"},"body":"# npm 레지스트리 작업\n\nnpm 프로젝트에 종속성으로 저장된 GitHub Packages 패키지를 GitHub Packages 게시하고 사용하도록 npm을 구성할 수 있습니다.\n\n<!-- 2148AF7B-5FF8-4B28-A808-D692FEE2225A -->\n\n## 인증 진행 중 GitHub Packages\n\n> \\[!NOTE]\n> GitHub Packages 은 .를 사용하는 personal access token (classic)인증만 지원합니다. 자세한 내용은 [개인용 액세스 토큰 관리](/ko/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens)을(를) 참조하세요.\n\n프라이빗, 내부, 퍼블릭 패키지를 게시, 설치, 삭제하려면 액세스 토큰이 필요합니다.\n\npersonal access token (classic)을 사용하여 GitHub Packages 또는 GitHub API에 인증할 수 있습니다. personal access token (classic)을(를) 만들 때 필요에 따라 토큰의 범위를 다르게 할당할 수 있습니다. personal access token (classic)의 패키지 관련 범위에 대한 자세한 내용은 [GitHub 패키지에 대한 사용 권한 정보](/ko/packages/learn-github-packages/about-permissions-for-github-packages#about-scopes-and-permissions-for-package-registries)를 참조하세요.\n\nGitHub Packages 워크플로 내에서 GitHub Actions 레지스트리에 인증하려면 다음을 사용할 수 있습니다.\n\n* 워크플로 리포지토리와 연결된 패키지를 게시하려면 `GITHUB_TOKEN`을 사용합니다.\n* 다른 프라이빗 리포지토리와 연결된 패키지를 설치하기 위한 최소한 `read:packages` 범위가 있는 personal access token (classic)(리포지토리에 패키지에 대한 읽기 액세스 권한이 부여된 경우 `GITHUB_TOKEN`을 사용할 수 있습니다. [패키지의 액세스 제어 및 표시 여부 구성](/ko/packages/learn-github-packages/configuring-a-packages-access-control-and-visibility)을(를) 참조하세요).\n\n### GitHub Actions 워크플로에서 인증하기\n\n이 레지스트리는 세분화된 권한을 지원합니다. 세분화된 권한을 지원하는 레지스트리의 경우, 레지스트리에 인증하기 위해 GitHub Actions를 사용하는 personal access token 워크플로가 있다면 워크플로를 업데이트하여 `GITHUB_TOKEN`를 사용하도록 강력히 권장합니다. 레지스트리를 사용하여 인증하는 워크플로를 업데이트하는 방법에 대한 지침은 personal access token을 [](/ko/packages/managing-github-packages-using-github-actions-workflows/publishing-and-installing-a-package-with-github-actions#upgrading-a-workflow-that-accesses-a-registry-using-a-personal-access-token)참조하세요.\n\n> \\[!NOTE]\n> GitHub Actions 워크플로에서 REST API를 사용하여 패키지를 삭제하고 복원하는 기능은 현재 공개 미리 보기 버전이며 변경될 수 있습니다.\n\n토큰에 패키지에 대한 `GITHUB_TOKEN` 권한이 있는 경우, GitHub Actions 워크플로에서 `admin`를 사용해 REST API로 패키지를 삭제하거나 복원할 수 있습니다. 워크플로를 사용하여 패키지를 게시하는 리포지토리와 패키지에 명시적으로 연결한 리포지토리에는 리포지토리의 패키지에 대한 `admin` 권한이 자동으로 부여됩니다.\n\n`GITHUB_TOKEN`에 대한 자세한 내용은 [워크플로에서 인증에 GITHUB\\_TOKEN 사용](/ko/actions/tutorials/authenticate-with-github_token#using-the-github_token-in-a-workflow)을(를) 참조하세요. 작업에서 레지스트리를 사용하는 모범 사례에 대한 자세한 내용은 [손상된 러너](/ko/actions/concepts/security/compromised-runners#cross-repository-access)를 참조하세요.\n\n패키지에 대한 액세스 권한을 독립적으로GitHub Codespaces 부여하도록 선택할 수도 있습니다GitHub Actions. 자세한 내용은 [패키지의 액세스 제어 및 표시 여부 구성](/ko/packages/learn-github-packages/configuring-a-packages-access-control-and-visibility#ensuring-github-codespaces-access-to-your-package) 및 [패키지의 액세스 제어 및 표시 여부 구성](/ko/packages/learn-github-packages/configuring-a-packages-access-control-and-visibility#ensuring-workflow-access-to-your-package)을(를) 참조하세요.\n\n### personal access token를 사용하여 인증하기\n\n적절한 범위의personal access token (classic)으로 GitHub Packages에서 패키지를 게시하고 설치해야 합니다. 자세한 내용은 [GitHub 패키지 소개](/ko/packages/learn-github-packages/introduction-to-github-packages#authenticating-to-github-packages)을(를) 참조하세요.\n\nnpm을 사용해 GitHub Packages에 인증하려면, 사용자별 `~/.npmrc` 파일을 편집하여 personal access token (classic)를 포함하거나 사용자 이름과 personal access token를 사용해 명령줄에서 npm에 로그인하면 됩니다.\n\npersonal access token (classic) 파일에 `~/.npmrc`을(를) 추가하여 인증하려면, 다음 줄이 포함되도록 프로젝트의 `~/.npmrc` 파일을 편집하세요. 여기서 TOKEN은 사용자의 personal access token으로 바꾸세요.\n`~/.npmrc` 파일이 없는 경우에는 새 파일을 만듭니다.\n\n```shell\n//npm.pkg.github.com/:_authToken=TOKEN\n```\n\nnpm에 로그인하여 인증하려면 `npm login` 명령을 사용하고, USERNAME은 GitHub 사용자 이름으로, TOKEN은 personal access token (classic)로, PUBLIC-EMAIL-ADDRESS는 이메일 주소로 바꾸세요.\n\nnpm CLI 버전 9 이상에서 명령줄을 사용하여 프라이빗 레지스트리에 로그인 또는 로그아웃하는 경우 브라우저를 통해 기본 로그인 흐름을 사용하는 대신 프롬프트에서 인증 세부 정보를 읽는 `--auth-type=legacy` 옵션을 사용해야 합니다. 자세한 내용은 [`npm-login`](https://docs.npmjs.com/cli/v10/commands/npm-login)를 참조하세요.\n\nGitHub Packages가 npm 사용 시 기본 패키지 레지스트리가 아니고 `npm audit` 명령을 사용하려는 경우, `--scope`에 인증할 때 패키지를 호스팅하는 네임스페이스(패키지 범위가 지정된 개인 계정 또는 조직  또는 패키지가 호스팅된 리포지토리를 소유한 주체)와 함께 GitHub Packages 플래그를 사용하는 것이 좋습니다.\n\n```shell\n$ npm login --scope=@NAMESPACE --auth-type=legacy --registry=https://npm.pkg.github.com\n\n> Username: USERNAME\n> Password: TOKEN\n```\n\n## 패키지 게시\n\n> \\[!NOTE]\n\n> * 패키지 이름 및 범위는 소문자만 사용해야 합니다.\n> * npm 버전의 tarball은 256MB보다 작아야 합니다.\n\n레지스트리는 GitHub Packages 조직 또는 개인 계정 내에 npm 패키지를 저장하고 패키지를 리포지토리와 연결할 수 있습니다. 리포지토리에서 사용 권한을 상속할지 또는 리포지토리와 독립적으로 세분화된 권한을 설정할지 선택할 수 있습니다.\n\n패키지를 처음 게시할 때 기본 표시 여부는 프라이빗입니다. 표시 유형 또는 액세스 권한을 변경하려면 [패키지의 액세스 제어 및 표시 여부 구성](/ko/packages/learn-github-packages/configuring-a-packages-access-control-and-visibility)을(를) 참조하세요. 게시된 패키지를 리포지토리와 연결하는 방법에 대한 자세한 내용은 [리포지토리를 패키지에 연결](/ko/packages/learn-github-packages/connecting-a-repository-to-a-package)을 참조하세요.\n\n`repository` 파일에 `package.json` 필드를 포함하면 패키지가 게시되는 즉시 패키지를 리포지토리에 연결할 수 있습니다. 이 메서드를 사용하여 여러 패키지를 동일한 리포지토리에 연결할 수도 있습니다. 자세한 내용은 [동일한 리포지토리에 여러 패키지 게시](#publishing-multiple-packages-to-the-same-repository)를 참조하세요.\n\n> \\[!NOTE]\n> 리포지토리에 연결된 패키지를 게시하는 경우, 패키지는 자동으로 연결된 리포지토리의 액세스 권한을 상속받고, 조직에서 액세스 권한의 자동 상속을 사용하지 않도록 설정하지 않은 한 연결된 리포지토리의 GitHub Actions 워크플로에 패키지에 대한 액세스 권한이 자동으로 부여됩니다. 자세한 내용은 [패키지의 액세스 제어 및 표시 여부 구성](/ko/packages/learn-github-packages/configuring-a-packages-access-control-and-visibility#about-inheritance-of-access-permissions)을(를) 참조하세요.\n\n프로젝트의 로컬 `.npmrc` 파일을 사용하거나 `publishConfig`의 `package.json` 옵션을 사용하여 프로젝트에 대한 범위 매핑을 설정할 수 있습니다.\nGitHub Packages 는 범위가 지정된 npm 패키지만 지원합니다. 범위가 지정된 패키지에는 `@NAMESPACE/PACKAGE-NAME` 형식의 이름이 있습니다. 범위가 지정된 패키지는 항상 `@` 기호로 시작합니다. 범위가 지정된 이름을 사용하려면 `package.json`의 이름을 업데이트해야 할 수 있습니다. 예를 들어 사용자가 `octocat`이고 패키지 이름이 `test`(으)로 지정된 경우 범위가 지정된 패키지 이름은 `\"name\": \"@octocat/test\"`과(와) 같이 할당됩니다.\n\n패키지를 게시한 후 GitHub에서 패키지를 볼 수 있습니다. 자세한 내용은 [패키지 보기](/ko/packages/learn-github-packages/viewing-packages)을(를) 참조하세요.\n\n### 로컬 `.npmrc` 파일을 사용하여 패키지 게시\n\n`.npmrc` 파일을 사용하여 프로젝트에 대한 범위 매핑을 구성할 수 있습니다.\n`.npmrc` 파일에서 URL 및 계정 소유자를 GitHub Packages 사용하므로 GitHub Packages 패키지 요청을 라우팅할 위치를 알 수 있습니다.\n`.npmrc` 파일을 사용하면 다른 개발자가 GitHub Packages 대신 npmjs.org에 실수로 패키지를 게시하는 일을 방지할 수 있습니다.\n\n1. GitHub Packages에 인증합니다. 자세한 내용은 [GitHub Packages에 인증](#authenticating-to-github-packages)을 참조하세요.\n\n2. `package.json` 파일과 동일한 디렉터리에서 GitHub Packages URL 및 패키지를 호스팅하는 네임스페이스를 지정하는 행을 포함하도록 `.npmrc` 파일을 만들거나 편집합니다. `NAMESPACE`을  패키지의 범위로 지정할 사용자 또는 조직 계정의 이름으로 변경합니다.\n\n   ```shell\n   @NAMESPACE:registry=https://npm.pkg.github.com\n   ```\n\n3. GitHub Packages에서 프로젝트를 찾을 수 있는 리포지토리에 *.npmrc* 파일을 추가합니다. 자세한 내용은 [리포지토리에 파일 추가](/ko/repositories/working-with-files/managing-files/adding-a-file-to-a-repository)을(를) 참조하세요.\n\n4. 프로젝트의 `package.json`에서 패키지 이름을 확인합니다.\n   `name` 필드에는 패키지의 범위와 이름이 포함되어야 합니다. 예를 들어, 패키지 이름이 \"test\"이고 이를 \"My-org\" GitHub 조직에 게시하는 경우, `name`에 있는 `package.json` 필드는 `@my-org/test`여야 합니다.\n\n5. 프로젝트의 `package.json`에 있는 `repository` 필드를 확인합니다. `repository` 필드는 GitHub 리포지토리의 URL과 일치해야 합니다. 예를 들어 리포지토리 URL이 `github.com/my-org/test`인 경우 리포지토리 필드는 `https://github.com/my-org/test.git`이어야 합니다.\n\n6. 패키지를 게시합니다.\n\n   ```shell\n   npm publish\n   ```\n\n### `publishConfig`을(를) 사용하여 `package.json` 파일에 패키지 게시\n\n`publishConfig` 파일의 `package.json` 요소를 사용하여 패키지를 게시할 레지스트리를 지정할 수 있습니다. 자세한 내용은 npm 설명서에서 [publishConfig](https://docs.npmjs.com/files/package.json#publishconfig)를 참조하세요.\n\n1. 패키지의 `package.json` 파일을 편집하고 `publishConfig` 항목을 포함합니다.\n\n   ```shell\n   \"publishConfig\": {\n     \"registry\": \"https://npm.pkg.github.com\"\n   },\n   ```\n\n2. 프로젝트의 `package.json`에 있는 `repository` 필드를 확인합니다. `repository` 필드는 GitHub 리포지토리의 URL과 일치해야 합니다. 예를 들어 리포지토리 URL이 `github.com/my-org/test`인 경우 리포지토리 필드는 `https://github.com/my-org/test.git`이어야 합니다.\n\n3. 패키지를 게시합니다.\n\n   ```shell\n   npm publish\n   ```\n\n## 동일한 리포지토리에 여러 패키지 게시\n\n여러 패키지를 게시하고 동일한 리포지토리에 연결 하려면 각 패키지의 GitHub 파일 필드에 리포지 `repository` 토리의 URL을 `package.json` 포함할 수 있습니다. 자세한 내용은 npm 설명서에서 [package.json 파일 만들기](https://docs.npmjs.com/creating-a-package-json-file) 및 [Node.js 모듈 만들기](https://docs.npmjs.com/creating-node-js-modules)를 참조하세요.\n\n리포지토리의 URL이 올바른지 확인하려면 게시 `REPOSITORY` 하려는 패키지가 포함된 리포지토리의 이름과 리포지토리를 소유한 개인 계정 또는 조직의 `OWNER` 이름으로 바꿉 GitHub 다.\n\nGitHub Packages는 패키지 이름을 기반으로 하는 대신 URL에 따라 리포지토리와 일치합니다.\n\n```shell\n\"repository\":\"https://github.com/OWNER/REPOSITORY\",\n```\n\n## 패키지 설치\n\n프로젝트의 GitHub Packages 파일에 패키지를 종속성으로 추가하여 `package.json`에서 패키지를 설치할 수 있습니다. 프로젝트에서 `package.json`을 사용하는 방법에 대한 자세한 내용은 npm 설명서의 [package.json 작업](https://docs.npmjs.com/getting-started/using-a-package.json)을 참조하세요.\n\n기본적으로 한 조직의 패키지를 추가할 수 있습니다. 자세한 내용은 [다른 조직에서 패키지 설치](#installing-packages-from-other-organizations)를 참조하세요.\n\n패키지를 설치하는 모든 요청이 `.npmrc` 통과 GitHub Packages되도록 프로젝트에 파일을 추가해야 합니다. 모든 패키지 요청을 GitHub Packages를 통해 라우팅하면 \\_npmjs.org\\_의 범위가 지정된 패키지와 범위가 지정되지 않은 패키지를 모두 사용할 수 있습니다. 자세한 내용은 npm 설명서의 [npm-scope](https://docs.npmjs.com/misc/scope)를 참조하세요.\n\n1. GitHub Packages에 인증합니다. 자세한 내용은 [GitHub Packages에 인증](#authenticating-to-github-packages)을 참조하세요.\n\n2. `package.json` 파일과 동일한 디렉터리에서 GitHub Packages URL 및 패키지를 호스팅하는 네임스페이스를 지정하는 행을 포함하도록 `.npmrc` 파일을 만들거나 편집합니다. `NAMESPACE`을  패키지의 범위로 지정할 사용자 또는 조직 계정의 이름으로 변경합니다.\n\n   ```shell\n   @NAMESPACE:registry=https://npm.pkg.github.com\n   ```\n\n3. GitHub Packages에서 프로젝트를 찾을 수 있는 리포지토리에 *.npmrc* 파일을 추가합니다. 자세한 내용은 [리포지토리에 파일 추가](/ko/repositories/working-with-files/managing-files/adding-a-file-to-a-repository)을(를) 참조하세요.\n\n4. 설치 중인 패키지를 사용하도록 프로젝트의 `package.json`을(를) 구성합니다. 패키지 종속성을 `package.json` 파일에 GitHub Packages추가하려면 전체 범위 패키지 이름(예: `@my-org/server`.)을 지정합니다.\n   *npmjs.com* 패키지의 경우 전체 이름(예: `@babel/core` 또는 `lodash`)을 지정합니다.\n   `ORGANIZATION_NAME/PACKAGE_NAME`을(를) 패키지 종속성으로 교체합니다.\n\n   ```json\n   {\n     \"name\": \"@my-org/server\",\n     \"version\": \"1.0.0\",\n     \"description\": \"Server app that uses the ORGANIZATION_NAME/PACKAGE_NAME package\",\n     \"main\": \"index.js\",\n     \"author\": \"\",\n     \"license\": \"MIT\",\n     \"dependencies\": {\n       \"ORGANIZATION_NAME/PACKAGE_NAME\": \"1.0.0\"\n     }\n   }\n   ```\n\n5. 패키지를 설치합니다.\n\n```shell\nnpm install\n```\n\n### 다른 조직에서 패키지 설치\n\n기본적으로 하나의 조직에 속한 GitHub Packages 패키지만 사용할 수 있습니다. 패키지 요청을 여러 조직 및 사용자에게 라우팅하려는 경우 파일에`.npmrc` 추가 줄을  프로젝트가`NAMESPACE` 포함된 리포지토리를 소유하는 패키지의 범위가 지정된개인 계정 또는 조직의\n\n```shell\n@NAMESPACE:registry=https://npm.pkg.github.com\n@NAMESPACE:registry=https://npm.pkg.github.com\n```"}