· Compare  · 4 min read

Terraform vs Pulumi — IaC 도구 실무 비교 (2026)

HCL vs 프로그래밍 언어, State 관리, 팀 협업 관점에서 Terraform과 Pulumi를 비교합니다.

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" },
  });
}

핵심 비교

항목TerraformPulumi
언어HCL (전용)Python, TypeScript, Go, C#, Java
학습 곡선HCL 학습 필요기존 언어 사용 (낮음)
State 저장S3, GCS, Terraform CloudPulumi Cloud, S3, 로컬
State LockDynamoDB 별도 구성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-state

Pulumi 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 : 0

Pulumi

// 일반 반복문
for (const [name, config] of Object.entries(privateSubnets)) {
  new aws.ec2.Subnet(name, {
    vpcId: vpc.id,
    cidrBlock: config.cidr,
    availabilityZone: config.az,
  });
}

// 조건문, 함수, 클래스 자유 사용
if (shouldCreateVpc) {
  // 복잡한 로직도 자연스럽게
}

팀 협업

항목TerraformPulumi
PR 미리보기terraform plan 출력pulumi preview 출력
Policy as CodeSentinel (유료), OPACrossGuard (무료 포함)
모듈 레지스트리Terraform Registrynpm/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 포크)도 대안으로 부상하고 있습니다.

Back to Blog

Related Posts

View All Posts »