0Pricing
Azure Fundamentals · 강의

Bicep: 최신 Azure IaC

ARM JSON을 기반으로 하는 강력한 형식의 추상화인 Bicep의 간결한 구문을 학습하고, 기존 ARM 템플릿을 Bicep으로 변환한 뒤 Azure CLI로 배포합니다.

Bicep: 최신 Azure IaC은(는) CoddyKit의 무료 Azure Fundamentals 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Azure Fundamentals 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Azure Fundamentals 강의에는 총 4개의 강의가 포함되어 있습니다.

Bicep이란 무엇이며 왜 사용하는가

Bicep은 Microsoft가 ARM JSON 템플릿의 간결한 강력한 형식 대안으로 개발한 도메인별 언어(DSL)입니다. Bicep은 표준 ARM JSON으로 컴파일되므로 동일한 ARM 배포 엔진을 사용하며 첫날부터 모든 Azure 리소스 유형을 지원합니다. Bicep은 원시 JSON에 필요한 많은 반복 코드를 제거하고 더 나은 형식 안전성과 IntelliSense 지원을 제공합니다.

Bicep과 ARM JSON 구문 비교

ARM 템플릿에서 약 25줄의 JSON이 필요한 동일한 Storage 계정이 Bicep에서는 약 8줄만 필요합니다. Bicep은 '$schema', contentVersion, resources 배열 래퍼 및 장황한 표현식 구문을 제거합니다. Bicep은 ARM JSON 위에 구현된 직접적인 추상화 계층이므로 속성 이름과 유형은 동일하게 유지되며 런타임 차이는 전혀 없습니다.

// Bicep: deploy a storage account
param storageAccountName string
param location string = resourceGroup().location
param sku string = 'Standard_LRS'

resource storageAccount 'Microsoft.Storage/storageAccounts@2023-01-01' = {
  name: storageAccountName
  location: location
  sku: {
    name: sku
  }
  kind: 'StorageV2'
  properties: {
    supportsHttpsTrafficOnly: true
    minimumTlsVersion: 'TLS1_2'
  }
}

Bicep의 매개 변수와 데코레이터

Bicep 매개 변수는 간결한 param name type = defaultValue 구문을 사용합니다. 매개 변수 바로 위에 데코레이터(@로 시작)를 적용하여 @minLength(), @maxLength(), @allowed(), @description()과 같은 제약 조건을 추가할 수 있습니다. @secure() 데코레이터는 매개 변수를 민감한 값으로 표시하며, ARM JSON의 secureString과 같은 역할을 합니다.

@description('Globally unique name for the storage account')
@minLength(3)
@maxLength(24)
param storageAccountName string

@allowed(['Standard_LRS', 'Standard_GRS', 'Premium_LRS'])
param sku string = 'Standard_LRS'

@secure()
param adminPassword string

Bicep의 변수와 표현식

Bicep 변수는 var 키워드로 선언하며 문자열 보간을 포함한 모든 표현식을 담을 수 있습니다. 문자열 보간은 ARM JSON보다 가독성이 크게 향상된 기능 중 하나이며, 더 이상 concat() 함수 호출이 필요하지 않습니다. Bicep은 삼항 연산자 condition ? trueValue : falseValue를 사용한 조건식도 지원합니다.

param environment string = 'dev'
param baseName string = 'myapp'

var uniqueSuffix = uniqueString(resourceGroup().id)
var storageAccountName = '${baseName}${environment}${uniqueSuffix}'
var isProd = environment == 'prod'
var skuName = isProd ? 'Standard_GRS' : 'Standard_LRS'

리소스 선언과 기호 이름

Bicep에서는 각 리소스에 기호 이름이 부여됩니다. 기호 이름은 템플릿 안에서 해당 리소스를 참조하는 데 사용하는 식별자입니다. 기호 이름은 리소스의 Azure 이름과 다릅니다. 기호 이름을 사용하면 리소스 속성에 액세스하고 한 리소스를 다른 리소스 안에서 참조하여 암시적 종속성을 설정할 수 있으므로 명시적인 dependsOn 배열이 필요하지 않습니다.

