ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

๋ฐ˜์‘ํ˜•

๐Ÿ“Œ NestJS + Kubernetes & ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๋ฐฐํฌ: ์‹ค์ „ ๊ฐ€์ด๋“œ

24. NestJS CI/CD ์ž๋™ํ™”๋กœ ์šด์˜ ํšจ์œจ ๊ทน๋Œ€ํ™” (ArgoCD + GitHub Actions)


NestJS ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์•ˆ์ •์ ์œผ๋กœ ์šด์˜ํ•˜๋ ค๋ฉด **์ง€์†์  ํ†ตํ•ฉ ๋ฐ ๋ฐฐํฌ(CI/CD)**๋ฅผ ํ†ตํ•ด ์ฝ”๋“œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋น ๋ฅด๊ณ  ์•ˆ์ „ํ•˜๊ฒŒ ๋ฐ˜์˜ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์ด๋ฒˆ ๊ธ€์—์„œ๋Š” GitHub Actions๋ฅผ ์ด์šฉํ•œ ๋นŒ๋“œ ์ž๋™ํ™”์™€ ArgoCD๋ฅผ ํ™œ์šฉํ•œ Kubernetes ํด๋Ÿฌ์Šคํ„ฐ ๋ฐฐํฌ ์ž๋™ํ™”๋ฅผ ์ค‘์‹ฌ์œผ๋กœ NestJS CI/CD ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์ถ• ์ „๋žต์„ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค. ๐Ÿš€


โœ… 1. CI/CD ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์กฐ

[๊ฐœ๋ฐœ์ž๊ฐ€ ์ฝ”๋“œ ํ‘ธ์‹œ] 
       ↓
[GitHub Actions]
 - ๋นŒ๋“œ & ํ…Œ์ŠคํŠธ
 - Docker ์ด๋ฏธ์ง€ ๋นŒ๋“œ & ํ‘ธ์‹œ
       ↓
[ArgoCD]
 - GitOps ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝ ๊ฐ์ง€
 - Kubernetes ํด๋Ÿฌ์Šคํ„ฐ์— ์ž๋™ ๋ฐฐํฌ

โœ… 2. GitHub Actions ์„ค์ • (CI ํŒŒํŠธ)

๐Ÿ“ฆ GitHub Actions ์„ค์ • ํŒŒ์ผ

๐Ÿ“‚ .github/workflows/ci.yml

name: CI for NestJS

on:
  push:
    branches: [main]

jobs:
  build-and-deploy:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout code
        uses: actions/checkout@v3

      - name: Set up Node.js
        uses: actions/setup-node@v3
        with:
          node-version: 18

      - name: Install dependencies
        run: npm ci

      - name: Run tests
        run: npm run test:ci

      - name: Build project
        run: npm run build

      - name: Set up Docker
        uses: docker/setup-buildx-action@v2

      - name: Log in to Docker Hub
        uses: docker/login-action@v2
        with:
          username: ${{ secrets.DOCKER_USERNAME }}
          password: ${{ secrets.DOCKER_PASSWORD }}

      - name: Build and push Docker image
        run: |
          docker build -t ${{ secrets.DOCKER_USERNAME }}/nestjs-app:latest .
          docker push ${{ secrets.DOCKER_USERNAME }}/nestjs-app:latest

โœ… 3. ArgoCD ์„ค์ • (CD ํŒŒํŠธ)

๐Ÿ“ฆ ArgoCD ์„ค์น˜ (Kubernetes ํด๋Ÿฌ์Šคํ„ฐ์—)

๋ฐ˜์‘ํ˜•
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

๐Ÿ“ฆ ArgoCD ์ ‘๊ทผ

kubectl port-forward svc/argocd-server -n argocd 8080:443
  • ๋ธŒ๋ผ์šฐ์ € ์ ‘์†: https://localhost:8080
  • ๊ธฐ๋ณธ ๋กœ๊ทธ์ธ: admin / ์ดˆ๊ธฐ ๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” kubectl get pods -n argocd ๋ช…๋ น์œผ๋กœ ํ™•์ธ

โœ… 4. ArgoCD ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒ์„ฑ

๐Ÿ“‚ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ •์˜

argocd app create nestjs-app \
  --repo https://github.com/your-username/nestjs-app \
  --path k8s \
  --dest-server https://kubernetes.default.svc \
  --dest-namespace default \
  --sync-policy automated

๐Ÿ“‚ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ž๋™ ๋™๊ธฐํ™” ์„ค์ •

argocd app set nestjs-app --sync-policy automated

โœ… 5. Kubernetes ๋ฐฐํฌ ํŒŒ์ผ ๊ตฌ์„ฑ

๐Ÿ“‚ k8s/deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nestjs-app
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nestjs-app
  template:
    metadata:
      labels:
        app: nestjs-app
    spec:
      containers:
        - name: nestjs-app
          image: your-docker-id/nestjs-app:latest
          ports:
            - containerPort: 3000
---
apiVersion: v1
kind: Service
metadata:
  name: nestjs-app
spec:
  ports:
    - port: 80
      targetPort: 3000
  selector:
    app: nestjs-app

