Terraform은 인프라를 코드로 관리하는 IaC(Infrastructure as Code) 도구입니다.
AWS EC2, VPC, RDS, ALB 등 인프라 리소스를 HCL(HashiCorp Configuration Language)로 선언하면, Terraform이 이를 읽고 실제 클라우드 리소스를 자동으로 생성·변경·삭제합니다.
Terraform의 기본 철학은 “선언형 인프라 관리”입니다.
개발자는 “무엇을 만들 것인지”만 기술하면 Terraform이 “어떻게 만들지”를 처리합니다.
AWS Console만 봐도 GUI가 잘 되어 있고, 사용성이 괜찮은데
이를 활용하지 않고, Terraform을 사용하는 이유가 무엇일까요?
1) 인프라 재현성 확보
2) 버전 관리 가능
3) 자동화 용이
4) 일관성 및 실수 방지
(1) 코드 작성
.tf 파일에 리소스를 선언합니다.
(2) 초기화
terraform init
프로바이더(AWS 등) 플러그인을 다운로드하고 환경을 초기화합니다.
(3) 변경 계획 조회
terraform plan
현재 상태와 코드 상태를 비교해 생성, 수정, 삭제될 리소스를 확인합니다.
(4) 적용
terraform apply
plan에서 보여준 변경 사항을 그대로 인프라에 반영합니다.
(5) 상태 관리
Terraform은 terraform.tfstate라는 파일에 실제 인프라 상태를 저장합니다.
여러 명이 작업할 경우 이 state 파일을 S3 등에 저장하고 락을 걸어 충동을 방지합니다.
provider "aws" {
region = "ap-northeast-2"
}
resource "aws_instance" "app" {
ami = "ami-0abcdef1234567890"
instance_type = "t3.micro"
tags = {
Name = "app-server"
}
}
이후:
terraform init
terraform plan
terraform apply
: EC2 생성
1) 콘솔에서 임의 변경 금지
콘솔에서 수동 변경하면 state 파일과 실제 인프라 상태가 불일치할 수 있습니다.
2) state 파일은 반드시 중앙 저장소(S3 등)에 저장
단일 개발자라도 장기적으로는 S3 백엔드 사용을 권장합니다.
3) plan 확인 없이 apply 금지
계획(plan)을 보지 않고 apply 하면 의도치 않은 리소스 삭제 위험이 있습니다.
특히 장기 서버 운영을 고려하는 프로젝트에서 Terraform은 필수 도구 역할을 합니다.