티스토리 뷰

반응형

Terraform + GitOps(ArgoCD)로 “전체 인프라를 코드로 관리”하기

(Next.js + NestJS + Cloudflare + AWS 인프라 100% 자동화 편)


이제 우리는 프론트/백엔드/배포/CDN/SSL/스토리지까지 완성된 SaaS 구조를 구축했다.
이번 글은 한 단계 더 나아간다.

“서버, CDN, DB, Redis, 네트워크, 배포 파이프라인 전체를 코드로 관리한다.”

이것이 바로 IaC (Infrastructure as Code)GitOps의 세계다.
실제로 스타트업–대기업까지 전부 이 방식으로 운영한다.


🧭 이번 목표

카테고리 기술 설명

인프라 정의 Terraform AWS, Cloudflare 리소스 전부 코드로 생성
운영/배포 자동화 ArgoCD (GitOps) Git push → 자동 배포 → 자동 롤백
런타임 Kubernetes(K8s) NestJS/Next.js를 완전 컨테이너 오케스트레이션
상태 관리 Terraform Backend (S3 + DynamoDB) IaC의 원자성 & 버저닝
이미지 관리 Docker Registry (ECR) 자동 빌드 + 이미지 버전 관리

이제 당신이 push 하면, 시스템은 스스로 인프라를 만들고 업데이트하고 롤백한다.
진짜로 “사람이 손댈 게 없는” 자동화 체인이 완성된다.


1️⃣ 시스템 전체 아키텍처

                         ┌─────────────────────────────┐
                         │      GitHub Repository       │
                         │  (Next.js + NestJS 소스)     │
                         └───────────┬─────────────────┘
                                     │
                             Git push(main)
                                     │
                 ┌───────────────────▼────────────────────┐
                 │             GitHub Actions              │
                 │  (Docker Build → ECR Push)             │
                 └───────────────┬────────────────────────┘
                                 │
                      Update K8s Manifest Repo
                                 │
                 ┌───────────────▼───────────────┐
                 │            ArgoCD              │
                 │   (Auto Sync + Auto Rollback)  │
                 └───────────────┬───────────────┘
                                 │
                          Apply to K8s Cluster
                                 │
     ┌───────────────────────┬────────────────────────┬─────────────────────┐
     ▼                       ▼                        ▼
[NestJS API]           [Next.js SSR]            [Redis / RDS Proxy]
(Docker + K8s)         (Cloudflare Pages)       (External Services)

2️⃣ Terraform로 AWS + Cloudflare 리소스 자동 생성

Terraform은 다음을 “코드로” 만든다:

  • VPC / Subnets / Route Tables
  • EC2 또는 EKS(Kubernetes 클러스터)
  • IAM Role / Security Groups
  • RDS(MySQL), Redis(ElastiCache)
  • Cloudflare DNS / Page Rules / R2
  • Load Balancer / Target Group
  • AutoScaling Group

Terraform 예시: Cloudflare + R2 생성

provider "cloudflare" {
  api_token = var.cloudflare_api_token
}

resource "cloudflare_r2_bucket" "app" {
  account_id = var.cloudflare_account_id
  name       = "nest-assets"
}

Terraform 예시: AWS EKS 생성 (요약)

module "eks" {
  source          = "terraform-aws-modules/eks/aws"
  cluster_name    = "myapp-eks"
  cluster_version = "1.29"

  node_groups = {
    app_nodes = {
      desired_capacity = 2
      max_capacity     = 4
      instance_types   = ["t3.medium"]
    }
  }
}

Terraform 예시: Load Balancer + TargetGroup

resource "aws_lb" "public" {
  name               = "myapp-lb"
  internal           = false
  load_balancer_type = "application"
  subnets            = module.vpc.public_subnets
}

하나의 .tf 파일이 수십 개의 리소스를 자동으로 만든다.
수동 설정은 이제 끝이다.


3️⃣ GitOps: ArgoCD로 “Git이 곧 배포”가 되게 한다

반응형

Terraform은 인프라를 만들고,
ArgoCD는 애플리케이션을 자동 배포한다.

ArgoCD 설치 (K8s 클러스터 내부)

kubectl create namespace argocd
kubectl apply -n argocd \
  -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

ArgoCD 앱 연결

application.yaml

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: nest-api
spec:
  project: default
  source:
    repoURL: https://github.com/you/k8s-manifests
    path: apps/nest-api
    targetRevision: main
  destination:
    server: https://kubernetes.default.svc
    namespace: app
  syncPolicy:
    automated:
      prune: true
      selfHeal: true

ArgoCD는 자동으로:

  • 새 버전 docker image 감지
  • Deployment 업데이트
  • 헬스 체크 실패 → 이전 버전으로 자동 롤백

4️⃣ GitHub Actions: Docker Build → ECR Push → K8s Manifest Update

docker-build.yml

name: Build & Push

on:
  push:
    branches: [ "main" ]

jobs:
  docker:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v4

    - name: Login to ECR
      uses: aws-actions/amazon-ecr-login@v2

    - name: Build image
      run: |
        docker build -t myapp-api .
        docker tag myapp-api:latest $ECR_URL/myapp-api:latest

    - name: Push image
      run: |
        docker push $ECR_URL/myapp-api:latest

    - name: Update K8s Manifest
      run: |
        sed -i "s|image: .*$|image: $ECR_URL/myapp-api:latest|" k8s/nest-api/deployment.yaml
        git commit -am "update image"
        git push origin main

이제 개발자는
git push 하면 Actions가 자동으로:

  1. Docker image 빌드
  2. AWS ECR push
  3. K8s manifest 업데이트
  4. ArgoCD가 자동 배포
  5. 롤백 필요 시 자동 롤백

5️⃣ Kubernetes Deployment for NestJS

k8s/nest-api/deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nest-api
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nest-api
  template:
    metadata:
      labels:
        app: nest-api
    spec:
      containers:
        - name: nest-api
          image: <ECR_IMAGE_LATEST>
          ports:
            - containerPort: 3000
          envFrom:
            - secretRef:
                name: nest-secret

6️⃣ 최종 흐름

Developer → git push main
      ↓
GitHub Actions (Build → ECR push → Manifest Update)
      ↓
ArgoCD 자동 감지
      ↓
Kubernetes 클러스터에 서비스 자동 배포
      ↓
Cloudflare Edge CDN 통해 전 세계 사용자에게 즉시 반영

7️⃣ 요약: 이제 서비스 전체가 자동화되었습니다

영역 상태

Next.js 프론트 Cloudflare Pages CDN
NestJS 백엔드 Kubernetes 자동 스케일
DB, Redis AWS Managed Services
CDN + DNS Cloudflare Edge
IaC Terraform로 자동 생성
배포 GitOps + ArgoCD 자동화
이미지 AWS ECR
운영 PM2 → K8s ReplicaSet로 대체

4줄로 요약

코드만 짜면 모든 인프라가 자동으로 만들어지고,
배포되고, 롤백되고, 전 세계 CDN에 반영된다.
개발자는 오직 코딩에만 집중하면 된다.
이것이 진짜 DevOps의 완성이다.


🔮 다음편 예고

지금까지 만든 인프라를 기반으로
👉 LLM 기반 기능 추가 (RAG + Vector DB + 이미지 임베딩)
즉, “AI 기능을 실서비스에 올리는 과정”을 다룬다.

이제 당신의 프로젝트는
“단순 CRUD 사이드프로젝트”가 아니라
AI 기능까지 붙인 완전한 SaaS 백엔드로 성장한다.


 

Terraform, ArgoCD, GitOps, Kubernetes, EKS, Cloudflare, IaC, DevOps, Fullstack, NestJS, Next.js

※ 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/01   »
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
글 보관함
반응형