PHASE 4 예상 45분
무중단 배포 + Traffic Split¶
Phase 2 고통 1(배포 시 503)과 고통 3(점진 배포 불가)을 ACA로 해결합니다.
Phase 2와 비교¶
Phase 2에서 겪은 것
`docker compose -f docker-compose.yml -f docker-compose.v2.yml up -d` → 컨테이너 재생성 중 10초 503 발생 Phase 4에서 해결할 것
Revision 교체 → 다운타임 0초 / Traffic Split → v1:v2 = 80:20 Step 1. Multiple Revision 모드 활성화¶
Step 2. 현재 Revision 확인¶
터미널
az containerapp revision list \
--name hanbat-api \
--resource-group $RESOURCE_GROUP \
--output table
출력
Name Active TrafficWeight CreatedTime
------------------------ -------- --------------- -------------------
hanbat-api--abc123 True 100 2026-04-21T09:00:00
Step 3. 무중단 검증 시작¶
터미널을 하나 열어두고 모니터링을 시작합니다. 배포 전부터 실행해야 합니다.
터미널 (모니터링 — 배포 전 미리 실행)
# WEB_URL이 없으면 먼저 설정
WEB_URL=$(az containerapp show \
--name hanbat-web \
--resource-group $RESOURCE_GROUP \
--query "properties.configuration.ingress.fqdn" \
--output tsv)
while true; do
curl -s -o /dev/null \
-w "$(date '+%H:%M:%S') - %{http_code}\n" \
https://$WEB_URL
sleep 0.5
done | tee ~/phase4-no-downtime.log
이 파일이 평가 B-1 제출물
phase4-no-downtime.log 에 200이 끊기지 않고 출력되면 무중단 배포 증명 완료입니다.
Step 4. v2 Revision 배포¶
hanbat-api → 수정 버전 관리 → + 새 수정 버전 만들기
컨테이너 탭:
| 항목 | 값 |
|---|---|
| 이미지 및 태그 | <ACR_SERVER>/hanbat-order-api:v2.0.0 |
환경 변수 섹션:
| 이름 | 값 |
|---|---|
APP_VERSION | 2.0.0 |
→ 만들기
환경변수도 반드시 변경하세요
이미지만 v2.0.0으로 바꾸고 APP_VERSION을 그대로 두면 footer에 v1.0.0이 표시됩니다. 이미지와 환경변수를 함께 변경해야 합니다.
배포 후 로그를 확인하면 200이 끊기지 않습니다. v1이 계속 트래픽을 받고 있기 때문입니다.
모니터링 출력 (200 끊김 없음)
10:30:01 - 200
10:30:01 - 200
10:30:02 - 200 ← v2 배포 중에도 200 유지
10:30:02 - 200
10:30:03 - 200
Step 5. Traffic Split 80:20 설정¶
v2 Revision이 Running 상태가 되면 트래픽을 분배합니다.
터미널
# Revision 목록 다시 확인
az containerapp revision list \
--name hanbat-api \
--resource-group $RESOURCE_GROUP \
--output table
출력
Name Active TrafficWeight
------------------------ -------- ---------------
hanbat-api--0000001 True 100 ← v1
hanbat-api--v2 True 0 ← v2 (방금 배포)
리비전 이름 확인 필수
위 출력에서 v1/v2 리비전 이름을 확인한 뒤 아래 명령어에 직접 입력하세요. LatestRevision=True로만 지정하면 v1/v2 모두 v2로 인식되어 트래픽이 제대로 분산되지 않습니다.
Step 6. 버전 분산 확인¶
터미널
for i in {1..20}; do
curl -s "https://$WEB_URL/api/version" \
| grep -o '"version":"[^"]*"' || true
done | sort | uniq -c
Step 7. 100% v2 전환¶
검증 완료 후 v2로 전체 전환합니다.
Web 화면이 파란 테마(v1) → 초록 테마(v2)로 바뀌고, 배송 추적 기능이 추가됩니다.
✅ 완료 체크리스트
- [ ] Multiple Revision 모드 활성화 - [ ] v2(`skilleat/hanbat-order-api:v2.0.0`) 배포
- [ ] `phase4-no-downtime.log` — 200 끊김 없음 확인 (평가 B-1)
- [ ] Traffic Split 80:20 설정 캡처 (평가 B-3)
- [ ] 100% v2 전환 완료