노드 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 구축 방법을 배워봅시다!
'IT Developer > Node.js' 카테고리의 다른 글
Node.js 기초 <20. 서버리스(Serverless) 환경에서 CI/CD 구축> (0) | 2025.03.22 |
---|---|
Node.js 기초 <18. 중앙 집중형 로그 관리와 APM(Application Performance Monitoring)> (0) | 2025.03.20 |
Node.js 기초 <17. API 게이트웨이(API Gateway)와 서비스 관리> (0) | 2025.03.19 |
Node.js 기초 <16. 마이크로서비스 아키텍처(MSA)와 RabbitMQ 활용> (0) | 2025.03.18 |
Node.js 기초 <15. 작업 큐(Queue)와 백그라운드 작업 처리 (Bull 활용)> (1) | 2025.03.17 |
Node.js 기초 <14. 클라우드 스토리지(AWS S3, Firebase)와 파일 업로드> (0) | 2025.03.16 |
Node.js 기초 <13. 파일 업로드와 이미지 처리 (multer 활용)> (0) | 2025.03.15 |
Node.js 기초 <12. Express의 미들웨어와 요청 처리 흐름> (0) | 2025.03.14 |