Azure IaC 도구 실전 비교: Bicep vs Terraform vs ARM Template 선택 가이드



Infrastructure as Code Bicep Terraform 코드 자동화
Photo by James Harrison on Unsplash

Azure에 인프라를 배포하는 방법은 여러 가지입니다. Portal GUI, Azure CLI, ARM Template, Bicep, Terraform, Pulumi 등등. 운영 규모가 커지면 반드시 Infrastructure as Code(IaC)가 필요한데, 어떤 도구를 선택해야 할지가 늘 고민입니다. 이번 글에서는 실제 프로젝트에서 세 가지 주요 IaC 도구를 모두 사용해본 경험을 바탕으로 선택 기준을 정리합니다.

세 가지 도구 간략 소개

ARM Template

Azure의 원조 IaC 도구입니다. JSON 기반이며, 모든 Azure 리소스를 배포할 수 있습니다. 하지만 JSON 특성상 가독성이 떨어지고 반복 작업이 번거롭습니다.

Bicep

Microsoft가 ARM Template의 복잡함을 해결하기 위해 만든 도메인 특화 언어입니다. 내부적으로 ARM으로 컴파일되므로 ARM과 동일한 기능을 훨씬 간결한 문법으로 사용할 수 있습니다.

Terraform

HashiCorp가 만든 멀티 클라우드 IaC 도구입니다. AWS, GCP, Azure뿐 아니라 Kubernetes, GitHub, Datadog 등 수백 개 프로바이더를 지원합니다.

3가지 도구 비교

문법 가독성

  • ARM Template: JSON. 매우 장황하고 주석 불가
  • Bicep: Azure 네이티브 DSL. 간결하고 타입 안전
  • Terraform: HCL. 범용성 높고 가독성 우수

리소스 커버리지

  • ARM/Bicep: Azure 신규 기능 Day-0 지원
  • Terraform: 신규 기능 반영에 수 주~수 개월 지연

상태 관리

  • ARM/Bicep: Azure Resource Manager가 직접 관리. 별도 상태 파일 없음
  • Terraform: tfstate 파일 필요. 원격 저장소(Azure Storage, Terraform Cloud) 구성 필수

멀티 클라우드

  • ARM/Bicep: Azure 전용
  • Terraform: 멀티 클라우드, 하이브리드 환경 지원

학습 곡선

  • ARM Template: 가장 가파름 (JSON의 장황함)
  • Bicep: 중간 (Azure 경험자에게 직관적)
  • Terraform: 중간 (HCL 자체는 쉬우나 생태계 방대)

어떤 경우 어떤 도구를 선택할까

Bicep을 선택하는 경우

  • Azure 전용 환경 (99% Azure만 사용)
  • Microsoft 생태계(M365, Intune 등)와 강하게 통합
  • 최신 Azure 기능을 Day-0에 사용하고 싶은 경우
  • 상태 파일 관리 부담을 피하고 싶은 경우
  • 팀이 PowerShell/Azure CLI에 익숙한 경우

Terraform을 선택하는 경우

  • AWS, GCP 등 멀티 클라우드 환경
  • 온프레미스와 클라우드 혼합 관리
  • SaaS 플랫폼(GitHub, Datadog, PagerDuty)을 함께 관리
  • HashiCorp 생태계(Vault, Consul) 활용
  • 큰 오픈소스 커뮤니티와 모듈 재사용

ARM Template을 선택하는 경우

  • 이미 레거시로 ARM을 쓰고 있는 경우 (유지보수만)
  • 신규 프로젝트에는 권장하지 않음 → Bicep으로 전환 권장
DevOps IaC 자동화 코드 배포 파이프라인
Photo by Shahadat Rahman on Unsplash

실전에서 느낀 장단점

Bicep 실전 장점

  • Visual Studio Code 확장의 자동완성과 유효성 검사가 강력
  • Module 구조가 직관적
  • ARM과 100% 호환되므로 Microsoft 공식 예제를 바로 활용
  • What-If 명령으로 배포 전 변경사항 미리보기 가능

Bicep 실전 단점

  • Azure 외 리소스는 관리 불가
  • 커뮤니티 모듈이 Terraform보다 적음
  • 대규모 환경의 상태 추적은 ARM 배포 이력에 의존 (가시성 부족)

Terraform 실전 장점

  • 멀티 클라우드 관리에 최강
  • Terraform Registry의 방대한 모듈
  • plan/apply 워크플로우가 안정적이고 예측 가능
  • CI/CD 파이프라인과 자연스러운 통합

Terraform 실전 단점

  • tfstate 파일 관리가 번거롭고 충돌 위험
  • Provider 버전 업그레이드 시 breaking change 빈번
  • Azure 신규 기능은 AzureRM Provider 업데이트까지 대기 필요
  • State Lock 문제 디버깅이 어려움

실무에서 추천하는 선택 전략

한국 금융·공공 프로젝트

Bicep 권장. 이유는 다음과 같습니다.

  • 대부분 Azure 단일 클라우드 정책
  • 감독 규제 대응 시 Microsoft 공식 지원 중요
  • 내부 운영팀이 PowerShell·Azure CLI에 익숙

스타트업·SaaS 기업

Terraform 권장. 이유는 다음과 같습니다.

  • 멀티 클라우드 가능성 열어 둠
  • GitHub, Datadog 등 외부 도구를 IaC에 통합
  • 개발자 친화적 생태계

하이브리드 환경

Terraform 필수. ARM/Bicep은 Azure 외부를 관리할 수 없습니다.

두 도구를 함께 쓰는 것도 가능

실제로 한 조직이 반드시 하나만 써야 하는 것은 아닙니다. Azure 핵심 인프라는 Bicep으로, SaaS 서비스와 멀티 클라우드 부분은 Terraform으로 관리하는 하이브리드 전략도 유효합니다. 다만 팀 내 표준을 명확히 정하지 않으면 혼란이 커질 수 있습니다.

CI/CD 파이프라인 통합

Bicep + GitHub Actions

  • azure/login 액션으로 Service Principal 인증
  • azure/arm-deploy 액션으로 Bicep 배포
  • What-If 미리보기 단계로 Pull Request에 영향도 코멘트

Terraform + Azure DevOps

  • Terraform 전용 Extension 설치
  • terraform init, plan, apply 3단계 파이프라인
  • Service Connection으로 Azure 인증
  • plan 결과를 PR에 자동 코멘트

IaC 도입 시 조직적 고려사항

  • 코드 리뷰 문화: 인프라 변경도 PR 기반으로 리뷰
  • 모듈화: 반복되는 패턴은 재사용 가능한 모듈로 분리
  • 상태 관리: Terraform tfstate를 Azure Storage에 저장 + Lock 설정
  • Secrets 관리: Azure Key Vault 또는 HashiCorp Vault 연동, 코드에 하드코딩 금지
  • Drift 감지: 주기적으로 실제 상태와 코드 비교 (Azure Resource Graph 활용)

마무리

IaC 도구 선택은 기술적 비교만으로 결정할 수 없습니다. 팀 역량, 조직 문화, 클라우드 전략, 규제 환경을 모두 고려해야 합니다. 순수 Azure 환경이라면 Bicep, 멀티 클라우드라면 Terraform이 좋은 기본 선택입니다. 어떤 도구를 고르든 가장 중요한 것은 일관성 있게 코드로 관리하는 문화를 정착시키는 것입니다.

댓글 남기기