📌 Terraform이란?
Infrastructure as Code (IaC) 도구로, 코드를 통해 인프라를 정의하고 관리할 수 있게 해주는 오픈소스 도구입니다. HashiCorp에서 개발했으며, 다양한 클라우드 프로바이더(AWS, Azure, GCP 등)와 온프레미스 환경을 지원합니다.
🎯 핵심 개념
1. 선언적 구성 (Declarative Configuration)
원하는 최종 상태를 정의하면, Terraform이 현재 상태와 비교하여 필요한 변경사항을 자동으로 적용합니다.
2. 상태 관리 (State Management)
Terraform은 terraform.tfstate 파일에 인프라의 현재 상태를 저장하고 추적합니다. 이를 통해 변경사항을 감지하고 관리합니다.
3. 프로바이더 (Providers)
AWS, Azure, GCP 등 각 플랫폼과 통신하기 위한 플러그인입니다. 각 프로바이더는 해당 플랫폼의 리소스를 관리하는 API를 제공합니다.
📁 기본 파일 구조
주요 파일 유형
.tf파일: Terraform 구성 파일 (HCL 언어 사용)main.tf: 주요 리소스 정의variables.tf: 변수 선언outputs.tf: 출력 값 정의terraform.tfvars: 변수 값 지정terraform.tfstate: 현재 인프라 상태 저장
🔧 핵심 명령어
기본 워크플로우 명령어
1. 초기화
terraform init
프로바이더 플러그인 다운로드 및 백엔드 초기화
2. 계획 확인
terraform plan
변경될 사항을 미리 확인 (실제 적용 X)
3. 적용
terraform apply
계획된 변경사항을 실제로 적용
4. 삭제
terraform destroy
Terraform으로 생성한 모든 리소스 삭제
유용한 추가 명령어
terraform validate: 구성 파일 유효성 검사terraform fmt: 코드 포맷팅 자동 정리terraform show: 현재 상태 확인terraform refresh: 실제 인프라와 상태 파일 동기화terraform output: 출력 변수 값 확인
💡 주요 구성 요소
1. 리소스 (Resources)
실제 인프라 구성 요소를 정의합니다.
기본 문법:
resource "리소스_타입" "리소스_이름" { 설정_키 = "설정_값" }
2. 변수 (Variables)
재사용 가능한 값을 정의합니다.
변수 타입:
- string: 문자열
- number: 숫자
- bool: 불린
- list: 리스트
- map: 맵
- object: 객체
3. 출력 (Outputs)
Terraform 실행 후 필요한 정보를 추출합니다.
4. 데이터 소스 (Data Sources)
기존 인프라에서 정보를 읽어옵니다.
5. 모듈 (Modules)
재사용 가능한 Terraform 구성 컴포넌트입니다.
📊 상태 관리 베스트 프랙티스
원격 백엔드 사용
- S3 + DynamoDB (AWS)
- Azure Storage
- Google Cloud Storage
- Terraform Cloud
원격 백엔드를 사용하면 팀 협업이 가능하고 상태 파일을 안전하게 관리할 수 있습니다.
상태 잠금 (State Locking)
동시에 여러 사용자가 인프라를 수정하는 것을 방지합니다.
🚀 실전 사용 팁
1. 환경 분리
개발(dev), 스테이징(staging), 프로덕션(prod) 환경을 분리하여 관리합니다.
방법:
- 워크스페이스 사용:
terraform workspace - 디렉토리 분리
- 변수 파일 분리 (dev.tfvars, prod.tfvars)
2. 버전 관리
- Terraform 버전 고정:
required_version - 프로바이더 버전 고정:
required_providers
3. 보안 고려사항
- 민감한 정보는 변수로 관리
sensitive = true속성 사용.tfvars파일은.gitignore에 추가- 환경 변수나 시크릿 관리 도구 활용
4. 코드 구조화
project/ ├── environments/ │ ├── dev/ │ ├── staging/ │ └── prod/ ├── modules/ │ ├── networking/ │ ├── compute/ │ └── database/ └── global/
⚠️ 주의사항
1. 상태 파일 관리
- 절대 수동으로 편집하지 않기
- Git에 커밋하지 않기 (원격 백엔드 사용)
- 정기적으로 백업
2. 리소스 임포트
기존 인프라를 Terraform으로 관리하려면 terraform import 명령 사용
3. 의존성 관리
depends_on: 명시적 의존성 정의- 리소스 참조를 통한 암시적 의존성 활용
📚 학습 로드맵
초급
- HCL 문법 이해
- 기본 명령어 숙달
- 단순 리소스 생성/삭제
- 변수와 출력 활용
중급
- 모듈 작성 및 활용
- 원격 백엔드 구성
- 워크스페이스 관리
- 복잡한 의존성 처리
고급
- 커스텀 프로바이더 개발
- Terraform Cloud/Enterprise 활용
- CI/CD 파이프라인 통합
- 대규모 인프라 관리 전략
🔗 유용한 리소스
- 공식 문서: terraform.io/docs
- 레지스트리: registry.terraform.io (프로바이더, 모듈)
- Best Practices: HashiCorp 공식 가이드
- 커뮤니티: Terraform 포럼, GitHub
답글 남기기