โœ… 6. CI/CD ํŒŒ์ดํ”„๋ผ์ธ ํ…Œ์ŠคํŠธ

  1. ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜๊ณ  git push๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  2. GitHub Actions์—์„œ CI ํŒŒ์ดํ”„๋ผ์ธ์ด ์ž๋™ ์‹คํ–‰๋˜์–ด Docker ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•˜๊ณ  Docker Hub์— ํ‘ธ์‹œํ•ฉ๋‹ˆ๋‹ค.
  3. ArgoCD๊ฐ€ ์ƒˆ๋กœ์šด ์ด๋ฏธ์ง€๋ฅผ ๊ฐ์ง€ํ•˜๊ณ  Kubernetes์— ๋ฐฐํฌํ•ฉ๋‹ˆ๋‹ค.
  4. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ž๋™์œผ๋กœ ์ตœ์‹  ์ƒํƒœ๋กœ ๊ฐฑ์‹ ๋ฉ๋‹ˆ๋‹ค.

โœ… ์„ฑ๊ณต ์—ฌ๋ถ€ ํ™•์ธ:

argocd app get nestjs-app
kubectl get pods

โœ… 7. CI/CD ๊ณ ๋„ํ™” ์ „๋žต

ํ•ญ๋ชฉ ๊ฐœ์„  ๋ฐฉ๋ฒ•

๋ฆด๋ฆฌ์ฆˆ ๊ด€๋ฆฌ Git ํƒœ๊ทธ ๊ธฐ๋ฐ˜ ๋ฒ„์ „ ๊ด€๋ฆฌ (์˜ˆ: v1.0.0)
๋ธ”๋ฃจ๊ทธ๋ฆฐ ๋ฐฐํฌ Argo Rollouts์™€ ์—ฐ๊ณ„ํ•˜์—ฌ ํŠธ๋ž˜ํ”ฝ ๋ฌด์ค‘๋‹จ ์ „ํ™˜
๋ชจ๋‹ˆํ„ฐ๋ง Grafana์™€ ArgoCD ์—ฐ๋™ํ•˜์—ฌ ๋ฐฐํฌ ์ƒํƒœ ์‹œ๊ฐํ™”
๋กค๋ฐฑ ์ „๋žต Git ์ปค๋ฐ‹ ๋‹จ์œ„๋กœ ๋กค๋ฐฑ (argocd app rollback)

โœ… 8. CI/CD ๊ตฌ์ถ• ์‹œ ์œ ์˜์‚ฌํ•ญ

  • GitHub Actions์™€ ArgoCD์˜ ๊ถŒํ•œ ์„ค์ •์„ ๋ช…ํ™•ํžˆ ๊ด€๋ฆฌ
  • Kubernetes ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋ฆฌ์†Œ์Šค ๊ณผ๋ถ€ํ•˜๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด HPA ์„ค์ • ๊ณ ๋ ค
  • ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ๊ณผ ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์„ ๋ถ„๋ฆฌํ•˜์—ฌ ์„ค์ • ํŒŒ์ผ ๊ด€๋ฆฌ (values.dev.yaml, values.prod.yaml)

โœ… ๊ฒฐ๋ก : CI/CD ์ž๋™ํ™”๋กœ ์šด์˜ ๋ถ€๋‹ด ์ตœ์†Œํ™”

โœ… GitHub Actions๋กœ CI ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์„ฑํ•˜์—ฌ ์ž๋™ํ™”
โœ… ArgoCD๋กœ GitOps ๊ธฐ๋ฐ˜ CD ๊ด€๋ฆฌํ•˜์—ฌ ๋ฌด์ค‘๋‹จ ๋ฐฐํฌ
โœ… Kubernetes ํด๋Ÿฌ์Šคํ„ฐ์— ์ตœ์ ํ™”๋œ CI/CD ์•„ํ‚คํ…์ฒ˜ ๊ตฌ์ถ•
โœ… ๋ฐฐํฌ ์ƒํƒœ ๋ชจ๋‹ˆํ„ฐ๋ง๊ณผ ๋กค๋ฐฑ ์ „๋žต๊นŒ์ง€ ๊ณ ๋ คํ•˜์—ฌ ์•ˆ์ •์„ฑ ํ™•๋ณด

๋‹ค์Œ ๊ธ€์—์„œ๋Š” NestJS ํ”„๋กœ์ ํŠธ์—์„œ Kafka ๊ธฐ๋ฐ˜ ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆฌ๋ฐ ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค! ๐ŸŒ


๐Ÿ” ๋‹ค์Œ ๊ธ€ ์˜ˆ๊ณ : NestJS + Kafka๋กœ ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆฌ๋ฐ ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์ถ•

๐Ÿ“Œ ๋‹ค์Œ ํŽธ: 25. NestJS + Kafka ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ


 

NestJS CI/CD,NestJS ArgoCD,NestJS GitHub Actions,NestJS Kubernetes ๋ฐฐํฌ,NestJS CI ์ž๋™ํ™”,NestJS CD ์ž๋™ํ™”,NestJS GitOps,NestJS ์ž๋™ ๋ฐฐํฌ,NestJS ArgoCD ์„ค์ •,NestJS Docker CI/CD

โ€ป ์ด ํฌ์ŠคํŒ…์€ ์ฟ ํŒก ํŒŒํŠธ๋„ˆ์Šค ํ™œ๋™์˜ ์ผํ™˜์œผ๋กœ, ์ด์— ๋”ฐ๋ฅธ ์ผ์ •์•ก์˜ ์ˆ˜์ˆ˜๋ฃŒ๋ฅผ ์ œ๊ณต๋ฐ›์Šต๋‹ˆ๋‹ค.
๊ณต์ง€์‚ฌํ•ญ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€
Total
Today
Yesterday
๋งํฌ
ยซ   2025/05   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
๊ธ€ ๋ณด๊ด€ํ•จ
๋ฐ˜์‘ํ˜•