resource vnet 'Microsoft.Network/virtualNetworks@2023-05-01' = {
  name: 'myVNet'
  location: location
  properties: {
    addressSpace: { addressPrefixes: ['10.0.0.0/16'] }
  }
}

// Implicit dependency via symbolic name reference
resource subnet 'Microsoft.Network/virtualNetworks/subnets@2023-05-01' = {
  parent: vnet  // Bicep knows to create vnet first
  name: 'mySubnet'
  properties: {
    addressPrefix: '10.0.1.0/24'
  }
}

Bicep의 출력 값

Bicep의 출력 값은 output 키워드 뒤에 출력 이름, 형식, 값을 지정하여 선언합니다. 기호 이름과 점 표기법을 사용하면 배포된 리소스의 속성을 참조할 수 있으며, 이는 ARM의 reference() 함수보다 훨씬 읽기 쉽습니다. 출력 값은 Bicep 모듈 호출 간에 값을 전달하는 데 필수적입니다.

output storageAccountName string = storageAccount.name
output blobEndpoint string = storageAccount.properties.primaryEndpoints.blob
output storageAccountId string = storageAccount.id

Bicep 모듈

Bicep 모듈은 ARM JSON의 연결된 템플릿에 해당하며, 인프라를 재사용 가능한 구성 요소로 나눌 수 있게 해 줍니다. 모듈은 단순히 다른 .bicep 파일입니다. module 키워드를 사용하여 모듈을 참조하고, 매개 변수를 전달하며, 모듈의 출력 값을 사용합니다. 팀 전체에서 재사용할 수 있도록 모듈을 Azure Container Registry에 게시하고 여기에서 가져올 수도 있습니다.

// main.bicep — consuming a storage module
module storage './modules/storage.bicep' = {
  name: 'storageDeploy'
  params: {
    storageAccountName: 'myuniquestorage'
    location: location
    sku: 'Standard_LRS'
  }
}

// Reference module output in parent template
output blobUri string = storage.outputs.blobEndpoint

ARM 템플릿을 Bicep으로 변환하기

기존 ARM JSON 템플릿이 있다면 Bicep CLI를 사용하여 bicep decompile 명령으로 Bicep으로 디컴파일할 수 있습니다. 결과를 일부 수동으로 정리해야 할 수도 있지만, 훌륭한 시작점이 됩니다. Microsoft는 aka.ms/bicepdemo에서 온라인 플레이그라운드도 제공하므로 ARM JSON을 붙여 넣고 이에 해당하는 Bicep을 실시간으로 확인할 수 있습니다.

# Install the Bicep CLI (or use it via Azure CLI)
az bicep install
az bicep upgrade

# Decompile existing ARM JSON to Bicep
az bicep decompile --file azuredeploy.json
# Produces azuredeploy.bicep in the same directory

# Compile Bicep to ARM JSON (for inspection)
az bicep build --file main.bicep

Azure CLI로 Bicep 배포하기

Azure CLI는 Bicep 파일을 직접 지원하므로 배포하기 전에 ARM JSON으로 수동 컴파일할 필요가 없습니다. --template-file 플래그와 함께 .bicep 파일 경로를 az deployment group create에 전달하면 CLI가 이를 자동으로 컴파일합니다. 동일한 validate 및 what-if 하위 명령을 ARM JSON과 마찬가지로 Bicep 파일에도 사용할 수 있습니다.

# Deploy a Bicep file directly
az deployment group create \
  --resource-group MyRG \
  --template-file main.bicep \
  --parameters storageAccountName=myprodstore environment=prod

