0Pricing
Azure Fundamentals · 강의

배포 슬롯 및 교체

블루-그린 배포를 위한 스테이징 슬롯을 만들고, 스테이징 슬롯에서 새 릴리스를 준비한 뒤 가동 중지 시간 없이 프로덕션으로 교체합니다.

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

배포 슬롯이란?

배포 슬롯은 App Service 웹 앱을 위한 실행 중인 별도의 환경이며, 각 슬롯에는 고유한 호스트 이름(예: myapp-staging.azurewebsites.net)이 있습니다. 슬롯은 Production 슬롯과 동일한 App Service 플랜 및 리소스를 공유하지만 독립적으로 실행됩니다. 이를 통해 블루-그린 배포를 수행할 수 있습니다. Staging 슬롯에서 새 릴리스를 검증한 다음 가동 중지 시간 없이 Production으로 교체할 수 있습니다. 슬롯은 Standard 계층 이상에서 사용할 수 있습니다.

배포 슬롯 만들기

Azure Portal 또는 CLI를 사용하여 웹 앱에 새 배포 슬롯을 추가할 수 있습니다. 각 슬롯에는 고유한 URL, 애플리케이션 설정, 연결 문자열이 제공됩니다. Standard에서는 최대 5개 슬롯을, Premium 계층에서는 최대 20개 슬롯을 만들 수 있습니다. 일반적인 슬롯 이름으로는 staging, canary, hotfix, integration이 있으며, 이는 릴리스 파이프라인의 서로 다른 단계를 나타냅니다.

# Create a staging deployment slot
az webapp deployment slot create \
  --name MyUniqueWebApp \
  --resource-group MyRG \
  --slot staging

# Deploy code to the staging slot
az webapp deploy \
  --name MyUniqueWebApp \
  --resource-group MyRG \
  --slot staging \
  --src-path app.zip

# The staging slot is live at:
# https://MyUniqueWebApp-staging.azurewebsites.net

Staging 슬롯 준비

교체하기 전에 새 버전이 완전히 초기화되도록 Staging 슬롯을 준비하는 것이 중요합니다. App Service 인스턴스가 초기 상태이면 런타임이 초기화되는 동안 첫 요청을 느리게 처리하므로 Production 환경에서는 허용하기 어렵습니다. Auto Swap을 사용하도록 설정하거나 Staging 슬롯에 준비용 HTTP 요청을 수동으로 보낼 수 있습니다. App Service는 applicationInitialization 구성도 지원합니다. 이 구성으로 준비 경로를 정의하면 해당 경로가 200을 반환해야 슬롯이 준비된 것으로 간주됩니다.

# web.config snippet for warm-up (IIS/Windows)
# <system.webServer>
#   <applicationInitialization>
#     <add initializationPage='/health' hostName='MyUniqueWebApp-staging.azurewebsites.net'/>
#   </applicationInitialization>
# </system.webServer>

# Or use a startup probe via the App Service health check
az webapp config set \
  --name MyUniqueWebApp \
  --resource-group MyRG \
  --slot staging \
  --generic-configurations '{"healthCheckPath": "/health"}'

슬롯 교체

교체는 Staging 슬롯과 Production 슬롯을 원자적으로 맞바꾸는 작업입니다. 교체하는 동안 App Service는 먼저 새 코드가 실행 중인 Staging 인스턴스로 트래픽을 라우팅하고, 해당 인스턴스가 초기화될 때까지 기다립니다. 그런 다음 모든 Production 트래픽을 새 인스턴스로 다시 라우팅하며, 기존 Production 인스턴스는 새로운 Staging 슬롯이 됩니다. 따라서 되돌리기도 간단합니다. 다시 교체하기만 하면 됩니다.

# Swap staging into production
az webapp deployment slot swap \
  --name MyUniqueWebApp \
  --resource-group MyRG \
  --slot staging \
  --target-slot production

# Rollback: swap production back to staging
az webapp deployment slot swap \
  --name MyUniqueWebApp \
  --resource-group MyRG \
  --slot production \
  --target-slot staging

슬롯 고정 설정과 비고정 설정

