Infrastructure as Code (IaC)
Infrastructure as Code (IaC)
인프라를 코드로 정의하고 버전 관리하여 자동화된 방식으로 프로비저닝, 구성, 관리하는 접근 방식으로, 선언적 또는 명령형 코드로 인프라를 기술하여 일관성, 재현성, 속도를 확보
목적: 인프라 자동화, 일관성 보장, 버전 관리, 재현 가능성, 빠른 프로비저닝
특징: 코드화(Code), 버전 관리(Git), 자동화, 멱등성(Idempotent), 선언적/명령형
접근 방식: 선언적(Desired State 정의/Terraform/CloudFormation/무엇을), 명령형(단계별 절차/Ansible/Bash/어떻게)
주요 도구: Terraform(HashiCorp/멀티클라우드/HCL/State 관리/가장 인기), CloudFormation(AWS 네이티브/JSON/YAML/AWS 전용), Pulumi(프로그래밍 언어 사용 Python/TypeScript/Go), Ansible(구성 관리/에이전트리스/YAML), Chef/Puppet(구성 관리/에이전트 기반)
Terraform 핵심: HCL 언어(HashiCorp Configuration Language), State 파일(실제 인프라 상태 추적/원격 백엔드 S3/Consul), Plan(변경사항 미리보기), Apply(인프라 적용), Modules(재사용 가능한 구성), Provider(AWS/Azure/GCP 플러그인)
IaC 워크플로우: ① 코드 작성(인프라 정의) → ② Git 커밋/PR(버전 관리/리뷰) → ③ CI/CD 파이프라인(자동 검증/테스트) → ④ Plan(변경 미리보기) → ⑤ Apply(인프라 생성/변경) → ⑥ State 저장(상태 관리)
모범 사례: 모듈화(재사용 가능한 모듈), 원격 State(S3+DynamoDB 잠금), 환경 분리(dev/stage/prod), 변수 활용(민감 정보 분리), 정책 검증(Sentinel/OPA), 자동 포맷(terraform fmt), 문서화(README)
장점: 일관성(수동 오류 제거), 속도(자동 프로비저닝), 버전 관리(Git), 재사용(모듈), 협업(코드 리뷰), 재해 복구(코드로 재구축)
단점: 학습 곡선, State 관리 복잡도, 드리프트(실제 vs 코드 불일치), 초기 투자, 멱등성 보장 필요
IaC vs ClickOps: IaC(코드/자동화/일관성/버전관리/재현가능) vs ClickOps(GUI/수동/휴먼에러/추적어려움/일회성)
적용사례: 멀티 환경 배포, 재해 복구, 임시 환경, 규정 준수, 멀티클라우드
비교: Terraform(멀티클라우드/선언적) vs CloudFormation(AWS/네이티브) vs Pulumi(프로그래밍 언어)
연관: Terraform, DevOps, GitOps, CI/CD, 자동화