GitHub 패키지 매니저로 비용 절감
Source: Dev.to
사전 요구 사항
시작하기 전에 다음을 확인하세요:
- NPM 패키지를 포함하고 있는 GitHub 저장소
- 최소한의
package.json설정 파일 - 저장소 생성 및 패키지 관리를 할 수 있는 권한이 있는 GitHub 계정
- 로컬에 설치된 Node.js와 npm
package.json 파일 설정
GitHub Package Manager를 사용할 것임을 나타내도록 package.json 파일을 수정합니다. name 필드에 GitHub 사용자 이름을 스코프로 포함시키세요:
{
"name": "@your-username/your-package",
"version": "1.0.0",
"description": "A private package published on GitHub Package Manager",
"repository": {
"type": "git",
"url": "https://github.com/your-username/your-repo.git"
},
"publishConfig": {
"registry": "https://npm.pkg.github.com/@your-username"
}
}
your-username과 your-repo를 실제 GitHub 사용자 이름과 저장소 이름으로 바꾸세요.
GitHub에서 액세스 토큰 생성
패키지를 배포하려면 적절한 권한을 가진 개인 액세스 토큰이 필요합니다.
- GitHub 계정 설정으로 이동합니다.
- 다음 권한을 가진 **Personal Access Token (classic)**을 생성합니다:
write:packagesread:packagesrepo(저장소가 비공개인 경우)
토큰은 비밀번호 관리자와 같은 안전한 장소에 보관하세요.
GitHub Actions 설정
패키지 빌드 및 배포 과정을 자동화하는 워크플로를 만듭니다. 다음 YAML 파일을 저장소의 .github/workflows/publish.yml에 추가하세요:
name: Build and Deploy
on:
push:
branches:
- release
jobs:
publish-gpr:
runs-on: ubuntu-latest
permissions:
packages: write
contents: read
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v1
with:
node-version: 20
registry-url: https://npm.pkg.github.com/
scope: '@your-username'
- uses: pnpm/action-setup@v3
with:
version: 9.10.0
- run: pnpm install
- run: pnpm publish:build
- run: npm publish
env:
NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
이 워크플로는 release 브랜치에 푸시될 때마다 트리거되어 자동으로 패키지를 GitHub Package Manager에 배포합니다.
워크플로 테스트
.github/workflows/publish.yml 파일을 release 브랜치에 커밋하고 푸시합니다. 올바르게 설정되었다면:
- GitHub Actions가 워크플로를 실행합니다.
- 패키지가 GitHub Package Manager에 배포됩니다.
- 저장소의 Packages 탭에서 패키지를 확인할 수 있습니다.
배포된 패키지 설치
다른 프로젝트에서 패키지를 사용하려면 프로젝트 루트에 다음 내용을 가진 .npmrc 파일을 추가합니다:
@your_username:registry=https://npm.pkg.github.com/
//npm.pkg.github.com/:_authToken=YOUR_TOKEN
engine-strict=true
패키지를 설치하려면 npm 명령을 실행합니다:
npm install @your-username/your-package
YOUR_TOKEN을 앞서 만든 토큰으로 교체하세요.
결론
GitHub Package Manager를 이용한 비공개 npm 패키지 배포는 기존 npm 서비스에 비해 비용 효율적이며 간편한 대안입니다. GitHub Actions와 결합하면 전체 과정을 완전히 자동화할 수 있어 시간과 리소스를 절약할 수 있습니다.
이 방법을 사용하면 유료 npm 비공개 패키지가 필요 없으며, 코드, 버전 관리, 패키지를 모두 하나의 GitHub 생태계에서 관리할 수 있습니다.