애플리케이션 설정은 고정(슬롯별 설정) 또는 비고정(교체 가능)으로 표시할 수 있습니다. 비고정 설정은 교체할 때 배포 슬롯과 함께 이동하므로 Staging 데이터베이스 연결 문자열이 코드와 함께 Production으로 이동합니다. 고정 설정은 교체와 관계없이 슬롯에 남으므로 Production에는 항상 Production 데이터베이스 연결 문자열이 유지됩니다. '배포 슬롯 설정' 확인란 또는 CLI를 사용하여 설정을 고정으로 표시하십시오.

# Mark a setting as sticky (slot-specific) -- it won't swap
az webapp config appsettings set \
  --name MyUniqueWebApp \
  --resource-group MyRG \
  --slot staging \
  --slot-settings DATABASE_URL='postgresql://staging-db/...'

# Set a non-sticky setting (it WILL travel with a swap)
az webapp config appsettings set \
  --name MyUniqueWebApp \
  --resource-group MyRG \
  --slot staging \
  --settings FEATURE_FLAG_NEW_UI=true

Canary 릴리스를 위한 트래픽 분할

App Service는 트래픽 분할을 지원합니다. 전체 교체를 수행하지 않고 Production 트래픽의 일정 비율을 비Production 슬롯으로 라우팅하는 기능입니다. 이를 통해 Canary 릴리스를 수행하고 새 릴리스에 대한 확신이 높아짐에 따라 트래픽을 5%, 10%, 50%로 점진적으로 전환하면서 각 단계의 오류율을 모니터링할 수 있습니다. Canary 슬롯으로 이동한 사용자에게는 고정 쿠키가 제공되어 세션의 일관성을 위해 동일한 버전을 계속 사용하게 됩니다.

# Route 10% of traffic to the staging slot (canary)
az webapp traffic-routing set \
  --name MyUniqueWebApp \
  --resource-group MyRG \
  --distribution staging=10

# View current traffic distribution
az webapp traffic-routing show \
  --name MyUniqueWebApp \
  --resource-group MyRG

# Reset all traffic to production
az webapp traffic-routing clear \
  --name MyUniqueWebApp \
  --resource-group MyRG

Auto Swap

Auto Swap은 새 코드가 Staging 슬롯에 배포될 때마다 해당 슬롯을 자동으로 Production으로 교체합니다. 모든 성공적인 배포를 즉시 운영 환경에 반영하려는 CI/CD 파이프라인에 적합합니다. Auto Swap은 교체를 완료하기 전에 Staging 슬롯의 HTTP 요청이 200을 반환할 때까지 기다립니다. Portal 또는 CLI에서 슬롯별로 사용하도록 설정할 수 있지만, 배포와 Production 반영 사이에 수동 승인 단계가 없으므로 신중하게 사용하십시오.

# Enable Auto Swap for the staging slot
az webapp deployment slot auto-swap \
  --name MyUniqueWebApp \
  --resource-group MyRG \
  --slot staging \
  --auto-swap-slot production

# Disable Auto Swap
az webapp deployment slot auto-swap \
  --name MyUniqueWebApp \
  --resource-group MyRG \
  --slot staging \
  --disable

배포 슬롯 모범 사례

배포 슬롯에는 다음 모범 사례를 따르십시오. Production으로 교체하기 전에 항상 Staging에서 검증하고, Production 데이터베이스 연결을 Staging과 분리하려면 고정 설정을 사용하십시오. 배포 후 Staging 슬롯 URL을 대상으로 스모크 테스트를 실행하고, 새 버전에 문제가 있으면 App Service가 교체를 완료하지 않도록 상태 확인 경로를 구성하십시오. 또한 배포에 태그를 지정하여 각 슬롯에서 어떤 커밋이 실행 중인지 추적할 수 있게 하십시오.

CI/CD 파이프라인의 슬롯

