핵심 요약
2025년 라이선스 변경으로 Terraform에서 갈라진 OpenTofu가 1.10(2026-04) 기준 안정화. 사내 IaC를 6개월에 걸쳐 OpenTofu로 옮긴 회고와 결정 기준.
1. 왜 옮겼나
- BSL(business source license)로 사내 자동화 모호함 회피
- state file 암호화 (Terraform 미지원)
- 대시보드·도구가 모두 OSS — 폐쇄적 의존 줄임
- 요청 PR 머지 평균 9일 (TF는 60일+)
2. 격차 요약 — 2026-05 기준
| 기능 | Terraform 1.10 | OpenTofu 1.10 |
|---|---|---|
| 모듈·프로바이더 문법 | O | O (호환) |
| state 암호화 | X | O (네이티브) |
| Dynamic Provider 구성 | X | O (1.8+) |
| Provider iteration | X | O |
| Cloud / Stacks | O (HCP Terraform) | X (Spacelift 등 외부) |
| Sentinel 정책 | O | X (대신 OPA·Conftest) |
3. state 암호화 — 가장 큰 이득
terraform {
encryption {
key_provider "aws_kms" "default" {
kms_key_id = "arn:aws:kms:..."
}
method "aes_gcm" "secure" {
keys = key_provider.aws_kms.default
}
state { method = method.aes_gcm.secure }
plan { method = method.aes_gcm.secure }
}
}
S3 백엔드에 평문으로 떠있던 시크릿이 사라짐. 감사·컴플라이언스에서 가장 단단한 변화.
4. Dynamic Provider Configuration
같은 리전·계정 여러 개를 for_each로:
provider "aws" {
for_each = var.regions # ["us-east-1", "eu-west-1"]
alias = each.key
region = each.key
}
resource "aws_s3_bucket" "logs" {
for_each = var.regions
provider = aws[each.key]
bucket = "logs-${each.key}"
}
Terraform에서 alias 일일이 쓰던 코드가 사라진다.
5. 마이그레이션 단계 — 실제 진행
1단계: tfenv → 둘 다 설치
tofu와 terraform 양쪽으로 같은 코드를 plan. diff 없으면 OK.
2단계: CI에서 tofu plan 추가
main에서 terraform·tofu plan을 모두 돌려 비교. 1주간 차이 없으면 다음.
3단계: apply는 tofu
state는 호환. 한 번 tofu apply 하면 자동으로 작동. 롤백 시엔 terraform으로 돌아가도 OK.
4단계: 코드에 OpenTofu 전용 기능 도입
state encryption, dynamic provider 등 — 이 시점부터 Terraform 호환 깨짐 (의도된).
6. 함정
① state 락
두 도구가 동시에 같은 state 만지면 락 충돌. 마이그레이션 기간엔 한쪽으로 통일.
② HCP Terraform Cloud
SaaS 사용자라면 OpenTofu로 직행 못 함. Spacelift·env0·Scalr 같은 대안 검토.
③ 일부 모듈 (community)
특정 모듈이 terraform_version을 enforced하는 경우 호환 안 됨. 모듈 fork 또는 issue.
④ provider tooling
대부분 동일 plugin 사용. 단, 일부 closed provider는 OpenTofu 명시 인증 필요.
7. 운영 도구
| 도구 | 지원 |
|---|---|
| Atlantis | OpenTofu 명시 지원 |
| Spacelift | OpenTofu·Terraform 동시 |
| env0 | OpenTofu 지원 |
| Terragrunt | OpenTofu 호환 |
8. 실측 — 사내 IaC
| 지표 | Terraform 1.5 (라이선스 변경 전) | OpenTofu 1.10 |
|---|---|---|
| plan 시간 (700 리소스) | 62s | 56s |
| state 크기 | 4.1MB | 4.2MB (암호화 오버헤드) |
| provider 다운로드 | 완료까지 동등 | 등록 미러 별도 |
9. 결정 가이드
- HCP Terraform 깊이 사용 중 → 그대로
- state encryption 필요 → OpenTofu
- OSS 라이선스가 비즈니스 위험 → OpenTofu
- 커뮤니티 속도 우선 → OpenTofu
참고
- opentofu.org/docs/intro/whats-new
- github.com/opentofu/opentofu/releases/tag/v1.10.0

댓글 0