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으로 전환 권장
실전에서 느낀 장단점
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이 좋은 기본 선택입니다. 어떤 도구를 고르든 가장 중요한 것은 일관성 있게 코드로 관리하는 문화를 정착시키는 것입니다.