개요

Terraform은 HashiCorp가 개발한 Infrastructure as Code (IaC) 도구로, 클라우드 인프라를 **선언적 코드(HCL)**로 정의하고 프로비저닝합니다. AWS, GCP, Azure 등 3,000+ 프로바이더를 지원하는 사실상 IaC 업계 표준입니다.

  • 개발: HashiCorp (Mitchell Hashimoto)
  • 출시: 2014년
  • 언어: HCL (HashiCorp Configuration Language)
  • 작성 언어: Go
  • 라이선스: BSL 1.1 (2023년 MPL → BSL 변경)
  • 웹사이트: https://terraform.io
  • 오픈소스 포크: OpenTofu (Linux Foundation)

핵심 개념

개념설명
선언적 (Declarative)“원하는 상태”를 정의 → Terraform이 현재 상태와 비교 후 적용
State (상태 파일)terraform.tfstate에 현재 인프라 상태 기록
Plan → Apply변경 사항 미리보기(plan) 후 적용(apply)
ProviderAWS, GCP, Azure, K8s 등 인프라 공급자 플러그인
Module재사용 가능한 인프라 구성 단위
BackendState 파일 저장 위치 (S3, GCS, Terraform Cloud 등)

기본 워크플로우

terraform init      # 프로바이더 다운로드, 초기화
terraform plan      # 변경 사항 미리보기
terraform apply     # 인프라 생성/변경
terraform destroy   # 인프라 삭제

HCL 예제

# AWS EC2 인스턴스 생성
provider "aws" {
  region = "ap-northeast-2"   # 서울 리전
}
 
resource "aws_instance" "web" {
  ami           = "ami-0c55b159cbfafe1f0"
  instance_type = "t3.micro"
 
  tags = {
    Name        = "web-server"
    Environment = "production"
  }
}
 
resource "aws_security_group" "web_sg" {
  name = "web-sg"
 
  ingress {
    from_port   = 80
    to_port     = 80
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }
}
 
output "instance_ip" {
  value = aws_instance.web.public_ip
}

State 관리

Terraform의 가장 중요하면서도 까다로운 부분:

항목설명
Local State로컬 파일 (terraform.tfstate) — 개인 프로젝트용
Remote BackendS3 + DynamoDB, GCS, Terraform Cloud — 팀 협업 필수
State Locking동시 수정 방지 (DynamoDB, Consul 등)
Drift Detectionterraform plan으로 코드와 실제 인프라 차이 감지
Import기존 수동 생성 리소스를 State로 가져오기

주의: State 파일에는 시크릿이 포함될 수 있음 → 암호화 필수


Terraform vs OpenTofu

항목TerraformOpenTofu
라이선스BSL 1.1 (제한적)MPL 2.0 (오픈소스)
관리HashiCorp (IBM)Linux Foundation
호환기준Terraform 1.5 호환
커뮤니티기존 사용자오픈소스 중시 조직 이동 중

장단점

장점:

  • 사실상 IaC 표준 — 가장 큰 생태계
  • 멀티 클라우드 지원 (3,000+ 프로바이더)
  • Plan → Apply 워크플로우로 안전한 변경
  • Module로 재사용 가능한 인프라 구성
  • Terraform Cloud/Enterprise로 팀 협업 지원

단점:

  • HCL 학습 필요 (프로그래밍 언어가 아님)
  • State 파일 관리 복잡 (팀 환경에서 특히)
  • BSL 라이선스 변경 논란
  • 상태 드리프트 발생 가능 (수동 변경 시)

관련 항목