{"meta":{"title":"Node.js 빌드 및 테스트","intro":"CI(연속 통합) 워크플로를 만들어 Node.js 프로젝트를 빌드하고 테스트하는 방법을 알아보세요.","product":"GitHub Actions","breadcrumbs":[{"href":"/ko/enterprise-cloud@latest/actions","title":"GitHub Actions"},{"href":"/ko/enterprise-cloud@latest/actions/tutorials","title":"자습서"},{"href":"/ko/enterprise-cloud@latest/actions/tutorials/build-and-test-code","title":"코드 빌드 및 테스트"},{"href":"/ko/enterprise-cloud@latest/actions/tutorials/build-and-test-code/nodejs","title":"Node.js"}],"documentType":"article"},"body":"# Node.js 빌드 및 테스트\n\nCI(연속 통합) 워크플로를 만들어 Node.js 프로젝트를 빌드하고 테스트하는 방법을 알아보세요.\n\n## 소개\n\n이 가이드에서는 Node.js 코드를 빌드하고 테스트하는 CI(연속 통합) 워크플로를 만드는 방법을 보여 줍니다. CI 테스트에 통과하면 코드를 배포하거나 패키지를 게시할 수 있습니다.\n\n## 필수 조건\n\nNode.js, YAML, 워크플로 구성 옵션과 워크플로 파일을 만드는 방법을 기본적으로 이해하는 것이 좋습니다. 자세한 내용은 다음을 참조하세요.\n\n* [워크플로 작성](/ko/enterprise-cloud@latest/actions/learn-github-actions)\n* [Node.js 시작](https://nodejs.org/en/docs/guides/getting-started-guide/)\n\n## Node.js 워크플로 템플릿 사용\n\n빠르게 시작하려면 워크플로 템플릿을 리포지토리의 `.github/workflows` 디렉터리에 추가합니다.\n\nGitHub는 대부분의 Node.js 기반 Java 프로젝트에서 작동하는 Node.js 워크플로 템플릿을 제공합니다. 이 가이드의 후속 섹션에서는 이 워크플로 템플릿을 사용자 지정하는 방법에 대한 예시를 제공합니다.\n\n1. GitHub에서 리포지토리의 기본 페이지로 이동합니다.\n\n2. 리포지토리 이름에서 **<svg version=\"1.1\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" class=\"octicon octicon-play\" aria-label=\"play\" role=\"img\"><path d=\"M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Zm4.879-2.773 4.264 2.559a.25.25 0 0 1 0 .428l-4.264 2.559A.25.25 0 0 1 6 10.559V5.442a.25.25 0 0 1 .379-.215Z\"></path></svg> 작업**을 클릭합니다.\n\n   ![\"github/docs\" 리포지토리의 탭 스크린샷. \"작업\" 탭은 주황색 윤곽선으로 강조 표시됩니다.](/assets/images/help/repository/actions-tab-global-nav-update.png)\n\n3. 리포지토리에 워크플로가 이미 있는 경우 **새 워크플로**를 클릭합니다.\n\n4. \"워크플로 선택\" 페이지에는 권장되는 워크플로 템플릿의 선택 항목이 표시됩니다. \"Node.js\"를 검색합니다.\n\n5. ```\n          **지속적 통합**을 클릭하여 워크플로 선택을 필터링합니다.\n   ```\n\n6. \"Node.js\" 워크플로에서 **구성**을 클릭합니다.\n\n7. 필요에 따라 워크플로를 편집합니다. 예를 들어 사용하려는 노드 버전을 변경합니다.\n\n8. ```\n          **변경 내용 커밋**을 클릭합니다.\n   ```\n\n`node.js.yml` 워크플로 파일이 리포지토리의 `.github/workflows` 디렉터리에 추가됩니다.\n\n## Node.js 버전 지정\n\nNode.js 버전을 지정하는 가장 쉬운 방법은 GitHub에서 제공하는 `setup-node` 작업을 사용하는 것입니다. 자세한 내용은 [`setup-node`](https://github.com/actions/setup-node/)를 참조하세요.\n\n이 `setup-node` 작업은 Node.js 버전을 입력으로 사용하고 실행기에서 해당 버전을 구성합니다.\n`setup-node` 작업은 각 실행기의 도구 캐시에서 Node.js의 특정 버전을 찾아 필수 이진 파일을 `PATH`에 추가합니다. 이 이진 파일은 나머지 작업 동안 유지됩니다.\n`setup-node` 작업을 사용하는 것은 다양한 실행기 및 Node.js 버전 간에 일관된 동작을 보장하므로 GitHub Actions로 Node.js를 사용하는 데 권장되는 방법입니다. 자체 호스트 실행기를 사용하는 경우 Node.js를 설치하고 이를 `PATH`에 추가해야 합니다.\n\n워크플로 템플릿에는 `node-version`에 나열된 Node.js 버전으로 코드를 빌드하고 테스트하는 행렬형 전략이 포함되어 있습니다. 버전 번호의 ‘x’는 해당 버전에서 사용 가능한 최신 마이너 및 패치 릴리스와 일치하는 와일드카드 문자입니다.\n`node-version` 배열에 지정된 Node.js의 각 버전은 동일한 단계를 실행하는 작업을 만듭니다.\n\n각 작업은 `node-version` 컨텍스트를 사용하여 매트릭스 `matrix` 배열에 정의된 값에 액세스할 수 있습니다.\n`setup-node` 작업은 컨텍스트를 `node-version` 입력으로 사용합니다.\n`setup-node` 작업은 코드를 빌드하고 테스트하기 전에 다른 Node.js 버전으로 각 작업을 구성합니다. 행렬 전략 및 컨텍스트에 대한 자세한 내용은 [GitHub Actions에 대한 워크플로 구문](/ko/enterprise-cloud@latest/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstrategymatrix) 및 [문맥 참조](/ko/enterprise-cloud@latest/actions/learn-github-actions/contexts)을(를) 참조하세요.\n\n```yaml copy\nstrategy:\n  matrix:\n    node-version: ['18.x', '20.x']\n\nsteps:\n- uses: actions/checkout@v6\n- name: Use Node.js ${{ matrix.node-version }}\n  uses: actions/setup-node@v4\n  with:\n    node-version: ${{ matrix.node-version }}\n```\n\n또는 정확한 Node.js 버전으로 빌드하고 테스트할 수 있습니다.\n\n```yaml copy\nstrategy:\n  matrix:\n    node-version: ['10.17.0', '17.9.0']\n```\n\n단일 버전의 Node.js를 사용하여 빌드하고 테스트할 수도 있습니다.\n\n```yaml copy\nname: Node.js CI\n\non: [push]\n\njobs:\n  build:\n\n    runs-on: ubuntu-latest\n\n    steps:\n      - uses: actions/checkout@v6\n      - name: Use Node.js\n        uses: actions/setup-node@v4\n        with:\n          node-version: '20.x'\n      - run: npm ci\n      - run: npm run build --if-present\n      - run: npm test\n```\n\nNode.js 버전을 지정하지 않으면 GitHub에서 환경의 기본 Node.js 버전을 사용합니다.\n자세한 내용은 [GitHub 호스팅 실행기](/ko/enterprise-cloud@latest/actions/using-github-hosted-runners/about-github-hosted-runners#supported-software)을(를) 참조하세요.\n\n## 종속성 설치\n\nGitHub 호스트 실행기에는 npm과 Yarn 종속성 관리자가 설치되어 있습니다. 코드를 빌드하고 테스트하기 전에 npm 및 Yarn을 사용하여 워크플로에 종속성을 설치할 수 있습니다. Windows 및 Linux GitHub호스트 실행기에도 Grunt, Gulp, Bower가 설치되어 있습니다.\n\n종속성을 캐시하여 워크플로 속도를 높일 수도 있습니다. 자세한 내용은 [종속성 캐싱 참조](/ko/enterprise-cloud@latest/actions/using-workflows/caching-dependencies-to-speed-up-workflows)을(를) 참조하세요.\n\n### npm을 사용한 예시\n\n이 예시에서는 `package-lock.json` 또는 `npm-shrinkwrap.json` 파일에 버전을 설치하고 잠금 파일이 업데이트를 방지합니다. 일반적으로 `npm ci`를 사용하는 것이 `npm install`을 실행하는 것보다 빠릅니다. 자세한 내용은 [`npm ci`](https://docs.npmjs.com/cli/ci.html) 및 [더 빠르고 안정적인 빌드를 위한 `npm ci` 소개](https://blog.npmjs.org/post/171556855892/introducing-npm-ci-for-faster-more-reliable)를 참조하세요.\n\n```yaml copy\nsteps:\n- uses: actions/checkout@v6\n- name: Use Node.js\n  uses: actions/setup-node@v4\n  with:\n    node-version: '20.x'\n- name: Install dependencies\n  run: npm ci\n```\n\n```\n          `npm install`을 사용하면 `package.json` 파일에 정의된 종속성이 설치됩니다. 자세한 내용은 [`npm install`](https://docs.npmjs.com/cli/install)를 참조하세요.\n```\n\n```yaml copy\nsteps:\n- uses: actions/checkout@v6\n- name: Use Node.js\n  uses: actions/setup-node@v4\n  with:\n    node-version: '20.x'\n- name: Install dependencies\n  run: npm install\n```\n\n### Yarn을 사용한 예시\n\n이 예시에서는 `yarn.lock` 파일에 정의된 종속성을 설치하고 `yarn.lock` 파일 업데이트를 방지합니다. 자세한 내용은 [`yarn install`](https://yarnpkg.com/en/docs/cli/install)를 참조하세요.\n\n```yaml copy\nsteps:\n- uses: actions/checkout@v6\n- name: Use Node.js\n  uses: actions/setup-node@v4\n  with:\n    node-version: '20.x'\n- name: Install dependencies\n  run: yarn --frozen-lockfile\n```\n\n또는 `package.json` 파일에 정의된 종속성을 설치할 수 있습니다.\n\n```yaml copy\nsteps:\n- uses: actions/checkout@v6\n- name: Use Node.js\n  uses: actions/setup-node@v4\n  with:\n    node-version: '20.x'\n- name: Install dependencies\n  run: yarn\n```\n\n### 프라이빗 레지스트리를 사용하고 .npmrc 파일을 만드는 예시\n\n`setup-node` 작업을 사용하여 기본 레지스트리 및 범위를 구성하는 실행기에서 로컬 `.npmrc` 파일을 만들 수 있습니다. 또한 `setup-node` 작업은 프라이빗 레지스트리에 액세스하거나 노드 패키지를 게시하는 데 사용되는 입력으로 인증 토큰을 허용합니다. 자세한 내용은 [`setup-node`](https://github.com/actions/setup-node/)를 참조하세요.\n\n프라이빗 레지스트리에 인증하려면 npm 인증 토큰을 비밀로 저장해야 합니다. 예를 들어 `NPM_TOKEN`이라는 레지스트리 비밀을 만듭니다. 자세한 내용은 [GitHub Actions에서 비밀 사용](/ko/enterprise-cloud@latest/actions/security-guides/using-secrets-in-github-actions)을(를) 참조하세요.\n\n아래 예시에서 비밀 `NPM_TOKEN`은 npm 인증 토큰을 저장합니다.\n`setup-node` 작업은 `.npmrc` 환경 변수에서 npm 인증 토큰을 읽도록 `NODE_AUTH_TOKEN` 파일을 구성합니다.\n`setup-node` 작업을 사용하여 `.npmrc` 파일을 만들 때 npm 인증 토큰이 포함된 비밀로 `NODE_AUTH_TOKEN` 환경 변수를 설정해야 합니다.\n\n종속성을 설치하기 전에 `setup-node` 작업을 사용하여 `.npmrc` 파일을 만듭니다. 작업에는 두 개의 입력 매개 변수가 있습니다.\n`node-version` 매개 변수는 Node.js 버전을 설정하고 `registry-url` 매개 변수는 기본 레지스트리를 설정합니다. 패키지 레지스트리에서 범위를 사용하는 경우 `scope` 매개 변수를 사용해야 합니다. 자세한 내용은 [`npm-scope`](https://docs.npmjs.com/misc/scope)를 참조하세요.\n\n```yaml copy\nsteps:\n- uses: actions/checkout@v6\n- name: Use Node.js\n  uses: actions/setup-node@v4\n  with:\n    always-auth: true\n    node-version: '20.x'\n    registry-url: https://registry.npmjs.org\n    scope: '@octocat'\n- name: Install dependencies\n  run: npm ci\n  env:\n    NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}\n```\n\n위의 예제에서는 다음 콘텐츠가 포함된 `.npmrc` 파일을 만듭니다.\n\n```shell\n//registry.npmjs.org/:_authToken=${NODE_AUTH_TOKEN}\n@octocat:registry=https://registry.npmjs.org/\nalways-auth=true\n```\n\n### 종속성 캐싱 예시\n\n```\n          [\n          `setup-node`작업](https://github.com/actions/setup-node)을 사용하여 종속성을 캐시하고 복원할 수 있습니다.\n```\n\n다음 예시에서는 npm에 대한 종속성을 캐시합니다.\n\n```yaml copy\nsteps:\n- uses: actions/checkout@v6\n- uses: actions/setup-node@v4\n  with:\n    node-version: '20'\n    cache: 'npm'\n- run: npm install\n- run: npm test\n```\n\n다음 예시에서는 Yarn에 대한 종속성을 캐시합니다.\n\n```yaml copy\nsteps:\n- uses: actions/checkout@v6\n- uses: actions/setup-node@v4\n  with:\n    node-version: '20'\n    cache: 'yarn'\n- run: yarn\n- run: yarn test\n```\n\n다음 예시에서는 pnpm(v6.10 이상)에 대한 종속성을 캐시합니다.\n\n```yaml copy\n# 이 워크플로는 GitHub에서 인증되지 않은 작업을 사용합니다.\n# 작업은 타사에서 제공하며\n# 별도의 서비스 약관, 개인정보처리방침, 지원 설명서에서 규정됩니다.\n# 참조하세요.\n\n# NOTE: pnpm caching support requires pnpm version >= 6.10.0\n\nsteps:\n- uses: actions/checkout@v6\n- uses: pnpm/action-setup@0609f0983b7a228f052f81ef4c3d6510cae254ad\n  with:\n    version: 6.10.0\n- uses: actions/setup-node@v4\n  with:\n    node-version: '20'\n    cache: 'pnpm'\n- run: pnpm install\n- run: pnpm test\n```\n\n사용자 지정 요구사항이 있거나 캐싱에 대한 세부적인 제어가 필요한 경우 [`cache` 작업](https://github.com/marketplace/actions/cache)을 사용할 수 있습니다. 자세한 내용은 [종속성 캐싱 참조](/ko/enterprise-cloud@latest/actions/using-workflows/caching-dependencies-to-speed-up-workflows)을(를) 참조하세요.\n\n## 코드 빌드 및 테스트\n\n코드를 빌드하고 테스트하기 위해 로컬에서 사용하는 것과 동일한 명령을 사용할 수 있습니다. 예를 들어 `npm run build`를 실행하여 `package.json` 파일에 정의된 빌드 단계를 실행하고 `npm test`를 실행하여 테스트 모음을 실행하는 경우 워크플로 파일에 해당 명령을 추가합니다.\n\n```yaml copy\nsteps:\n- uses: actions/checkout@v6\n- name: Use Node.js\n  uses: actions/setup-node@v4\n  with:\n    node-version: '20.x'\n- run: npm install\n- run: npm run build --if-present\n- run: npm test\n```\n\n## 워크플로 데이터를 아티팩트로 패키지\n\n빌드 및 테스트 단계에서 아티팩트를 저장하여 작업이 완료된 후 볼 수 있습니다. 예를 들어 로그 파일, 코어 덤프, 테스트 결과 또는 스크린샷을 저장해야 할 수 있습니다. 자세한 내용은 [워크플로 아티팩트와 데이터 저장 및 공유](/ko/enterprise-cloud@latest/actions/using-workflows/storing-workflow-data-as-artifacts)을(를) 참조하세요.\n\n## 패키지 레지스트리에 게시\n\nCI 테스트에 통과하면 Node.js 패키지를 패키지 레지스트리에 게시하도록 워크플로를 구성할 수 있습니다. npm 및 GitHub Packages에 게시하는 방법에 대한 자세한 내용은 [Node.js 패키지 게시](/ko/enterprise-cloud@latest/actions/publishing-packages/publishing-nodejs-packages)을(를) 참조하세요."}