이번 포스트에서는 오픈소스 IaC(Infrastructure as Code) 플랫폼인 OpenTofu에 대하여 자세하게 알아보려고 합니다.

클라우드 인프라를 코드로 관리하는 IaC(Infrastructure as Code) 도구를 사용하고 계신가요? 그렇다면 최근 Terraform 라이센스 변경 소식에 당황하셨을 겁니다. 하지만 걱정하지 마세요. 커뮤니티가 만든 강력한 대안, OpenTofu가 있습니다. 오늘은 왜 전 세계 개발자들이 OpenTofu에 주목하는지, 실제로 어떻게 사용하는지 자세히 알아보겠습니다.

 

OpenTofu

 

 

1. OpenTofu 탄생 배경: 왜 만들어졌을까요?

2023년 8월, IT 커뮤니티에 충격적인 소식이 전해졌습니다. HashiCorp가 Terraform을 포함한 모든 핵심 제품의 라이센스를 기존의 오픈소스 라이센스인 Mozilla Public License(MPL) v2.0에서 Business Source License(BSL)로 변경한다고 발표한 것입니다.

이 변경이 왜 문제였을까요? BSL은 엄밀히 말하면 오픈소스 라이센스가 아닙니다. 개인 사용자나 일반 기업에서는 큰 문제가 없지만, “경쟁 서비스(competitive services)”를 제공하는 상업적 용도로는 사용할 수 없다는 제한이 있었습니다. 문제는 “경쟁 서비스”의 정의가 모호했다는 점입니다.

많은 기업과 개발자들이 불안감을 느꼈습니다. 현재는 문제없이 사용하고 있지만, 앞으로 HashiCorp가 정책을 바꾸면 어떻게 될까? 클라우드 서비스를 제공하는 회사라면 갑자기 라이센스 위반이 될 수도 있지 않을까?

이런 우려 속에서 2023년 8월 15일, OpenTF(후에 OpenTofu로 개명) 매니페스토가 발표되었습니다. Gruntwork, Spacelift, Harness, Env0, Scalr 등 주요 기업들이 힘을 합쳐 Terraform의 마지막 오픈소스 버전(1.5.6)을 포크(fork)하여 진정한 오픈소스로 유지하기로 결정한 것입니다.

놀라운 점은 이 움직임에 대한 커뮤니티의 반응이었습니다. 매니페스토 발표 일주일 만에 GitHub에서 6,000개 이상의 스타를 받았고, 140개 이상의 기업과 700명 이상의 개발자가 지지를 표명했습니다. 2023년 9월 20일, OpenTofu는 공식적으로 Linux Foundation의 프로젝트로 편입되었습니다. 이는 중립적이고 신뢰할 수 있는 거버넌스 체계를 갖추게 되었다는 의미입니다.

물론 순탄치만은 않았습니다. 2024년 4월, HashiCorp는 OpenTofu 프로젝트에 cease and desist(중지 경고) 통지를 보냈습니다. OpenTofu가 BSL 라이센스 버전의 코드를 무단으로 사용했다는 주장이었죠. 하지만 OpenTofu 팀은 해당 코드가 MPL 라이센스 버전에서 온 것임을 입증했고, 커뮤니티의 지지 속에 프로젝트는 계속 발전하고 있습니다.

 

 

2. OpenTofu란 정확히 무엇일까? 기본 개념 이해하기

OpenTofu는 클라우드 및 온프레미스 리소스를 안전하고 효율적으로 구축, 변경, 버전 관리할 수 있는 오픈소스 IaC 도구입니다. 쉽게 말하면, 코드 몇 줄로 AWS, Azure, Google Cloud 등의 클라우드 인프라를 자동으로 관리할 수 있게 해주는 도구죠.

OpenTofu의 가장 큰 특징은 Terraform의 drop-in replacement, 즉 Terraform을 완벽하게 대체할 수 있다는 점입니다. 기존에 작성한 Terraform 코드를 거의 수정 없이 그대로 사용할 수 있습니다. 명령어도 거의 동일합니다. terraform init 대신 tofu init, terraform plan 대신 tofu plan을 사용하는 정도의 차이만 있을 뿐입니다.

