1. Terraform 상태 파일(tfstate)이란 무엇인가요?

Terraform 상태 파일은 Terraform이 관리하는 인프라의 **'현재 상태에 대한 진실의 원천(Source of Truth)'**입니다. 이 JSON 형식의 파일은 Terraform 코드로 정의한 리소스가 실제 클라우드 환경에 어떻게 배포되었는지에 대한 모든 정보를 담고 있습니다.

주요 목적

  • 리소스 매핑: 코드와 실제 클라우드 리소스를 연결합니다.
  • 속성 저장: 배포된 리소스의 모든 속성(ID, IP 주소 등)을 기록합니다.
  • 성능 최적화: `plan`/`apply` 시 API 호출을 최소화합니다.
  • 의존성 관리: 리소스 간의 생성/파괴 순서를 관리합니다.

포함되는 정보

  • 관리 대상 리소스 목록 (⚠️ 민감 정보 포함 가능)
  • `outputs.tf`에 정의된 출력 값
  • Terraform 및 프로바이더 버전 메타데이터

2. 왜 원격 상태(Remote State)를 사용해야 하나요?

상태 파일을 로컬에 저장하는 것은 개인 프로젝트에서는 가능하지만, 팀 협업 환경에서는 심각한 문제를 야기합니다. 원격 백엔드(Azure Blob Storage 등)를 사용하는 것은 이러한 문제를 해결하기 위한 필수적인 선택입니다.

👥협업 용이성

상태 파일을 중앙에서 공유하여 팀원 간의 작업 동기화를 보장합니다.

🔒상태 잠금 (Locking)

동시에 여러 사용자가 상태 파일을 수정하는 것을 방지하여 데이터 손상을 막습니다.

🛡️보안

민감 정보가 포함될 수 있는 상태 파일을 Git에서 분리하고, 저장/전송 시 암호화합니다.

💾내구성 및 신뢰성

클라우드 스토리지의 높은 내구성으로 로컬 디스크 손상이나 파일 유실 위험을 최소화합니다.

🔄버전 관리

상태 파일의 모든 변경 이력을 추적하고, 필요 시 이전 버전으로 롤백할 수 있습니다.

💰비용 효율성

저렴한 비용으로 강력하고 안정적인 원격 저장소 솔루션을 이용할 수 있습니다.

3. Azure Backend 설정 가이드

Terraform 상태 파일을 저장할 Azure Blob Storage 인프라를 준비하고, 코드에 백엔드 설정을 추가하는 과정입니다.

Step 1: 백엔드 인프라 준비 (Azure CLI)

상태 파일을 저장할 리소스 그룹, 스토리지 계정, 컨테이너를 생성합니다. 이 작업은 일반적으로 한 번만 수행합니다.

# PowerShell/Bash $SHARED_STATE_RG="my-shared-tfstate-rg-001" $SHARED_STATE_SA="mysharedstateunique0001" # 전역 고유 이름으로 변경 $CONTAINER_NAME="tfstate-web" az group create --name $SHARED_STATE_RG --location "koreacentral" az storage account create --name $SHARED_STATE_SA --resource-group $SHARED_STATE_RG --sku Standard_LRS az storage container create --name $CONTAINER_NAME --account-name $SHARED_STATE_SA

⚠️ 중요: 생성된 스토리지 계정의 Azure Portal에서 [데이터 보호] → [Blob 버전 관리 사용]을 '켜기'로 설정하세요.

Step 2: Terraform 코드에 백엔드 설정 추가

`main.tf` 파일의 `terraform` 블록 내에 `backend` 설정을 추가합니다. `backend` 블록에서는 변수를 사용할 수 없으므로 실제 값을 직접 입력해야 합니다.

terraform { backend "azurerm" { resource_group_name = "my-shared-tfstate-rg-001" storage_account_name = "mysharedstateunique0001" container_name = "tfstate-web" key = "web-server-project.tfstate" } }

Step 3: Terraform 초기화

백엔드 설정을 추가한 후, `terraform init` 명령을 실행하여 원격 백엔드를 초기화하고 연결합니다. 로컬에 상태 파일이 있다면 원격으로 마이그레이션할지 묻습니다.

terraform init

4. 문제 해결사 (Interactive Troubleshooter)

실습 중 발생했던 일반적인 오류와 해결 방법을 확인하세요. 오류 메시지를 클릭하면 상세 내용이 나타납니다.

5. 핵심 모범 사례 (Best Practices)

안정적이고 효율적인 Terraform 상태 관리를 위한 핵심 원칙들입니다.

  • 원격 상태 사용 필수

    팀 협업, 보안, 안정성을 위해 항상 Azure Blob Storage와 같은 원격 백엔드를 사용합니다.

  • 백엔드 인프라 분리

    상태 파일을 저장하는 리소스 그룹/스토리지 계정은 관리 대상 인프라와 분리하여 영구적으로 관리해야 합니다. 절대로 동일한 Terraform 프로젝트에서 관리하지 마세요.

  • Blob 버전 관리 활성화

    상태 파일의 변경 이력을 추적하고 롤백할 수 있도록 스토리지 계정에서 Blob 버전 관리를 활성화합니다.

  • `terraform import` 활용

    이미 존재하는 Azure 리소스를 Terraform의 관리 대상으로 편입시킬 때 `import` 명령을 올바르게 사용합니다.

  • `user_data` 스크립트 디버깅

    VM 시작 스크립트 문제 발생 시, VM에 접속하여 `/var/log/cloud-init-output.log`를 확인하여 원인을 진단합니다.