IT Developer/Node.js

Node.js 기초 <19. CI/CD (Continuous Integration & Deployment) 구축>

TEMA_ 2025. 3. 21. 16:00
반응형

노드 Node.js

19. CI/CD (Continuous Integration & Deployment) 구축 

 

안녕하세요! 태마입니다.

Node.js 기초 강좌입니다.

 

강좌의 경우 

1. 주제 간단 정리

2. 상세 주제 정리

으로 이루어져 있습니다.

 

노드 Node.js

포스팅 시작하겠습니다 :)

 

 

 

 


 

1. 주제 간단 정리

 

1. CI/CD란?

CI/CD(Continuous Integration & Continuous Deployment)는
코드 변경 사항을 자동으로 빌드, 테스트, 배포하는 개발 프로세스입니다.
이를 통해 소프트웨어 개발 속도를 높이고, 배포 자동화를 할 수 있습니다.

📌 CI/CD의 핵심 개념
CI(Continuous Integration, 지속적 통합) → 코드 변경 사항을 자동으로 테스트하고 빌드
CD(Continuous Deployment, 지속적 배포) → 테스트를 통과한 코드를 자동으로 배포
CD(Continuous Delivery, 지속적 제공) → 배포 준비가 완료된 코드를 수동 배포 가능

전통적인 배포 vs CI/CD 비교

구분전통적인 배포 방식CI/CD 방식

배포 과정 수동으로 빌드 및 배포 자동화된 빌드 및 배포
테스트 개발자가 직접 실행 자동화된 테스트 수행
에러 발생 시 배포 후 문제가 발생할 가능성 높음 배포 전 테스트로 문제를 미리 감지

📌 CI/CD를 적용하면 개발과 배포가 원활하게 이루어져 안정적인 서비스 운영이 가능!

✅ 여기까지 CI/CD의 개념과 필요성을 배웠습니다!
👉 "그렇다면, 실제로 CI/CD 파이프라인을 어떻게 구축할까?"
2부에서 GitHub Actions, Docker, Jenkins를 활용한 CI/CD 구축 방법을 배워봅시다!

반응형

 

2. 상세 주제 정리

 

1. GitHub Actions을 활용한 CI/CD 자동화

1) GitHub Actions 워크플로우 설정

name: CI/CD Pipeline

on:
  push:
    branches:
      - main

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - name: 코드 체크아웃
        uses: actions/checkout@v3

      - name: Node.js 설정
        uses: actions/setup-node@v3
        with:
          node-version: "18"

      - name: 의존성 설치
        run: npm install

      - name: 테스트 실행
        run: npm test

      - name: Docker 이미지 빌드 및 푸시
        run: |
          docker build -t myapp:latest .
          docker tag myapp:latest mydockerhub/myapp:latest
          echo "${{ secrets.DOCKER_PASSWORD }}" | docker login -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin
          docker push mydockerhub/myapp:latest

📌 코드 푸시 → 테스트 실행 → Docker 이미지 빌드 및 푸시 자동화!

2) GitHub Secrets 설정
✔ DOCKER_USERNAME → Docker Hub 계정
✔ DOCKER_PASSWORD → Docker Hub 비밀번호

📌 Docker Hub에 자동으로 최신 이미지를 푸시하도록 설정 가능!


 

2. Docker를 활용한 배포 자동화

1) Dockerfile 작성

FROM node:18
WORKDIR /app
COPY . .
RUN npm install
CMD ["node", "index.js"]
EXPOSE 3000

📌 Docker 이미지를 생성하여 어디서든 실행 가능!

2) Docker Compose 설정 (docker-compose.yml)

version: "3"
services:
  app:
    image: mydockerhub/myapp:latest
    ports:
      - "3000:3000"

📌 Docker Compose를 사용하여 컨테이너 실행 자동화!

3) 서버에서 Docker 컨테이너 실행

$ docker-compose up -d

📌 CI/CD가 완료되면, 서버에서 최신 컨테이너 실행!


 

3. Jenkins를 활용한 CI/CD 자동 배포

1) Jenkins 설치 및 실행

$ docker run -d -p 8080:8080 -p 50000:50000 --name jenkins jenkins/jenkins:lts

📌 Jenkins는 http://localhost:8080에서 확인 가능!

2) Jenkins에서 CI/CD 파이프라인 구성
1️⃣ Git 저장소 연결 → GitHub에서 변경 사항 감지
2️⃣ 빌드 스크립트 실행 → npm install && npm test 실행
3️⃣ Docker 빌드 및 배포 → docker-compose up -d 실행

3) Jenkinsfile 작성 (Jenkins 자동화 스크립트)

pipeline {
  agent any

  stages {
    stage("Checkout") {
      steps {
        git branch: 'main', url: 'https://github.com/myrepo.git'
      }
    }
    
    stage("Build & Test") {
      steps {
        sh 'npm install'
        sh 'npm test'
      }
    }

    stage("Docker Build & Push") {
      steps {
        sh 'docker build -t myapp:latest .'
        sh 'docker tag myapp:latest mydockerhub/myapp:latest'
        withCredentials([string(credentialsId: 'docker-hub-password', variable: 'DOCKER_PASS')]) {
          sh 'echo $DOCKER_PASS | docker login -u mydockerhub --password-stdin'
        }
        sh 'docker push mydockerhub/myapp:latest'
      }
    }

    stage("Deploy") {
      steps {
        sh 'docker-compose down'
        sh 'docker-compose up -d'
      }
    }
  }
}

📌 GitHub 코드 변경 → 빌드 & 테스트 → Docker 배포까지 자동화!


 

4. CI/CD 최적화 및 보안 고려 사항

1) 환경 변수 및 보안 키 관리
.env 파일을 사용하여 보안 정보 관리 (dotenv 활용)
GitHub Secrets 또는 Jenkins Credentials 사용하여 보안 강화

2) 블루-그린 배포(Blue-Green Deployment) 적용
새로운 버전의 컨테이너를 배포 후, 기존 컨테이너를 종료하는 방식
무중단 배포(Zero Downtime Deployment) 가능

3) 모니터링 & 알림 시스템 연동
CI/CD 과정에서 문제가 발생하면 Slack, Email 알림 발송

      - name: Slack 알림
        uses: rtCamp/action-slack-notify@v2
        env:
          SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }}
          SLACK_MESSAGE: "🚀 CI/CD 배포 완료!"

📌 배포 성공/실패 여부를 Slack으로 실시간 알림 가능!


 

✅ 여기까지 GitHub Actions, Docker, Jenkins를 활용한 CI/CD 구축 방법을 배웠습니다!
👉 "그렇다면, 서버리스(Serverless) 환경에서 CI/CD 구축은 어떻게 구현할까?"
 다음 회차에서 서버리스(Serverless) 환경에서 CI/CD 구축 방법을 배워봅시다!

반응형