개요

IaC (Infrastructure as Code)는 서버, 네트워크, 데이터베이스 등 인프라를 코드로 정의하고 관리하는 방식입니다. 수동 설정 대신 선언적/명령적 코드로 인프라를 자동 프로비저닝합니다.

핵심 개념

개념설명
선언적(Declarative)“원하는 상태”를 정의 → 도구가 현재 상태와 비교하여 적용 (Terraform, Pulumi)
명령적(Imperative)“실행할 단계”를 순서대로 정의 (Ansible, 스크립트)
멱등성(Idempotent)같은 코드를 여러 번 실행해도 결과 동일
상태 관리(State)현재 인프라 상태를 파일로 추적 (Terraform state)
드리프트 감지코드와 실제 인프라 차이 자동 감지

주요 도구

Terraform

항목내용
개발HashiCorp
언어HCL (HashiCorp Configuration Language)
유형선언적, 프로비저닝
지원AWS, GCP, Azure, K8s 등 3,000+ 프로바이더
라이선스BSL 1.1 (2023~ 오픈소스→소스공개)
resource "aws_instance" "web" {
  ami           = "ami-0c55b159cbfafe1f0"
  instance_type = "t3.micro"
  tags = { Name = "web-server" }
}

장점: 사실상 IaC 표준, 거대한 생태계, 멀티클라우드 단점: HCL 학습 필요, 상태 파일 관리, BSL 라이선스 변경 논란

OpenTofu

항목내용
핵심Terraform의 오픈소스 포크 (Linux Foundation)
호환Terraform 1.5 호환, HCL 동일
  • Terraform BSL 라이선스 변경에 대한 커뮤니티 응답
  • Terraform 코드 그대로 사용 가능 (terraformtofu 명령어 변경)

Pulumi

항목내용
핵심프로그래밍 언어로 IaC (HCL 대신 Python/TypeScript/Go/C#)
유형선언적, 프로비저닝
지원AWS, GCP, Azure, K8s 등
import pulumi_aws as aws
 
server = aws.ec2.Instance("web",
    instance_type="t3.micro",
    ami="ami-0c55b159cbfafe1f0",
    tags={"Name": "web-server"}
)

장점: 기존 언어 사용 (조건문, 루프, 함수), IDE 자동완성, 테스트 가능 단점: Terraform 대비 작은 생태계, 상태 관리 (Pulumi Cloud 또는 S3)

Ansible

항목내용
개발Red Hat
언어YAML (Playbook)
유형명령적, 구성 관리 (Configuration Management)
에이전트에이전트리스 (SSH)
- hosts: webservers
  tasks:
    - name: Install nginx
      apt: name=nginx state=present
    - name: Start nginx
      service: name=nginx state=started

장점: 에이전트 불필요 (SSH만), 학습 쉬움, 서버 구성 관리 강점 단점: 대규모에서 느림, 선언적이지 않음, 드리프트 감지 약함

기타

도구특징
AWS CloudFormationAWS 전용 IaC (JSON/YAML), AWS CDK (프로그래밍 언어)
AWS CDKTypeScript/Python으로 CloudFormation 생성
CrossplaneK8s CRD로 클라우드 리소스 관리 (GitOps 호환)
ChefRuby 기반 구성 관리 (에이전트 방식)
Puppet선언적 구성 관리 (에이전트 방식)
SaltStackPython 기반, 이벤트 드리븐
Vagrant로컬 VM 프로비저닝 (개발 환경)

도구 분류

[프로비저닝]                    [구성 관리]
인프라 생성/삭제                 서버 내부 설정

Terraform / OpenTofu           Ansible
Pulumi                         Chef
CloudFormation / CDK           Puppet
Crossplane                    SaltStack
  • 프로비저닝: “서버를 만든다” (EC2 인스턴스, VPC, RDS 생성)
  • 구성 관리: “서버를 설정한다” (nginx 설치, 설정 파일 배포)
  • 실무: Terraform (프로비저닝) + Ansible (구성 관리) 조합이 일반적

비교

도구유형언어멀티클라우드상태 관리난이도
Terraform프로비저닝HCL최강있음중간
OpenTofu프로비저닝HCL최강있음중간
Pulumi프로비저닝Python/TS/Go강함있음중간
Ansible구성 관리YAMLO없음낮음
CloudFormation프로비저닝JSON/YAMLAWS 전용AWS 관리중간
Crossplane프로비저닝K8s YAMLOK8s높음

선택 가이드

상황추천
멀티클라우드Terraform or OpenTofu
개발자가 HCL 싫어함Pulumi (Python/TS)
AWS 전용CloudFormation or AWS CDK
서버 내부 설정Ansible
K8s GitOpsCrossplane + ArgoCD
오픈소스 중요OpenTofu

관련 항목