[문제] 코드형 인프라(IaC: Infrastructure as Code)의 개념과 명령형·선언형 방식의 차이를 설명하고, Terraform의 핵심 개념(Provider, Resource, State, Module)과 워크플로(init·plan·apply)를 서술하시오.
1. IaC 개념과 명령형 vs 선언형
IaC(Infrastructure as Code)는 서버·네트워크·데이터베이스 등 인프라를 코드로 정의하여 자동화·버전 관리·재사용하는 방식이다.
| 구분 | 명령형(Imperative) | 선언형(Declarative) |
|---|---|---|
| 방식 | “어떻게” 만들지 절차 기술 | “무엇을” 원하는지 최종 상태 기술 |
| 도구 | Ansible (일부), Chef, Puppet | Terraform, CloudFormation, Pulumi |
| 멱등성 | 개발자가 직접 보장 | 도구가 현재 상태→목표 상태 자동 조정 |
2. Terraform 핵심 개념
- Provider: AWS·Azure·GCP 등 인프라 공급자와 통신하는 플러그인 (aws, azurerm, google)
- Resource: 관리할 인프라 단위 정의 (aws_instance, aws_s3_bucket)
- State: 현재 인프라 상태를 JSON으로 저장하는 파일 (terraform.tfstate). 원격 백엔드(S3+DynamoDB)로 팀 공유
- Module: 재사용 가능한 Terraform 코드 묶음 (VPC Module, EKS Module)
3. Terraform 워크플로
terraform init → Provider 플러그인 다운로드
terraform plan → 현재 상태 vs 코드 차이 미리보기
terraform apply → 인프라 변경 적용
terraform destroy → 모든 리소스 삭제
핵심 키워드: IaC, Terraform, HCL, Provider, State, Module, 선언형, GitOps, Remote Backend
IaC는 인프라 드리프트를 방지하고 재현 가능한 환경을 보장한다. Terraform의 선언형 HCL과 State 관리로 멀티클라우드 인프라를 코드로 일관되게 관리할 수 있다.