PHASE 2 예상 20분
고통 1: 배포 지옥¶
시나리오¶
개발팀에서 연락이 왔습니다. "주문 조회 v2 나왔어요! 배송 추적 기능 추가됐습니다. 지금 배포해주세요."
지금 시각은 오후 12시 30분 — 점심 피크 타임입니다.
Step 1. 브라우저로 현재 서비스 확인¶
배포 스크립트를 실행하기 전에 브라우저로 서비스가 정상 동작하는지 확인합니다.
주문 조회 화면이 정상적으로 열리면 준비 완료입니다.
Step 2. 배포 스크립트 실행 + 브라우저 새로고침¶
터미널에서 배포 스크립트를 실행하고, 즉시 브라우저로 전환해 F5를 반복해서 누릅니다.
핵심: 스크립트 실행과 동시에 브라우저를 새로고침하세요
스크립트를 Enter로 실행한 직후, 브라우저 창으로 전환해 F5(새로고침)를 빠르게 반복합니다. 배포 중 약 2~3초간 서비스가 중단되므로 그 순간을 직접 목격할 수 있습니다.
배포 중 브라우저에서 이런 화면이 나타납니다:
이것이 실제 사용자가 보는 화면입니다.
Step 3. 터미널 출력 확인¶
스크립트가 자동으로 v2를 배포하면서 HTTP 상태를 모니터링합니다.
======================================================
고통 체험 1: 배포 지옥
======================================================
[ 1단계 ] 현재 v1 서버 상태 확인
{"version": "1.0.0", "theme": "blue", ...}
[ 2단계 ] 백그라운드에서 HTTP 상태 모니터링 시작 (20초간)
→ 배포 중 에러가 발생하면 여기서 확인됩니다
01:45:04 [OK ] HTTP 200
01:45:05 [OK ] HTTP 200
[ 3단계 ] v2 배포 시작 (docker compose recreate)
→ 이 시점부터 서비스가 일시 중단됩니다
01:45:09 [OK ] HTTP 200
Container hanbat-order-app-api-1 Recreate
01:45:10 [!!!] HTTP 000ERR ← 서비스 중단 발생!
Container hanbat-order-app-api-1 Recreated
Container hanbat-order-app-web-1 Recreate
Container hanbat-order-app-web-1 Recreated
01:45:11 [!!!] HTTP 000ERR ← 서비스 중단 발생!
Container hanbat-order-app-api-1 Started
Container hanbat-order-app-web-1 Started
01:45:11 [!!!] HTTP 000ERR ← 서비스 중단 발생!
01:45:12 [OK ] HTTP 200 ← 복구
01:45:13 [OK ] HTTP 200
왜 다운타임이 발생하나?¶
스크립트 결과 분석의 '502/503' 표현에 대해
스크립트 마지막에 "502 / 503 / ERR 발생을 확인했을 것입니다"라고 나오지만, 실제로는 000ERR만 발생합니다. 000ERR은 HTTP 응답 자체가 없다는 의미 — 즉 서버가 응답하기 전에 연결이 끊긴 것입니다. 503보다 더 심각한 상태입니다.
000ERR은 HTTP 응답 자체가 없다는 뜻입니다 — 연결 자체가 거부됩니다.
| 단계 | 설명 |
|---|---|
| 컨테이너 Recreate | 기존 컨테이너를 내리고 새 컨테이너를 올림 |
| 포트 바인딩 공백 | 내리는 순간부터 새 컨테이너가 포트를 열기 전까지 연결 불가 |
| 복구 | 새 컨테이너가 시작되면 즉시 200 응답 |
ACA에서는 어떻게 해결될까?¶
Phase 4 예고: Revision 기반 무중단 배포
ACA는 v1 컨테이너가 트래픽을 받는 상태에서 v2를 새 Revision으로 준비합니다. v2의 Health Probe가 통과된 순간에만 트래픽이 전환되므로 다운타임 = 0초.