# What-if preview with Bicep
az deployment group what-if \
  --resource-group MyRG \
  --template-file main.bicep \
  --parameters storageAccountName=myprodstore environment=prod

Bicep의 반복문과 조건문

Bicep은 for ... in 구문을 사용한 리소스 반복문을 지원하므로, 배열 매개 변수에서 여러 리소스 인스턴스를 만들 수 있으며 복사하여 붙여 넣는 중복 작업을 없앨 수 있습니다. if 키워드를 사용하면 조건부 리소스 배포가 가능합니다. 특정 조건이 참일 때만 리소스를 포함할 수 있습니다. 두 기능은 각각 ARM의 copy 및 condition 구문으로 컴파일됩니다.

// Loop: create multiple storage accounts
param storageNames array = ['alpha', 'beta', 'gamma']

resource stores 'Microsoft.Storage/storageAccounts@2023-01-01' = [for name in storageNames: {
  name: '${name}${uniqueString(resourceGroup().id)}'
  location: location
  sku: { name: 'Standard_LRS' }
  kind: 'StorageV2'
}]

// Condition: only deploy in prod
param deployKeyVault bool = false

resource kv 'Microsoft.KeyVault/vaults@2023-07-01' = if (deployKeyVault) {
  name: 'myKeyVault'
  location: location
  properties: { sku: { family: 'A', name: 'standard' }, tenantId: subscription().tenantId, accessPolicies: [] }
}

Bicep 도구 및 린팅

Visual Studio Code용 Bicep 확장은 입력하는 동안 풍부한 IntelliSense, 형식 검사, 인라인 오류 강조 표시를 제공합니다. Bicep CLI에는 사용하지 않는 매개 변수, 누락된 설명, 잘못된 API 버전과 같은 모범 사례 위반을 검사하는 린터가 포함되어 있습니다. 배포 전에 문제를 발견하려면 CI 파이프라인에서 az bicep lint --file main.bicep을 실행하십시오.

# Run the Bicep linter
az bicep lint --file main.bicep

# Format a Bicep file
az bicep format --file main.bicep

# Generate resource type documentation
az bicep generate-params --file main.bicep --output-format json

빠른 확인

이 강의에서 다룬 Microsoft Azure Fundamentals (AZ-900) 개념에 대한 이해도를 확인해 보십시오.

강의 요약

이 강의에서는 다음을 배웠습니다. Bicep은 ARM JSON 위에 구축된 간결한 강력한 형식의 추상화로, 표준 ARM 템플릿으로 컴파일됩니다. 모듈과 반복문을 사용하면 재사용 가능하고 DRY한 인프라 코드를 작성할 수 있으며, Azure CLI는 Bicep 파일을 직접 배포하고 동일한 validate/what-if/deploy 작업 흐름을 지원합니다. 다음으로 Azure에서 Terraform을 살펴보겠습니다.

자주 묻는 질문

“Bicep: 최신 Azure IaC” 강의는 무료인가요?

네 — “Bicep: 최신 Azure IaC” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Azure Fundamentals 강의 전체를 잠금 해제할 수 있습니다. Azure Fundamentals 강의에는 총 4개의 강의가 포함되어 있습니다.

“Bicep: 최신 Azure IaC”에서 뭘 배우나요?

ARM JSON을 기반으로 하는 강력한 형식의 추상화인 Bicep의 간결한 구문을 학습하고, 기존 ARM 템플릿을 Bicep으로 변환한 뒤 Azure CLI로 배포합니다. 브라우저에서 직접 실행하는 실습 코드로 Azure Fundamentals을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Azure Fundamentals을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Azure Fundamentals은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.

“Bicep: 최신 Azure IaC” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Azure Fundamentals 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Azure Fundamentals 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. Azure Resource Manager의 작동 방식
  2. ARM 템플릿 작성
  3. Bicep: 최신 Azure IaC
  4. Azure에서 Terraform 사용
← Azure Fundamentals(으)로 돌아가기