
테라폼(Terraform)은 인프라스트럭처를 코드로 관리하는 IaC(Infrastructure as Code) 도구다.
AWS, Azure, GCP, Kubernetes 같은 인프라를 선언적 구성 파일(HCL) 로 정의하고,
그 코드에 맞춰 실제 리소스를 생성·변경·삭제해 준다.
핵심 아이디어는 단순하다.
현재 상태(state) ↔ 원하는 목표 상태(desired state)를 비교해서
필요한 변경만 자동으로 계산하고 적용하는 도구
프로비저닝은 서비스를 돌리기 위해 필요한 인프라를 준비하는 과정이다.
이걸 클릭으로 수동 셋업하는 대신,
테라폼으로 코드에 적어두고 자동으로 구성하는 흐름이라고 보면 된다.
클라우드 인프라가 복잡해지면서 이런 문제가 생겼다.
이걸 해결하려고 2014년 HashiCorp가 Terraform을 만들었다.
덕분에 DevOps 쪽에서 거의 기본 도구처럼 쓰이게 된 상태다.
선언적 구성
멀티 클라우드 지원
상태 관리(State Management)
terraform.tfstate 파일에 현재 인프라 상태를 저장멱등성(Idempotency)
terraform apply해도 결과는 항상 동일학습 난이도
동적 구성 제약
State 관리 중요
tfstate가 꼬이거나 유실되면 apply 동작이 이상해질 수 있다.tf 확장자를 사용테라폼과 실제 시스템을 이어주는 플러그인 개념이다.
각 클라우드/서비스 별로 provider가 따로 있다.
| 서비스 모델 | 예시 프로바이더 |
|---|---|
| IaaS | AWS, Azure, GCP, Alibaba, Oracle Cloud |
| PaaS | Kubernetes, Docker, AWS Elastic Beanstalk |
| SaaS | GitHub, GitLab, Atlassian(Jira, Confluence) |
테라폼 코드에서 provider "aws" { ... } 이런 식으로 선언하고 사용한다.
프로바이더가 실제로 생성·관리하는 개별 인프라 요소다.
코드에서는 보통 이렇게 선언한다.
resource "aws_s3_bucket" "example" {
bucket = "my-bucket"
}
테라폼이 인프라 상태를 기억하는 방식이다.
terraform.tfstate 파일에 현재 인프라 상태를 저장
이 파일을 기준으로
중요 포인트:
테라폼의 큰 특징 중 하나다.
terraform apply를 여러 번 실행해도결국 “코드가 곧 진실(source of truth)이고,
인프라는 항상 그 상태에 맞춰진다”는 구조를 만들어 준다.
Terraform 작업 흐름은 항상 이 패턴을 따른다.
init → plan → apply
terraform init
terraform plan
코드 수정 후에는 항상 plan으로 확인하고,
변경 내용이 의도한 대로 나오는지 보고 나서 apply로 넘어가는 게 안전하다.
terraform apply
terraform.tfstate가 현재 인프라 상태의 기준점이라서, 이 파일 관리가 매우 중요하다.