2025년 10월 현재, OpenTofu는 빠르게 성장하고 있습니다. 공식 홈페이지에 따르면 3,900개 이상의 provider와 23,600개 이상의 module을 지원하며, GitHub에서 1,000만 건 이상의 다운로드를 기록했습니다. 최신 버전은 2025년 6월에 출시된 1.10.0으로, OCI 레지스트리 지원 등 다양한 신기능이 추가되었습니다.

 

 

3. Terraform과 OpenTofu, 무엇이 다를까요?

많은 분들이 “그럼 OpenTofu는 Terraform과 뭐가 다른가요?”라고 궁금해하실 겁니다. 핵심적인 차이점을 표로 정리해보겠습니다.

구분 OpenTofu Terraform
라이센스 MPL 2.0 (완전한 오픈소스) BSL (제한적 상업 사용)
거버넌스 Linux Foundation & 커뮤니티 HashiCorp (단일 회사)
개발 방향 커뮤니티 중심, 투명한 RFC 프로세스 회사 주도, 비공개 로드맵
State 암호화 기본 제공 (Built-in) 추가 설정 필요 (S3 버저닝 등)
Provider 생태계 3,900+ (Terraform 호환) 3,000+
주요 기능 Provider for_each, OCI 레지스트리, Early variable evaluation 최신 버전에서 일부 기능 BSL
비용 완전 무료 개인/소규모 무료, 대규모 상업용 제한 가능

라이센스: 가장 중요한 차이점

가장 큰 차이는 역시 라이센스입니다. OpenTofu는 MPL 2.0 라이센스로, 어떤 용도로든 자유롭게 사용, 수정, 배포할 수 있습니다. 상업적 서비스를 제공하더라도 전혀 문제없습니다.

반면 Terraform은 BSL 라이센스로, “경쟁 서비스”를 제공하는 경우 사용이 제한됩니다. 2025년 초 IBM이 HashiCorp를 인수하면서 이러한 라이센스 정책이 더욱 불투명해졌다는 우려도 있습니다.

State 암호화: 보안이 중요하다면

OpenTofu는 상태 파일(state file) 암호화를 기본으로 제공합니다. 이 기능은 Terraform 커뮤니티에서 5년 넘게 요청했지만 받아들여지지 않았던 기능인데, OpenTofu에서는 첫 릴리스부터 포함되었습니다.

민감한 인프라 정보가 담긴 상태 파일을 암호화하는 것은 보안상 매우 중요합니다. Terraform에서는 이를 위해 S3 버킷 암호화나 버저닝 같은 추가 설정이 필요했지만, OpenTofu는 설정 파일에 암호화 키만 지정하면 자동으로 처리됩니다.

새로운 기능들

OpenTofu는 커뮤니티의 요구를 반영하여 빠르게 발전하고 있습니다:

  • Provider for_each (1.9.0): 여러 리전에 동일한 인프라를 배포할 때 코드 중복을 크게 줄일 수 있습니다.
  • OCI Registry 지원 (1.10.0): provider와 module을 컨테이너 레지스트리처럼 배포하고 관리할 수 있습니다.
  • Early Variable Evaluation (1.8.0): terraform 블록과 module 소스에서 변수를 사용할 수 있게 되어 더 유연한 설정이 가능합니다.

 

Terraform(테라폼)이란? 클라우드 인프라를 코드로 관리하는 대표 IaC

 

 

4. OpenTofu 시작하기: 운영체제별 설치 가이드

OpenTofu를 시작하는 첫 단계는 설치입니다. 다양한 운영체제에서 간편하게 설치할 수 있습니다.

Ubuntu/Debian 계열 리눅스에 설치하기

Ubuntu나 Debian을 사용한다면 공식 저장소를 통해 쉽게 설치할 수 있습니다:

# 필수 도구 설치
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl gnupg

