복잡한뇌구조마냥

[Infra] Terraform 본문

BE/Infra

[Infra] Terraform

지금해냥 2025. 12. 7. 03:37

1. Terraform이란?

Terraform은 Infrastructure as Code(IaC) 도구로,
서버·네트워크·스토리지 같은 인프라를 코드로 정의하고 관리할 수 있게 해준다.

기존에는 AWS 콘솔에서 클릭으로 만들던 리소스들을
Terraform에서는 .tf 파일에 선언적으로 작성한다.

인프라를 “설정”이 아니라 “코드”로 관리한다는 점이 Terraform의 핵심이다.


2. 왜 Terraform을 사용하는가?

2.1 콘솔 기반 인프라의 한계

  • 클릭 기반 설정 → 재현 불가
  • 누가 언제 뭘 바꿨는지 추적 어려움
  • 환경(dev/prod) 간 설정 불일치 발생

2.2 Terraform 도입 효과

  • 인프라 구성의 버전 관리
  • 동일한 환경 재현 가능
  • 코드 리뷰 및 변경 이력 관리 가능

👉 애플리케이션처럼 인프라도 관리할 수 있다.


3. Terraform 핵심 개념 정리

3.1 Provider

Terraform이 어떤 플랫폼(AWS 등)을 사용할지 지정한다.

 
provider "aws" {
  region = "ap-northeast-2"
}

3.2 Resource

실제로 생성되는 인프라 리소스 단위

 
resource "aws_s3_bucket" "bucket" {
  bucket = "my-example-bucket"
}
  • 콘솔에서 생성하는 리소스 = Terraform의 resource

3.3 State

Terraform이 관리하는 현재 인프라 상태 정보

  • 생성된 리소스의 ID, 속성 등이 저장됨
  • Terraform은 state를 기준으로 변경 사항(diff) 을 계산

State를 잃으면 Terraform은 인프라를 다시 생성하려고 할 수 있다.


4. Terraform 기본 사용 흐름

Terraform 사용은 아래 3단계 흐름이 핵심이다.


4.1 terraform init

terraform init
  • Provider 다운로드
  • State 초기화
  • Terraform 프로젝트 시작 단계

👉 가장 먼저 한 번만 실행


4.2 terraform plan

terraform plan
  • 현재 상태 vs 코드 비교
  • 어떤 리소스가 생성/수정/삭제될지 미리 보여줌

실제 인프라에 아직 아무 영향도 없음


4.3 terraform apply

 
terraform apply
  • plan 결과를 실제 인프라에 반영
  • 확인(prompt) 후 실행

👉 이 시점에 실제 리소스가 생성됨


4.4 terraform destroy

 
terraform destroy
  • Terraform이 만든 리소스를 정리(삭제) 하는 명령어
  • apply의 반대 개념
  • 학습/테스트 환경에서 비용 방지용으로 특히 중요

언제 쓰나?

  • 테스트로 만든 리소스들을 한 번에 정리하고 싶을 때
  • “실수로 만든 리소스”를 빠르게 원복하고 싶을 때
  • 비용이 발생하는 리소스(EC2, NAT Gateway 등)를 제거할 때

주의할 점

  • destroy는 진짜로 삭제한다 (복구 안 되는 경우 많음)
  • 특히 아래 리소스는 삭제 전에 반드시 확인
    • S3 버킷(데이터 포함 여부)
    • RDS/DB(스냅샷 여부)
    • EBS, 로그, 백업 리소스

5. 최소 예제로 보는 Terraform 사용법

5.1 디렉토리 구조

 
terraform/
 ├─ provider.tf
 ├─ main.tf
 └─ variables.tf

5.2 변수 정의 (variables.tf)

variable "region" {
  type    = string
  default = "ap-northeast-2"
}

5.3 Provider 설정 (provider.tf)

 
provider "aws" {
  region = var.region
}

5.4 Resource 정의 (main.tf)

 
resource "aws_s3_bucket" "example" {
  bucket = "terraform-example-bucket"
}

5.5 실행 흐름

terraform init
terraform plan
terraform apply

6. Terraform 변수 분리 전략

Terraform에서는 환경별 설정 분리가 중요하다.

  • 공통 구조 → .tf
  • 환경별 값 → variables, .tfvars
 
variable "instance_type" {
  type    = string
}
instance_type = var.instance_type

👉 환경 차이는 값만 바꿔서 재사용 가능


7. Terraform의 장점과 한계

장점

  • 인프라 구성의 재현성
  • 변경 이력 관리
  • 자동화된 인프라 생성

한계

  • State 관리 중요
  • 러닝 커브 존재
  • 실시간 변경에는 부적합

8. Terraform을 사용할 때 주의할 점

  • terraform apply는 항상 plan 먼저 확인
  • State 파일은 Git에 커밋 ❌
  • 민감 정보는 변수/Secret으로 분리

9. 정리

Terraform은 단순한 인프라 자동화 도구가 아니라,
인프라를 코드로 관리하는 기준을 만들어주는 도구다.

“한 번 만들고 끝”이 아니라
계속 관리해야 하는 인프라라면 Terraform이 적합하다.

 

LIST