TechFeedTechFeed
Cloud & DevOps

Terraform 입문 — 인프라를 코드로 관리하기

Infrastructure as Code의 대표 도구 Terraform 시작 가이드. HCL 문법, Provider 설정, State 관리, Module 구성과 AWS·GCP 인프라 프로비저닝 실전 예시를 포함한다.

한 줄 요약: Terraform은 AWS, GCP, Azure 등 클라우드 인프라를 코드(.tf 파일)로 정의하고, terraform apply 한 명령으로 프로비저닝하는 IaC(Infrastructure as Code) 도구다.

수동으로 AWS 콘솔에서 서버를 만드는 대신, 코드로 인프라를 관리하면 재현 가능성, 버전 관리, 코드 리뷰가 가능해진다. 이 가이드는 Terraform의 핵심 개념과 실전 워크플로우를 정리한다.

IaC가 필요한 이유

인프라를 수동으로 관리하면 재현 불가능, 문서화 누락, 환경 차이 문제가 생깁니다. Terraform으로 인프라를 코드로 선언하면 Git으로 버전 관리하고, 동일한 환경을 반복 생성할 수 있습니다.

IaC가 필요한 이유 — 클라우드 인프라 아키텍처
Terraform 입문 — 인프라를 코드로 관리하기 — 클라우드 인프라 아키텍처 (출처: 공식 문서 및 벤치마크 데이터 기반)
IaC가 필요한 이유 — 클라우드 인프라 아키텍처
Terraform 입문 — 인프라를 코드로 관리하기 — 클라우드 인프라 아키텍처 (출처: 공식 문서 및 벤치마크 데이터 기반)

Terraform의 워크플로우는 Write → Plan → Apply의 3단계다. .tf 파일에 원하는 인프라 상태를 선언하고, terraform plan으로 변경 사항을 미리 확인한 뒤, terraform apply로 실제 적용한다. 핵심은 '선언적'이라는 것 — 어떻게 만들지가 아니라 무엇을 원하는지를 정의한다.

AWS EC2 인스턴스 생성 예시
# main.tf provider "aws" { region = "ap-northeast-2" # 서울 } resource "aws_instance" "app" { ami = "ami-0c9c942bd7bf113a2" instance_type = "t3.micro" tags = { Name = "my-app-server" } } resource "aws_security_group" "app_sg" { ingress { from_port = 443 to_port = 443 protocol = "tcp" cidr_blocks = ["0.0.0.0/0"] } }

State 파일은 Terraform이 현재 인프라 상태를 추적하는 JSON 파일이다. 로컬에 저장하면 팀 협업이 불가능하므로, S3 + DynamoDB 또는 Terraform Cloud를 사용해 원격 state를 관리한다. State 파일에는 비밀 정보(DB 비밀번호 등)가 포함될 수 있으므로 암호화 저장이 필수다.

기본 개념

  • Provider: AWS, GCP 등 클라우드 제공자
  • Resource: 생성할 인프라 (EC2, S3 등)
  • State: 현재 인프라 상태 추적
  • Plan/Apply: 변경사항 미리보기 후 적용
기본 개념 — 배포 파이프라인 다이어그램
Terraform 입문 — 인프라를 코드로 관리하기 — 배포 파이프라인 다이어그램 (출처: 공식 문서 및 벤치마크 데이터 기반)

모듈화와 환경 분리

모듈로 반복되는 인프라 패턴을 재사용한다. VPC, ECS 클러스터, RDS 인스턴스 등을 모듈로 만들어 dev/staging/prod 환경에서 변수만 바꿔 사용한다. Workspaces 또는 디렉토리 분리로 환경을 관리한다.

주의: terraform destroy는 모든 리소스를 삭제한다. 프로덕션 환경에서는 절대 실행하지 말 것. prevent_destroy = true lifecycle 설정으로 중요 리소스의 실수 삭제를 방지하라.

Terraform 대안

Pulumi: TypeScript/Python/Go 등 범용 언어로 인프라를 정의한다. 프로그래밍 언어의 조건문, 루프, 함수를 그대로 사용할 수 있어 Terraform의 HCL보다 표현력이 높다. AWS CDK: AWS 전용이지만 TypeScript로 CloudFormation을 생성한다. OpenTofu: Terraform의 오픈소스 포크로, HashiCorp의 라이선스 변경(BSL) 이후 대안으로 떠올랐다. Terraform과 거의 호환되며 Linux Foundation이 관리한다.

terraformIaC인프라클라우드자동화

관련 포스트

Terraform vs Pulumi — IaC 도구 비교 20262026-03-14GitHub Actions CI/CD 실전 가이드2026-02-22Vercel vs Netlify vs Cloudflare Pages — 2026 배포 플랫폼 비교2026-03-14Docker Compose vs Kubernetes — 언제 무엇을 선택할까2026-03-22