# OpenTofu GPG 키 추가
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://get.opentofu.org/opentofu.gpg | sudo tee /etc/apt/keyrings/opentofu.gpg >/dev/null
curl -fsSL https://packages.opentofu.org/opentofu/tofu/gpgkey | sudo gpg --no-tty --batch --dearmor -o /etc/apt/keyrings/opentofu-repo.gpg >/dev/null
sudo chmod a+r /etc/apt/keyrings/opentofu.gpg /etc/apt/keyrings/opentofu-repo.gpg

# 저장소 추가
echo \
"deb [signed-by=/etc/apt/keyrings/opentofu.gpg,/etc/apt/keyrings/opentofu-repo.gpg] https://packages.opentofu.org/opentofu/tofu/any/ any main" | \
sudo tee /etc/apt/sources.list.d/opentofu.list

# OpenTofu 설치
sudo apt-get update
sudo apt-get install -y tofu

설치 스크립트를 사용하면 더 간단합니다:

# 설치 스크립트 다운로드
curl --proto '=https' --tlsv1.2 -fsSL https://get.opentofu.org/install-opentofu.sh -o install-opentofu.sh

# 실행 권한 부여
chmod +x install-opentofu.sh

# 설치 실행
./install-opentofu.sh --install-method deb

# 스크립트 삭제
rm -f install-opentofu.sh

macOS에서 설치하기

macOS 사용자라면 Homebrew를 통해 한 줄로 설치할 수 있습니다:

brew install opentofu

Windows에서 설치하기

Windows 사용자는 여러 방법으로 설치할 수 있습니다:

방법 1: Chocolatey 사용 (권장)

PowerShell을 관리자 권한으로 실행한 후:

choco install opentofu

방법 2: 수동 설치

  1. OpenTofu GitHub Releases 페이지에서 Windows용 파일 다운로드 (예: tofu_1.10.0_windows_amd64.zip)
  2. 다운로드한 파일을 압축 해제
  3. 원하는 폴더에 복사 (예: C:\Program Files\OpenTofu\)
  4. 시스템 환경 변수 PATH에 해당 경로 추가:
    • 시작 메뉴에서 “환경 변수(Environment Variables)” 검색
    • 시스템 변수(System Variables)에서 Path 선택 → 편집(Edit)
    • 새로 만들기(New) 클릭하여 OpenTofu 경로 추가
  5. 새 PowerShell 창을 열고 tofu version 으로 확인

설치 확인하기

설치가 완료되었다면 다음 명령어로 확인해보세요:

tofu version

정상적으로 설치되었다면 OpenTofu의 버전 정보가 표시됩니다.

 

 

5. 실습으로 배우는 OpenTofu: 첫 번째 프로젝트 만들기

설치가 완료되었으니 이제 실제로 OpenTofu를 사용해보겠습니다. AWS S3 버킷(Bucket)을 생성하는 간단한 예제를 통해 기본 워크플로우(Workflow)를 익혀보겠습니다.

AWS 자격증명(Credentials) 설정하기

OpenTofu가 AWS 리소스를 관리하려면 먼저 AWS 자격증명을 설정해야 합니다.

방법 1: 환경 변수 사용 (권장)

터미널에서 다음과 같이 설정합니다:

# Linux/macOS
export AWS_ACCESS_KEY_ID="your-access-key-id"
export AWS_SECRET_ACCESS_KEY="your-secret-access-key"
export AWS_DEFAULT_REGION="ap-northeast-2"

# Windows PowerShell
$env:AWS_ACCESS_KEY_ID="your-access-key-id"
$env:AWS_SECRET_ACCESS_KEY="your-secret-access-key"
$env:AWS_DEFAULT_REGION="ap-northeast-2"

방법 2: AWS CLI 설정 파일 사용

AWS CLI가 설치되어 있다면 ~/.aws/credentials 파일이 자동으로 인식됩니다:

aws configure

⚠️ 보안 주의사항: Access Key는 절대 코드에 하드코딩하거나 GitHub에 올리지 마세요!

프로젝트 디렉토리(Directory) 생성

mkdir my-first-opentofu
cd my-first-opentofu

설정 파일(Configuration File) 작성하기

main.tf 파일을 생성하고 다음 내용을 입력합니다:

terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 5.0"
    }
  }
}

provider "aws" {
  region = "ap-northeast-2"  # 서울 리전
}

resource "aws_s3_bucket" "demo_bucket" {
  bucket = "opentofu-demo-${random_id.bucket_id.hex}"
  
  tags = {
    Name        = "OpenTofu Demo"
    Environment = "Learning"
  }
}

resource "random_id" "bucket_id" {
  byte_length = 8
}

output "bucket_name" {
  value       = aws_s3_bucket.demo_bucket.id
  description = "생성된 S3 버킷 이름"
}

이 코드는 무엇을 하는 걸까요?

  1. terraform 블록(Block): AWS provider를 사용하겠다고 선언(Declaration)합니다.
  2. provider 블록(Block): AWS 리전(Region)을 서울(ap-northeast-2)로 설정합니다.
  3. aws_s3_bucket 리소스(Resource): S3 버킷을 생성합니다. 버킷 이름은 고유해야 하므로 random_id를 사용합니다.
  4. random_id 리소스(Resource): 8바이트 길이의 랜덤 ID를 생성합니다.
  5. output 블록(Output Block): 생성된 버킷의 이름을 출력합니다.

OpenTofu 초기화하기(Initialization)

먼저 필요한 provider를 다운로드해야 합니다:

tofu init

이 명령어는 .terraform 디렉토리를 생성하고 AWS provider를 다운로드합니다. 초기화는 프로젝트당 한 번만 실행하면 됩니다.

실행 계획(Execution Plan) 확인하기

실제로 인프라를 변경하기 전에 어떤 변경이 일어날지 미리 볼 수 있습니다:

tofu plan

OpenTofu는 현재 상태와 원하는 상태를 비교하여 생성, 수정, 삭제될 리소스를 보여줍니다. 이 단계에서 실수를 미리 발견할 수 있어 매우 유용합니다.

인프라 배포하기(Apply Changes)

계획이 마음에 든다면 실제로 적용합니다:

tofu apply

확인 메시지가 나타나면 yes를 입력합니다. 잠시 후 AWS 콘솔에서 새로운 S3 버킷이 생성된 것을 확인할 수 있습니다.

리소스 정리하기(Destroy Resources)

실습이 끝났다면 생성한 리소스를 삭제합니다:

tofu destroy

이 명령어는 OpenTofu가 관리하는 모든 리소스를 삭제합니다. 불필요한 비용이 발생하지 않도록 꼭 정리해주세요.

 

 

6. Terraform에서 OpenTofu로 마이그레이션하는 방법

기존에 Terraform을 사용하고 있다면 OpenTofu로 마이그레이션하는 것은 생각보다 간단합니다.

마이그레이션 전 준비사항

  1. 백업 생성: 현재 상태 파일(state file)을 반드시 백업하세요.
  2. Terraform 버전 확인: Terraform 1.6 이상을 사용 중이라면 일부 호환성 문제가 있을 수 있습니다.
  3. 테스트 환경에서 먼저: 프로덕션 환경에 바로 적용하지 말고 개발 환경에서 먼저 테스트하세요.

기본 마이그레이션 과정

  1. OpenTofu 설치 (위에서 설명한 방법 사용)
  2. 프로젝트 디렉토리로 이동
    cd your-terraform-project
    
  3. OpenTofu 초기화
    tofu init
    

    이 명령어는 기존 Terraform 상태 파일을 인식하고 필요한 provider를 다운로드합니다.

  4. 상태 확인
    tofu plan
    

    변경사항이 없다고 나온다면 성공입니다! OpenTofu가 기존 Terraform 상태를 정상적으로 읽었다는 의미입니다.

  5. 명령어 변경 이제부터는 terraform 대신 tofu 명령어를 사용합니다:
    • terraform inittofu init
    • terraform plantofu plan
    • terraform applytofu apply
    • terraform destroytofu destroy

CI/CD 파이프라인 업데이트하기

GitHub Actions를 사용한다면 간단히 액션만 변경하면 됩니다:

# 기존 Terraform 설정
- uses: hashicorp/setup-terraform@v2
  with:
    terraform_version: 1.5.0

