Day 06: 클린 Terraform 프로젝트 구조 이해
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.tf–terraform apply후 표시될 값을 정의합니다.
제외해야 할 민감한 파일
일부 Terraform 아티팩트는 비밀 정보나 생성된 데이터를 포함할 수 있으므로 버전 관리에 절대 커밋해서는 안 됩니다.
# Terraform 상태 파일 (비밀 정보를 포함할 수 있음)
*.tfstate
*.tfstate.backup
# 로컬 Terraform 디렉터리
.terraform/
# 민감한 값이 들어 있는 변수 파일
terraform.tfvars
왜 중요한가
- 상태 파일은 자격 증명 및 인프라 세부 정보를 노출할 수 있습니다.
- Provider 바이너리는 자동으로 생성되며 저장소에 포함될 필요가 없습니다.
- 변수 파일은 종종 비밀번호, API 키와 같은 민감한 값을 담고 있습니다.
이 파일들을 .gitignore에 추가하면 인프라와 자격 증명을 모두 보호할 수 있습니다.
Day 06 주요 학습 내용
- Terraform는 작업 디렉터리의 모든
*.tf파일을 자동으로 읽습니다. - 논리적인 파일 단위로 구성을 나누면 가독성과 디버깅이 향상됩니다.
- 깔끔한 프로젝트 구조는 특히 대규모 코드베이스에서 실수를 방지합니다.
- 적절한
.gitignore규칙은 민감한 데이터를 안전하게 보호합니다. - 정돈된 코드는 전문적인 Terraform 실천을 반영합니다.
좋은 Terraform 프로젝트는 단순히 프로비저닝하는 리소스에만 국한되지 않습니다. 그 리소스를 어떻게 조직하느냐도 중요합니다. 파일을 올바르게 구조화하면 코드를 이해하기 쉬워지고, 관리가 안전해지며, 실제 환경에서 사용하기에 적합해집니다. Day 06은 깨끗한 IaC는 깔끔한 구조에서 시작된다는 점을 다시 한 번 강조했습니다.