Node.js · 2026-02-01

GitHub Actions로 Node.js CI/CD 파이프라인 구축

GitHub Actions와 Node.js를 사용해 CI/CD 파이프라인을 단계별로 정리한 설명. 워크플로 예제, 자동 배포 스크립트, 테스트 통합 설명

작성일 : 2026-02-01 ㆍ 작성자 : 관리자
post
목차

소개

CI/CD는 코드 변경을 자동으로 빌드·검증·배포하는 방식이다. 이 글에서는 GitHub Actions를 이용해 Node.js 애플리케이션의 CI/CD 파이프라인을 구성하는 전체 흐름을 설명한다. 초보자도 따라할 수 있도록 준비물, 워크플로 구조, 주요 설정과 실습 예제를 차근차근 다룬다.

사전 준비

필수 요소

  • GitHub 저장소
  • Node.js 프로젝트(package.json 포함)
  • 배포 대상(예: VPS, Docker Registry, 클라우드 서비스)
  • 필요한 시크릿 값(GITHUB_TOKEN, SSH 키 또는 클라우드 자격증명)

프로젝트 구조 예

간단한 구조는 다음과 같다.

.
├─ .github/workflows/ci.yml
├─ package.json
├─ src/
└─ test/

파이프라인 개요

파이프라인은 보통 다음 단계로 구성된다.

  • 코드 체크아웃
  • 의존성 설치
  • 정적 분석 또는 린트
  • 단위 테스트 실행
  • 빌드 및 아티팩트 생성
  • 배포(조건부 실행)

이 흐름을 GitHub Actions 워크플로로 구현하면 push나 PR 이벤트마다 자동으로 실행할 수 있다. 검색 노출을 위해 본문에 주요 키워드인 "GitHub Actions Node.js CI 설정", "Node.js 자동 배포 GitHub Actions", "CI/CD Node.js 예제 파이프라인"을 자연스럽게 포함해 설명한다.

워크플로 예제

아래 예제는 push와 PR에서 동작하며, main 브랜치에 머지될 때만 배포를 실행한다.

name: CI/CD

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  build-test:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v3

      - name: Setup Node.js
        uses: actions/setup-node@v3
        with:
          node-version: '16'

      - name: Install dependencies
        run: npm ci

      - name: Lint
        run: npm run lint

      - name: Run tests
        run: npm test

  deploy:
    needs: build-test
    if: github.ref == 'refs/heads/main'
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v3

      - name: Setup Node.js
        uses: actions/setup-node@v3
        with:
          node-version: '16'

      - name: Install dependencies
        run: npm ci

      - name: Build
        run: npm run build

      - name: Deploy to server
        env:
          SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
        run: |
          mkdir -p ~/.ssh
          echo "$SSH_PRIVATE_KEY" > ~/.ssh/id_rsa
          chmod 600 ~/.ssh/id_rsa
          rsync -avz --delete ./dist/ user@server:/var/www/myapp

배포 방법과 보안

배포에는 여러 방법이 있다. SSH를 이용해 서버에 복사하거나, Docker 이미지를 빌드해 레지스트리에 푸시한 뒤 클러스터에서 배포할 수 있다. 중요한 점은 자격증명 관리를 GitHub Secrets에 보관하는 것이다. 공개 저장소에서는 민감 정보를 절대 코드에 포함하지 않아야 한다.

시크릿 관리

  • SSH 키: SSH_PRIVATE_KEY
  • 클라우드 자격증명: AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY 등
  • 환경 변수로 민감 값 주입

테스트 통합과 조건부 배포

테스트가 실패하면 배포가 일어나지 않아야 한다. GitHub Actions에서는 job 간 의존성(needs)을 사용해 이를 보장한다. 또한 브랜치, 태그, 레이블 같은 조건을 추가해 배포를 제어할 수 있다.

실무 팁

  • 캐시를 사용해 설치 속도를 개선(npm cache 또는 actions/cache)
  • 빌드 아티팩트를 업로드하고 검증 단계 추가
  • 롤백 전략을 사전 정의(버전 태깅, 레이블링)
  • 모니터링과 알림 연결(슬랙, 이메일)

예제 배포 스크립트

간단한 서버 복사 방식 배포 예시. 이 스크립트는 워크플로의 deploy 단계에서 실행된다.

# deploy.sh
set -e
BUILD_DIR=dist
TARGET=user@server:/var/www/myapp
rsync -avz --delete "$BUILD_DIR/" "$TARGET"
ssh user@server 'cd /var/www/myapp && pm2 restart myapp || pm2 start ecosystem.config.js'

마무리

GitHub Actions를 활용하면 Node.js 프로젝트의 CI/CD 파이프라인을 효율적으로 자동화할 수 있다. 이 문서에서는 기본 구성, 워크플로 예제, 보안과 배포 방식을 다뤘다. 실제 환경에서는 테스트 커버리지와 배포 안전성을 우선으로 두고 점진적으로 워크플로를 확장하는 것이 좋다.

GitHub Actions Node.js CI 설정 Node.js 자동 배포 GitHub Actions CI/CD Node.js 예제 파이프라인 GitHub Actions Node.js 배포 CI/CD 파이프라인 자동화 배포 워크플로 예제