# OpenTofu로 변경
- uses: opentofu/setup-opentofu@v1
  with:
    tofu_version: 1.10.0

자세한 내용은 OpenTofu GitHub Actions 저장소를 참고하세요.

 

 

7. OpenTofu를 더 효율적으로 사용하는 방법

VS Code에서 개발 환경 구축하기

OpenTofu는 공식 VS Code 확장(Extension)을 제공합니다. OpenTofu Extension for VS Code를 설치하면 다음 기능을 사용할 수 있습니다:

  • 문법 하이라이팅(Syntax Highlighting): HCL 코드를 색상으로 구분하여 읽기 쉽게 만듭니다.
  • 자동 완성(IntelliSense): provider, resource, data source를 입력할 때 자동 완성을 제공합니다.
  • 코드 포맷팅(Code Formatting): tofu fmt 명령어를 자동으로 실행하여 코드를 정리합니다.
  • 에러 검사(Error Detection): 실시간으로 문법 오류를 찾아줍니다.

State 파일 암호화 설정하기

OpenTofu의 강력한 기능 중 하나인 state 암호화를 설정해보겠습니다. main.tf에 다음을 추가합니다:

terraform {
  encryption {
    key_provider "pbkdf2" "mykey" {
      passphrase = var.encryption_passphrase
    }

    method "aes_gcm" "example" {
      keys = key_provider.pbkdf2.mykey
    }

    state {
      method = method.aes_gcm.example
    }
  }
}

암호화 키는 환경변수나 별도 파일로 관리하는 것이 좋습니다. 절대 코드에 하드코딩하지 마세요!

Module로 코드 재사용하기

OpenTofu는 Terraform의 모든 module을 사용할 수 있습니다. OpenTofu RegistryTerraform Registry에서 수천 개의 검증된 module을 찾을 수 있습니다.

예를 들어 AWS VPC를 생성하는 module을 사용하려면:

module "vpc" {
  source  = "terraform-aws-modules/vpc/aws"
  version = "5.0.0"

  name = "my-vpc"
  cidr = "10.0.0.0/16"

  azs             = ["ap-northeast-2a", "ap-northeast-2c"]
  private_subnets = ["10.0.1.0/24", "10.0.2.0/24"]
  public_subnets  = ["10.0.101.0/24", "10.0.102.0/24"]

  enable_nat_gateway = true
  enable_vpn_gateway = false
}

이렇게 하면 복잡한 VPC 설정을 몇 줄로 해결할 수 있습니다.

Provider for_each 활용하기

OpenTofu 1.9.0의 핵심 기능인 provider for_each를 사용하면 여러 리전(Region)에 동일한 인프라를 쉽게 배포할 수 있습니다:

# 여러 AWS 리전에 동시에 배포하기
variable "aws_regions" {
  default = ["ap-northeast-2", "us-east-1", "eu-west-1"]
}

provider "aws" {
  alias    = "multi_region"
  for_each = toset(var.aws_regions)
  region   = each.key
}

# 각 리전에 S3 버킷 생성
resource "aws_s3_bucket" "regional_backup" {
  for_each = toset(var.aws_regions)
  provider = aws.multi_region[each.key]
  bucket   = "backup-${each.key}-${random_id.bucket_suffix.hex}"
}

이 기능으로 코드 중복을 크게 줄이고 멀티 리전 배포를 훨씬 간단하게 관리할 수 있습니다.

 

 

8. 커뮤니티와 함께 발전하기: 학습 리소스 총정리

OpenTofu는 활발한 커뮤니티를 가지고 있습니다. 궁금한 점이 있거나 도움이 필요할 때 다음 리소스를 활용하세요:

공식 문서 및 리소스

커뮤니티 참여하기

  • OpenTofu Slack: 실시간으로 질문하고 답변받을 수 있습니다.
  • GitHub Discussions: 기능 제안이나 긴 토론을 할 수 있습니다.
  • 커뮤니티 미팅: 매주 수요일 12:30 UTC에 온라인 미팅이 열립니다.

학습 자료

 

 