일반적인 CI/CD 파이프라인에서는 빌드 단계가 코드를 컴파일하고 테스트하며, 배포 단계가 아티팩트를 Staging 슬롯으로 푸시합니다. 그런 다음 통합 테스트 단계가 Staging URL을 대상으로 자동화된 테스트를 실행하고, 교체 단계가 Staging을 Production으로 교체합니다. 필요하면 수동 승인을 거치도록 설정할 수도 있습니다. 이 패턴은 App Service 배포 작업을 사용하는 Azure 파이프라인과 GitHub Actions에서 모두 기본적으로 지원됩니다.

# GitHub Actions step: deploy to staging slot
# - name: Deploy to Staging Slot
#   uses: azure/webapps-deploy@v2
#   with:
#     app-name: MyUniqueWebApp
#     slot-name: staging
#     publish-profile: ${{ secrets.AZURE_STAGING_PUBLISH_PROFILE }}
#
# - name: Swap to Production
#   uses: azure/CLI@v1
#   with:
#     inlineScript: |
#       az webapp deployment slot swap \
#         --name MyUniqueWebApp \
#         --resource-group MyRG \
#         --slot staging

교체 상태 모니터링

슬롯을 교체하는 동안과 교체한 후에는 Azure Monitor에서 주요 메트릭을 모니터링하여 새 버전이 정상인지 확인하십시오. HTTP 5xx 오류, 평균 응답 시간, CPU/메모리 사용률이 급증하는지 살펴보십시오. 오류율이 임계값을 초과하면 발생하는 메트릭 경고를 설정하면 신속하게 다시 교체해야 한다는 신호를 받을 수 있습니다. Application Insights의 스마트 감지는 배포 후 이상 현상을 자동으로 알려 줄 수 있습니다.

# Create an alert rule for HTTP 5xx errors post-swap
az monitor metrics alert create \
  --name 'HighErrorRate' \
  --resource-group MyRG \
  --scopes '/subscriptions/.../providers/Microsoft.Web/sites/MyUniqueWebApp' \
  --condition 'avg Http5xx > 10' \
  --window-size 5m \
  --evaluation-frequency 1m \
  --action-group MyActionGroup

슬롯과 여러 앱 비교

Staging과 Production을 위해 완전히 별도의 App Service 앱을 유지하는 것보다 배포 슬롯을 사용하는 편이 좋습니다. 슬롯은 동일한 플랜을 공유하므로 추가 비용이 없고, 한 번의 클릭으로 되돌리기를 포함한 교체를 수행할 수 있으며, 트래픽 분할을 지원하고, 동일한 App Service 리소스에서 관리됩니다. Staging에 근본적으로 다른 플랜 SKU, 격리 요구 사항 또는 완전히 별도의 과금이 필요한 경우에만 별도의 앱을 사용하십시오.

빠른 확인

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

Lesson 요약

이 lesson에서는 다음을 배웠습니다. 배포 슬롯은 격리된 환경을 제공하여 블루-그린 배포를 가능하게 하고, 슬롯 고정 설정은 데이터베이스 URL과 같은 환경별 구성을 코드가 아니라 슬롯에 연결된 상태로 유지합니다. 또한 트래픽 분할을 사용하면 Production 트래픽의 일정 비율을 새 버전으로 라우팅하여 Canary 릴리스를 수행할 수 있습니다. 다음에는 자동 크기 조정과 사용자 지정 도메인을 살펴보겠습니다.

자주 묻는 질문

“배포 슬롯 및 교체” 강의는 무료인가요?

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

“배포 슬롯 및 교체”에서 뭘 배우나요?

블루-그린 배포를 위한 스테이징 슬롯을 만들고, 스테이징 슬롯에서 새 릴리스를 준비한 뒤 가동 중지 시간 없이 프로덕션으로 교체합니다. 브라우저에서 직접 실행하는 실습 코드로 Azure Fundamentals을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

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

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

“배포 슬롯 및 교체” 강의는 얼마나 걸리나요?

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

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

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

이 강의의 모든 강의

  1. App Service 계획 및 웹 앱 만들기
  2. 배포 슬롯 및 교체
  3. 자동 크기 조정 및 사용자 지정 도메인
  4. App Service 인증 및 네트워킹
← Azure Fundamentals(으)로 돌아가기