· Compare · 4 min read
Terraform vs Pulumi — IaC 도구 실무 비교 (2026)
HCL vs 프로그래밍 언어, State 관리, 팀 협업 관점에서 Terraform과 Pulumi를 비교합니다.
한줄 요약
- Terraform: HCL 기반, 성숙한 생태계, 업계 표준
- Pulumi: 기존 언어(Python/TS/Go) 사용, 더 유연한 로직
언어 비교
Terraform (HCL)
resource "aws_s3_bucket" "data" {
bucket = "my-data-${var.environment}"
tags = {
Environment = var.environment
ManagedBy = "terraform"
}
}Pulumi (TypeScript)
const bucket = new aws.s3.Bucket("data", {
bucket: `my-data-${config.environment}`,
tags: {
Environment: config.environment,
ManagedBy: "pulumi",
},
});
// 프로그래밍 로직 자유롭게 사용
if (config.environment === "prod") {
new aws.s3.BucketVersioningV2("versioning", {
bucket: bucket.id,
versioningConfiguration: { status: "Enabled" },
});
}핵심 비교
| 항목 | Terraform | Pulumi |
|---|---|---|
| 언어 | HCL (전용) | Python, TypeScript, Go, C#, Java |
| 학습 곡선 | HCL 학습 필요 | 기존 언어 사용 (낮음) |
| State 저장 | S3, GCS, Terraform Cloud | Pulumi Cloud, S3, 로컬 |
| State Lock | DynamoDB 별도 구성 | Pulumi Cloud 기본 제공 |
| Provider 수 | 3,000+ (최대) | Terraform Provider 호환 |
| 테스트 | terraform test (제한적) | 유닛테스트 프레임워크 사용 |
| 비용 | OSS 무료, Cloud 유료 | OSS 무료, Cloud 유료 |
| 라이선스 | BSL (1.6+) | Apache 2.0 |
State 관리
Terraform
terraform {
backend "s3" {
bucket = "tf-state-bucket"
key = "prod/terraform.tfstate"
region = "ap-northeast-2"
dynamodb_table = "tf-locks" # 별도 생성 필요
encrypt = true
}
}Pulumi
# Pulumi Cloud (기본, State + Lock + 히스토리 포함)
pulumi login
# S3 백엔드
pulumi login s3://my-pulumi-statePulumi Cloud는 State Lock, 변경 히스토리, 팀 RBAC이 기본 포함됩니다.
반복/조건문 비교
Terraform
# for_each (맵 기반)
resource "aws_subnet" "private" {
for_each = var.private_subnets
vpc_id = aws_vpc.main.id
cidr_block = each.value.cidr
availability_zone = each.value.az
}
# 조건문 (삼항 연산자만)
count = var.create_vpc ? 1 : 0Pulumi
// 일반 반복문
for (const [name, config] of Object.entries(privateSubnets)) {
new aws.ec2.Subnet(name, {
vpcId: vpc.id,
cidrBlock: config.cidr,
availabilityZone: config.az,
});
}
// 조건문, 함수, 클래스 자유 사용
if (shouldCreateVpc) {
// 복잡한 로직도 자연스럽게
}팀 협업
| 항목 | Terraform | Pulumi |
|---|---|---|
| PR 미리보기 | terraform plan 출력 | pulumi preview 출력 |
| Policy as Code | Sentinel (유료), OPA | CrossGuard (무료 포함) |
| 모듈 레지스트리 | Terraform Registry | npm/PyPI/Go modules |
| IDE 지원 | HCL 전용 확장 | 기존 언어 LSP 활용 |
| 코드 리뷰 | HCL 리뷰 (팀 학습 필요) | 기존 언어로 리뷰 (자연스러움) |
실무 선택 기준
Terraform을 선택하라:
- 이미 팀에 Terraform 경험자가 많을 때
- 멀티클라우드 인프라를 관리할 때
- Provider/Module 생태계가 중요할 때
- 인프라 팀과 개발팀이 분리된 조직
Pulumi를 선택하라:
- 개발팀이 직접 인프라를 관리할 때 (DevOps 문화)
- 복잡한 조건/반복 로직이 필요할 때
- 인프라 코드에 유닛테스트를 적용하고 싶을 때
- 기존 언어 생태계(npm, pip)를 활용하고 싶을 때
- 라이선스가 중요한 환경 (Apache 2.0)
결론
Terraform은 여전히 IaC 업계 표준이며, 가장 넓은 생태계를 갖고 있습니다. 대부분의 인프라 팀에서 첫 선택으로 적합합니다.
Pulumi는 개발자 경험(DX)에서 우위를 가지며, 복잡한 인프라 로직이나 DevOps 문화가 강한 팀에서 빛을 발합니다.
BSL 라이선스 변경 이후 OpenTofu(Terraform 포크)도 대안으로 부상하고 있습니다.