Terraform 개념
1. Terraform인 뭔가
Terraform은 HashiCorp에서 만든 Infrastructure as Code(IaC) 도구로, 클라우드나 온프레미스 인프라를 코드로 선언하여 자동으로 프로비저닝•관리할 수 있게 해줍니다.
- 선언적(Declarative) 구성
- 사용자는 "어떤(What)" 리소스를 만들지 HCL(HashiCorp Configuration Language) 또는 JSON으로 정의만 하면, Terraform이 "어떻게(How)" 만드는지는 내부 로직(plan/apply)을 통해 처리합니다.
- 멀티 클라우드•멀티 서비스 지원
- AWS•GCP•Azure 같은 주요 퍼블릭 클라우드는 물론, Kubernetes, Datadog, Cloudflare, SaaS 서비스에 이르기까지 수백여 개 프로바이더(provider)를 플러그인 방식으로 제공합니다.
- 변경 계획(Plan)•실행(Apply)
- terraform init
- 현재 디렉터리를 Terraform 작업 공간으로 초기화하고, 필요한 프로바이더 플러그인을 내려받습니다.
- terraform plan
- 선언된 구성과 실제 상태(State)를 비교해 어떤 리소스를 추가•수정•삭제할지 예측(plan)을 출력합니다.
- terraform apply
- 위에서 생성된 계획(plan)을 실제로 실행해 인프라를 프로비저닝•업데이트합니다.
- terraform init
- 상태 관리(State)
- terraform.tfstate 파일에 현재 인프라 상태를 기록하여, 이후 변경 시 어떤 부분이 바뀌어야 하는지 계산합니다. 원격 벡엔드(S3, Terraform Cloud 등)에 저장하면 팀 단위 협업과 잠금이 가능합니다.
- 모듈(Module)
- 자주 쓰는 리소스 묶음을 모듈로 정의해 재상용성과 일관성을 높일 수 있습니다. 간단한 VPC 구성부터 복잡한 애플리케이션 스택까지, 공유 라이브러리 형태로 관리 가능합니다.
2. 워크플로우 예시
1. 기본
# 1. 초기화
terraform init
# 2. 변경 내역 미리보기
terraform plan -out=tplan
# 3. 적용
terraform apply tfplan
# 4. 정리 (리소스 삭제)
terraform destroy
2. 응용
# 최초 Init (프로파이더•모듈 설치)
terraform init
# 나중에 프로바이더나 모듈이 업데이트되었을 때
terraform init -upgrade
# 저장해 둔 계획에 따라 인프라를 실제로 변경(프로비저닝/업데이트)합니다.
terraform apply -auto-approve -var-file=terraform.tfvars
# 해당 과정은 암묵적으로 Plan -> Apply 흐름을 가진다.
# 암묵적 Plan 실행
# apply 커맨드를 실행할 때 -out 플래그 없이 Plan 단계를 함께 수행합니다. -> 따로 tfplan 파일에 저장해 두지 않음
# 이때 생성된 "계획(plan)"은 디스크에 파일로 저장되지 않고 메모리 상에만 보관됩니다.
# 자동 승인 & 적용
# 곧바로 메모리 상의 Plan을 -auto-approve 옵션으로 승인해 실제 리소스 변경을 수행합니다.
# terraform apply -auto-approve 는 암묵적 plan 후 곧바로 실행하라는 의미이며, 중간에 사용자 입력을 생략합니다.
# tfplan을 사용한다면
# 1. plan & 저장
terraform plan -out=tfplan -var-file="terraform.tfvars"
# 2. Apply & 자동 승인
terraform apply -auto-approve tfplan
# tflan 파일을 쓰는 이유는 두 가지가 있다.
# 안전성 확보 : -out=tfplan 으로 계획을 파일로 저장해 두면, 엔제든 terraform show tfplan 으로 변경 내용을 다시 확인할 수 있다.
# 프로세스 분리 : 팀 리뷰 프로세스, CI 단계 분리(Plan 단계 -> 사람 승인 -> Apply 단계) 등에 유리합니다.
3. 주요 장점
- 버전 관리 : 인프라 구성 파일을 Git 등으로 관리해 변경 이력을 추적
- 자동화•일관성 : 사람 손으로 하던 복잡한 설정을 코드화해 실수 감소
- 협업 : 원격 상태 관리•잠금 기능으로 여러 명이 동시에 작업 가능
- 확장성 : 프로바이더•모듈을 통해 다양한 서비스에 손쉽게 적용
'DevSecOps > 클라우드(Cloud)' 카테고리의 다른 글
Terraform 구성 요소 (0) | 2025.05.31 |
---|---|
Zero Trust 란? (1) | 2025.05.29 |
Okta 란? (3) | 2025.05.29 |
Cloudflare 이란? (1) | 2025.05.29 |
CNAPP 란? (0) | 2025.05.29 |
댓글