Day 06: 클린 Terraform 프로젝트 구조 이해

발행: (2025년 12월 8일 오후 09:49 GMT+9)
4 min read
원문: Dev.to

Source: Dev.to

일반적인 Terraform 프로젝트 구조

Terraform는 디렉터리 내의 모든 *.tf 파일을 자동으로 로드하므로 파일을 나누어도 실행에 영향을 주지 않습니다. 전형적이고 잘 정리된 레이아웃은 다음과 같습니다:

terraform-project/
├── main.tf          # 핵심 리소스 정의 (예: EC2, S3, VPC)
├── provider.tf      # Provider 설정
├── backend.tf       # 원격 상태 저장소 설정
├── variables.tf     # 입력 변수 선언
├── terraform.tfvars # 구체적인 변수 값
├── outputs.tf       # 출력 정의
└── .gitignore       # 무시할 파일 (아래 참고)

파일 역할

  • main.tf – 주요 리소스 블록을 포함합니다.
  • provider.tf – Provider(AWS, Azure, GCP 등)를 설정합니다.
  • backend.tf – 원격 상태(S3 버킷, Terraform Cloud 등)를 구성합니다.
  • variables.tf – 타입과 기본값을 포함한 모든 입력 변수를 선언합니다.
  • terraform.tfvars – 변수에 실제 값을 제공합니다.
  • outputs.tfterraform apply 후 표시될 값을 정의합니다.

제외해야 할 민감한 파일

일부 Terraform 아티팩트는 비밀 정보나 생성된 데이터를 포함할 수 있으므로 버전 관리에 절대 커밋해서는 안 됩니다.

# Terraform 상태 파일 (비밀 정보를 포함할 수 있음)
*.tfstate
*.tfstate.backup

# 로컬 Terraform 디렉터리
.terraform/

# 민감한 값이 들어 있는 변수 파일
terraform.tfvars

왜 중요한가

  • 상태 파일은 자격 증명 및 인프라 세부 정보를 노출할 수 있습니다.
  • Provider 바이너리는 자동으로 생성되며 저장소에 포함될 필요가 없습니다.
  • 변수 파일은 종종 비밀번호, API 키와 같은 민감한 값을 담고 있습니다.

이 파일들을 .gitignore에 추가하면 인프라와 자격 증명을 모두 보호할 수 있습니다.

Day 06 주요 학습 내용

  • Terraform는 작업 디렉터리의 모든 *.tf 파일을 자동으로 읽습니다.
  • 논리적인 파일 단위로 구성을 나누면 가독성과 디버깅이 향상됩니다.
  • 깔끔한 프로젝트 구조는 특히 대규모 코드베이스에서 실수를 방지합니다.
  • 적절한 .gitignore 규칙은 민감한 데이터를 안전하게 보호합니다.
  • 정돈된 코드는 전문적인 Terraform 실천을 반영합니다.

좋은 Terraform 프로젝트는 단순히 프로비저닝하는 리소스에만 국한되지 않습니다. 그 리소스를 어떻게 조직하느냐도 중요합니다. 파일을 올바르게 구조화하면 코드를 이해하기 쉬워지고, 관리가 안전해지며, 실제 환경에서 사용하기에 적합해집니다. Day 06은 깨끗한 IaC는 깔끔한 구조에서 시작된다는 점을 다시 한 번 강조했습니다.

Back to Blog

관련 글

더 보기 »

Terraform 데이터 소스 (AWS)

Terraform 데이터 소스란 무엇인가요? 데이터 소스는 Terraform에서 기존 리소스를 읽기 전용으로 조회하는 기능입니다. 새로운 리소스를 생성하는 대신, Terraform은 ...

Day-13: Terraform의 데이터 소스

Data Sources란 무엇인가요? 데이터 소스를 사용하면 기존 VPC, 서브넷, AMI, 보안 그룹 등과 같은 정보를 가져올 수 있습니다. hcl data 'data_source_type' 'dat...

13일 차: Terraform 데이터 소스

Data Source 데이터 소스를 전화번호부와 같이 사용자 이름과 전화번호가 key‑value 쌍으로 API를 통해 접근되는 것으로 생각해 보세요. 값을 hard‑coding 하는 대신…