🌍 배경
현대 DevOps 환경에서 “코드로 모든 것을 정의한다”는 Infrastructure as Code(IaC)는 더 이상 선택이 아닌 필수입니다.
하지만 DB 마이그레이션은 여전히 수동, 혹은 애플리케이션과 느슨하게 연결되어 있는 경우가 많습니다.
실리콘밸리의 상위 SRE/DevOps 팀들은 Terraform으로 DB 인프라를 정의하고, 동시에 GitOps 기반으로 DB 마이그레이션을 통합하여 완전 자동화된 구조를 구성하고 있습니다.
⸻
🎯 목표
• Terraform으로 DB 인프라 생성 및 관리 (RDS, Cloud SQL, PlanetScale 등)
• GitHub Actions + ArgoCD 기반 마이그레이션 연동
• DB 버전 관리, 보안, 마이그레이션 승인까지 Git으로 추적
• 머지 시점에만 마이그레이션 실행되며 자동 롤백 가능
⸻
⚙️ 전체 구성 아키텍처
GitHub
├── infra/terraform → DB 생성
├── app/migrations → SQL or Prisma/Flyway 등
└── .github/workflows/ → DB 상태 확인 및 마이그레이션 트리거
CI/CD
├── Terraform apply (dev/stage/prod)
└── Migration apply (ArgoCD or custom K8s job)
ArgoCD
└── Preview 환경 + 마이그레이션 동기화
⸻
📁 디렉토리 구조
repo-root/
├── infra/
│ └── terraform/
│ ├── rds.tf
│ ├── variables.tf
│ └── outputs.tf
├── migrations/
│ └── 20240529_initial_schema/
└── .github/
└── workflows/
├── terraform-apply.yml
└── db-migrate.yml
⸻
🧪 예시: Terraform으로 RDS 생성
resource "aws_db_instance" "app_db" {
identifier = "app-db-${var.env}"
allocated_storage = 20
engine = "postgres"
instance_class = "db.t3.micro"
username = "admin"
password = var.db_password
skip_final_snapshot = true
}
⸻
🔧 GitHub Actions – Terraform Apply + Migration
name: Infra + DB Migration
on:
push:
branches: [main]
jobs:
apply-infra:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Setup Terraform
uses: hashicorp/setup-terraform@v2
- name: Terraform Apply
run: |
terraform init
terraform apply -auto-approve
migrate:
needs: apply-infra
runs-on: ubuntu-latest
steps:
- name: Run migration
run: |
psql ${{ secrets.DB_URI }} < migrations/20240529_initial_schema/schema.sql
⸻
🔁 실패 대응 전략
• PR 시점마다 dry-run + 스냅샷 기반 롤백
• terraform destroy에 의존하지 않고 DB snapshot → 재적용
• 마이그레이션 실패 시 Slack으로 알림 후 자동 revert PR 생성
⸻
🔐 보안 및 운영 팁
항목 팁
DB 비밀번호 secrets.GITHUB_TOKEN, Vault, AWS Secrets Manager로 관리
Migration 승인 CODEOWNERS로 승인 체계 필수화
Terraform Lock terraform state는 S3 + DynamoDB Lock으로 충돌 방지
커스텀 모듈화 환경별 (dev/stage/prod) DB 인프라 재사용을 위해 모듈화
⸻
📈 기대 효과
요소 효과
신뢰성 배포와 동시에 정확한 DB 스키마 적용 보장
가시성 모든 DB 변경 내역 Git commit으로 추적 가능
속도 신규 DB 생성 후 자동 마이그레이션까지 풀자동화
보안 DB 접근 최소화, Git 기반 인증 절차 완비
⸻
🧩 결론
이 전략은 Terraform을 단순한 VM·LB 생성 도구로 쓰는 것이 아니라, DB 환경까지 완전 통합하는 고급 GitOps 운영 전략입니다.
특히:
• 환경별 DB 자동 구성
• PR 기반 마이그레이션 자동 적용
• 장애 시점 스냅샷 기반 복원
이러한 모든 흐름이 하나의 CI/CD 파이프라인에서 자연스럽게 흘러갑니다.
'IT & Tech 정보' 카테고리의 다른 글
🔐 HashiCorp Vault + Kubernetes 동적 인증 완전 자동화: 서비스 계정으로 인증 받고 TTL 기반 시크릿 자동 주입까지 (0) | 2025.05.29 |
---|---|
🔐 Terraform + Vault + ArgoCD 기반 전환경 비밀정보(Secrets) 자동 관리 파이프라인 구축기 (0) | 2025.05.29 |
🛠️ GitOps 기반 데이터 마이그레이션 자동화: PR 단위 DB 변경 추적, 롤백, 그리고 승인 체계까지 (0) | 2025.05.29 |
🏢 GitOps + Argo CD + Helm 기반 멀티테넌시 쿠버네티스 운영 전략 (0) | 2025.05.29 |
⚠️ Prometheus + KEDA로 실시간 장애 탐지와 자동 트래픽 컷오프 + Slack 경고 파이프라인 만들기 (0) | 2025.05.28 |