티스토리 뷰
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가 자동으로:
- Docker image 빌드
- AWS ECR push
- K8s manifest 업데이트
- ArgoCD가 자동 배포
- 롤백 필요 시 자동 롤백
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
'study > 백엔드' 카테고리의 다른 글
| Stripe 구독(Subscription) + 사용자 인증(Auth) + AI 기능 제한까지 (0) | 2025.12.05 |
|---|---|
| 실서비스급 NestJS + Next.js 프로젝트에 AI 기능 붙이기 (0) | 2025.12.01 |
| Next.js + NestJS + Cloudflare 완전 통합 운영 아키텍처 구축 (0) | 2025.11.21 |
| AWS + Cloudflare 기반 NestJS 운영환경 구축 (0) | 2025.11.19 |
| GitHub Actions로 완전 자동화된 NestJS 배포 파이프라인 구축하기 (0) | 2025.11.17 |
- Total
- Today
- Yesterday
- 쿠버네티스
- llm
- SEO최적화
- DevOps
- REACT
- rag
- 웹개발
- NestJS
- Docker
- kotlin
- Next.js
- seo 최적화 10개
- nextJS
- 딥러닝
- 백엔드개발
- Redis
- 프론트엔드개발
- CI/CD
- Prisma
- JAX
- fastapi
- 압박면접
- JWT
- ai철학
- PostgreSQL
- flax
- node.js
- Express
- 개발블로그
- Python
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |

