ποΈ IaC (Infrastructure as Code): μ½λλ‘ μΈνλΌλ₯Ό κ΄λ¦¬νλ μλ!
“κ°λ° νκ²½μμλ μ λμκ°λλ°, μ΄μ νκ²½μμ μ κΉ¨μ§κΉ?”
“κ°μ μ€μ μΈλ° μ λ΄ νκ²½μμλ λ¬Έμ μλλ° λλ£λ μλ¬κ° λ κΉ?”
μ΄λ° λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄ λ±μ₯ν κ°λ μ΄ λ°λ‘ IaC(Infrastructure as Code) μ λλ€.
μ΄μ μΈνλΌλ₯Ό μμΌλ‘ ν΄λ¦νλ©° μ€μ νλ κ² μλλΌ μ½λλ‘ μ μνκ³ μλννλ μλκ° λμμ΄μ! π
π± IaCλ 무μμΈκ°?
**Infrastructure as Code(IaC)**λ μ½λλ₯Ό μ΄μ©νμ¬ μΈνλΌλ₯Ό μ μνκ³ κ΄λ¦¬νλ λ°©λ²μ μλ―Έν΄μ.
μ¦, μλ², λ€νΈμν¬, λ°μ΄ν°λ² μ΄μ€, λ‘λ λ°Έλ°μ κ°μ μΈνλΌλ₯Ό μ½λλ‘ μ μνμ¬ μλνν μ μμ΄μ.
β IaCμ ν΅μ¬ κ°λ
• μΈνλΌ νκ²½μ μ½λλ‘ μ μνμ¬ μΌκ΄λ λ°°ν¬ κ°λ₯
• λͺ¨λ μ€μ μ΄ μ½λνλμ΄ **λ²μ κ΄λ¦¬(Git)**κ° κ°λ₯
• μλ μ€μ μ΄ μλ μλνλ λ°°ν¬
• “λ΄ λ‘컬μμλ μ λλλ°?” κ°μ νκ²½ μ°¨μ΄ λ¬Έμ ν΄κ²°
π κΈ°μ‘΄ μΈνλΌ κ΄λ¦¬μμ μ°¨μ΄μ
μ ν΅μ μΈνλΌ μ€μ (μλ)IaC μ μ© ν (μλν)
μ§μ μλ²λ₯Ό ν΄λ¦νλ©° μ€μ | μ½λλ‘ μΈνλΌ μ μ |
μ€μ λ³κ²½ μ΄λ ₯ κ΄λ¦¬ μ΄λ €μ | Gitμ ν΅ν λ²μ κ΄λ¦¬ κ°λ₯ |
νκ²½ μ€μ μ°¨μ΄ λ°μ | λμΌν μ€μ μλ μ μ© κ°λ₯ |
μ¬λμ΄ μ€μν κ°λ₯μ± μμ | μ½λ κΈ°λ° μλνλ‘ μ€μ λ°©μ§ |
π‘ μ¦, IaCλ₯Ό μ¬μ©νλ©΄?
• νκ²½λ³ μ°¨μ΄λ₯Ό μ€μ΄κ³ , λμΌν μ€μ μ μ μ§ν μ μμ΄μ.
• μΈνλΌλ₯Ό μλννμ¬ λΉ λ₯΄κ³ μμ νκ² λ°°ν¬ν μ μμ΄μ.
• μ½λ κΈ°λ°μΌλ‘ λ³κ²½ μ¬νμ μΆμ ν μ μμ΄μ.
π “λ΄ λ‘컬μμλ μ λλλ°?” λ¬Έμ ν΄κ²°νκΈ°
κ°λ° νκ²½(local) vs μ΄μ νκ²½(prod) μ°¨μ΄ λ¬Έμ , IaCλ‘ ν΄κ²° κ°λ₯!
π¨ μ ν΅μ μΈ λ¬Έμ μ
• κ°λ°μλ λ‘컬μμ λμνμ§λ§, μ΄μ μλ²μμλ μλ¬κ° λ°μ
• νκ²½ λ³μλ μμ‘΄μ± μ°¨μ΄λ‘ μΈν΄ μμμΉ λͺ»ν λ¬Έμ λ°μ
• μ¬λμ΄ μ§μ μ€μ νλ€ λ³΄λ μ΄μ νκ²½ μ€μ μ΄ κ°λ° νκ²½κ³Ό λ€λ¦
β IaC μ μ© ν λ³ν
• κ°λ°, μ€ν μ΄μ§, μ΄μ νκ²½μ λμΌνκ² μ μ§ κ°λ₯
• νκ²½ μ€μ μ ν νλ¦Ώννμ¬ μΌκ΄λ λ°°ν¬ κ°λ₯
• μλνλ λ°°ν¬ νμ΄νλΌμΈκ³Ό κ²°ν©νμ¬ μμ μ μΈ λ°°ν¬ λ³΄μ₯
πΉ IaCμ κΈ°λ³Έ ꡬ쑰
IaCλ₯Ό μ μ©νλ©΄ μ½λλ‘ μΈνλΌλ₯Ό μ μνκ³ μ΄λ₯Ό μ€ννμ¬ μ€μ νκ²½μ ꡬμ±ν μ μμ΄μ.
μ£Όμ IaC λꡬλ€μ λ€μκ³Ό κ°μ κΈ°λ³Έ ꡬ쑰λ₯Ό λ°λ¦ λλ€.
1οΈβ£ μ μΈμ (Declarative) vs λͺ λ Ήν(Imperative)
• μ μΈμ (Declarative): “무μμ λ§λ€ κ²μΈμ§”λ₯Ό μ μ (ex. Terraform, CloudFormation)
→ μ: “AWSμ EC2 μλ²λ₯Ό νλ λ§λ€μ΄μ€!”
• λͺ λ Ήν(Imperative): “μ΄λ»κ² λ§λ€ κ²μΈμ§”λ₯Ό μ μ (ex. Ansible, Chef)
→ μ: “SSH μ μ ν ν¨ν€μ§λ₯Ό μ€μΉνκ³ μ€μ μ λ³κ²½ν΄!”
2οΈβ£ IaC μ£Όμ κ΅¬μ± μμ
βοΈ λ¦¬μμ€(Resource): μμ±ν μΈνλΌ(μλ², λ°μ΄ν°λ² μ΄μ€, λ€νΈμν¬ λ±)
βοΈ νλ‘λΉμ λ(Provisioning): 리μμ€λ₯Ό μμ±νκ³ μ€μ νλ κ³Όμ
βοΈ μν(State Management): νμ¬ μΈνλΌ μνλ₯Ό μΆμ (ex. Terraformμ state νμΌ)
βοΈ νκ²½ λ³μ(Environment Variables): νκ²½λ³(κ°λ°/μ΄μ) μ°¨μ΄λ₯Ό κ΄λ¦¬
πΉ 리μμ€ κ·Έλ£Ήνμ ν νλ¦Ώ νμ©
IaCμμλ μΈνλΌ λ¦¬μμ€λ₯Ό κ·Έλ£Ήννκ³ , ν νλ¦Ώμ νμ©νλ©΄ λμ± ν¨μ¨μ μ΄μμ.
1οΈβ£ 리μμ€ κ·Έλ£Ήν (Resource Grouping)
βοΈ μ¬λ¬ 리μμ€λ₯Ό ν κ³³μ λ¬Άμ΄ κ΄λ¦¬ν μ μμ΄μ.
βοΈ AWSμ Resource Group, Terraformμ Module κ°μ κΈ°λ₯μ νμ©νλ©΄ λ¨!
βοΈ λ€νΈμν¬, DB, μ ν리μΌμ΄μ μ κ°λ³μ μΌλ‘ ꡬμ±νλ λμ μ¬μ¬μ© κ°λ₯ν κ·Έλ£ΉμΌλ‘ μ€μ κ°λ₯.
# Terraform μμ - λͺ¨λμ νμ©ν 리μμ€ κ·Έλ£Ήν
module "network" {
source = "./modules/network"
vpc_cidr = "10.0.0.0/16"
}
module "database" {
source = "./modules/database"
db_name = "mydb"
}
2οΈβ£ ν νλ¦Ώ νμ© (Templates)
βοΈ νκ²½λ³ μ€μ μ°¨μ΄λ₯Ό μ€μ΄κ³ λμΌν μ½λλ‘ μ¬λ¬ νκ²½μ λ°°ν¬ κ°λ₯
βοΈ AWS CloudFormation, Terraform κ°μ λꡬμμ μ 곡λ¨
βοΈ μλ₯Ό λ€μ΄, κ°λ°/μ΄μ νκ²½μ λ°λΌ 리μμ€λ₯Ό λ€λ₯΄κ² μ€μ νκ³ μΆμ λ μ¬μ©!
# AWS CloudFormation μμ - νκ²½λ³λ‘ λ€λ₯Έ κ° μ¬μ©
Parameters:
InstanceType:
Type: String
Default: "t2.micro"
AllowedValues:
- "t2.micro"
- "t2.small"
πΉ νκ²½ λ³μ νμ© (Environment Variables)
νκ²½ λ³μλ μΈνλΌλ₯Ό νκ²½λ³λ‘ λ€λ₯΄κ² μ€μ νλ λ° μ μ©ν΄μ.
βοΈ νκ²½λ³(κ°λ°/μ΄μ)λ‘ μ€μ κ° λΆλ¦¬
βοΈ λ³΄μ μ 보(API ν€ λ±)λ νκ²½ λ³μλ‘ μ€μ
βοΈ .env νμΌμ νμ©νκ±°λ, Terraform, Ansible κ°μ λꡬμμ νκ²½ λ³μ μ€μ κ°λ₯
# .env νμΌ μμ
DB_HOST=database.example.com
DB_USER=admin
DB_PASS=secret
# Terraform νκ²½ λ³μ νμ©
variable "db_host" {
default = "database.example.com"
}
πΉ IaC λκ΅¬λ€ λΉκ΅ (Terraform, Ansible, CloudFormation)
λꡬ방μμ£Όμ νΉμ§μ£Όμ ν΄λΌμ°λ
Terraform | μ μΈμ (Declarative) | λ©ν° ν΄λΌμ°λ μ§μ, κ°λ ₯ν μν κ΄λ¦¬ | AWS, GCP, Azure |
Ansible | λͺ λ Ήν(Imperative) | μλ² μ€μ μλν, Agent νμ μμ | AWS, μ¨νλ λ―Έμ€ |
AWS CloudFormation | μ μΈμ (Declarative) | AWS μ μ© IaC λꡬ | AWS |
β Terraformμ μ¬μ©νλ©΄ AWS/GCP/Azure κ°μ ν΄λΌμ°λλ₯Ό ν λ²μ κ΄λ¦¬ν μ μμ΄μ!
β Ansibleμ SSH κΈ°λ°μΌλ‘ μλ² μ€μ μ μλννλ λ° κ°μ μ΄ μμ΄μ.
β CloudFormationμ AWS νκ²½μμ IaCλ₯Ό μ μ©ν λ μ μ©ν΄μ.
πΉ IaC μ μ© ν λ°°ν¬ μλν (CI/CD)
IaCλ CI/CD(μ§μμ ν΅ν© λ° λ°°ν¬) νμ΄νλΌμΈκ³Ό ν¨κ» μ¬μ©νλ©΄ λμ± κ°λ ₯ν΄μ Έμ.
π GitHub Actions + Terraformμ νμ©ν μλ λ°°ν¬ μμ
name: Deploy Infra
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout Code
uses: actions/checkout@v3
- name: Setup Terraform
uses: hashicorp/setup-terraform@v1
- name: Terraform Apply
run: |
terraform init
terraform apply -auto-approve
βοΈ GitHubμ νΈμνλ©΄ μλμΌλ‘ μΈνλΌλ₯Ό λ°°ν¬ν μ μμ΄μ! π
π― κ²°λ‘ : IaCλ νμλ€!
“μ½λλ‘ μΈνλΌλ₯Ό κ΄λ¦¬νλ μλ!”
μ΄μ λ μλ²λ₯Ό μμΌλ‘ ν΄λ¦νλ©° μ€μ νλ κ² μλλΌ, μ½λλ‘ μ μνκ³ μλννλ μλμ λλ€.
β νκ²½ μ°¨μ΄λ₯Ό μ€μ΄κ³ μΌκ΄λ λ°°ν¬ κ°λ₯
β μλνλ λ°°ν¬λ‘ λΉ λ₯΄κ³ μμ ν μ΄μ κ°λ₯
β Gitκ³Ό κ²°ν©νμ¬ λ³κ²½ μ¬νμ μΆμ κ°λ₯
π‘ νλ‘ νΈμλ κ°λ°μλ Terraform, Ansible, CloudFormation κ°μ IaC λꡬλ₯Ό μ΅νλλ©΄ λ°°ν¬κ° ν¨μ¬ μ¬μμ§ κ±°μμ!
π· μ μ€μ κ°λ°μκ° λμ΄λ΄ μλΉ! π· π
'Dev-ops' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
π Next.js μν¬νλ‘μ° μμ μ 볡 (0) | 2025.03.20 |
---|---|
π Testing Library κ³μ΄ μν¬νλ‘μ° μμ μ 볡 (0) | 2025.03.19 |
π CI/CDμμ React Testing Library μν¬νλ‘μ° μ΄ν΄λ³΄κΈ° (0) | 2025.03.17 |
π νλ‘ νΈμλ κ°λ°μλ₯Ό μν CI/CD μλ²½ κ°μ΄λ! (0) | 2025.03.14 |
λ컀 λ°μ€ν¬νμ΄ λ¬΄κ±°μΈ λ, Colima (0) | 2024.10.21 |