9. OpenTofu를 선택해야 하는 이유

마지막으로, OpenTofu를 선택해야 하는 이유를 정리해보겠습니다.

라이센스 걱정 없는 자유로움

OpenTofu는 영원히 오픈소스로 남을 것입니다. Linux Foundation의 관리 하에 있어 단일 회사의 정책 변경에 영향받지 않습니다. 상업적 서비스를 제공하든, SaaS를 운영하든, 라이센스 걱정 없이 사용할 수 있습니다.

커뮤니티 중심의 발전

OpenTofu는 사용자들의 실제 요구사항을 반영합니다. State 암호화, provider for_each 같은 기능들은 모두 커뮤니티의 요청으로 구현되었습니다. RFC(Request for Comments) 프로세스를 통해 누구나 기능을 제안하고 논의할 수 있습니다.

검증된 안정성

OpenTofu는 Terraform의 검증된 코드베이스에서 시작했습니다. 이미 수년간 프로덕션 환경에서 사용된 안정적인 코드입니다. 게다가 18명의 풀타임 개발자가 5년간 지원을 약속했습니다.

넓은 생태계

3,900개 이상의 provider와 23,600개 이상의 module을 지원합니다. AWS, Azure, Google Cloud는 물론 Kubernetes, Docker, GitHub 등 거의 모든 클라우드 플랫폼과 서비스를 관리할 수 있습니다.

쉬운 전환

이미 Terraform을 사용하고 있다면 전환이 매우 쉽습니다. 대부분의 경우 명령어만 바꾸면 되고, 기존 코드와 상태 파일을 그대로 사용할 수 있습니다.

 

 

10. 알아두면 좋은 주의사항과 고려할 점

OpenTofu를 사용하기 전에 알아두면 좋은 몇 가지 사항들이 있습니다.

Terraform 최신 기능과의 격차

OpenTofu는 Terraform 1.5.6을 기반으로 포크되었기 때문에, Terraform 1.6 이후의 일부 신기능은 아직 OpenTofu에 없을 수 있습니다. 다만 커뮤니티가 필요한 기능을 빠르게 개발하고 있어, 시간이 지나면서 이 격차는 점점 좁혀지고 있습니다.

Provider 호환성 확인

대부분의 Terraform provider가 OpenTofu에서도 잘 작동하지만, 일부 최신 provider나 베타 버전은 테스트가 필요합니다. 프로덕션에 적용하기 전에 개발 환경에서 충분히 테스트하는 것을 권장합니다.

팀 전체의 동의 필요

기존 Terraform 프로젝트를 OpenTofu로 전환할 때는 팀 전체의 동의와 이해가 필요합니다. 특히 CI/CD 파이프라인, 문서, 교육 자료 등도 함께 업데이트해야 하므로 전환 계획을 세심하게 수립하세요.

상태 파일 백업은 필수

마이그레이션 과정에서나 일상적인 운영에서나 상태 파일(State File)은 인프라의 핵심입니다. 정기적으로 백업하고, 원격 백엔드(Remote Backend)를 사용하여 안전하게 보관하세요.

학습 곡선

IaC 자체가 처음이라면 개념을 익히는 데 시간이 필요합니다. 하지만 이미 Terraform을 사용하고 있다면 거의 추가 학습 없이 바로 시작할 수 있습니다.

 

 

OpenTofu는 단순한 Terraform의 대안이 아닙니다. 진정한 오픈소스 정신을 구현하고, 커뮤니티의 목소리를 듣는 차세대 IaC 플랫폼입니다. 2025년 현재 빠르게 성장하고 있으며, 많은 기업들이 실제 프로덕션 환경에서 사용하고 있습니다.

Terraform을 사용 중이시라면, 이제는 OpenTofu로의 전환을 진지하게 고려해볼 시점입니다. 라이센스 불확실성에서 벗어나고, 더 나은 기능과 커뮤니티 지원을 받을 수 있습니다. 새롭게 IaC를 시작하신다면, 처음부터 OpenTofu로 시작하는 것을 추천드립니다. 🙂

 

 

댓글 남기기