14. 배포 프로세스 체크리스트
0. 먼저 알고 가기 (30초 요약)
- 배포는 “준비-승인-실행-확인-복구” 순서에서만 움직입니다.
- 카나리아/점진 배포로 리스크를 쪼개고 문제를 조기에 잡으세요.
- 체크리스트를 누락 없이 통과해야만 다음 단계로 넘어가는 구조로 만드세요.
초심자용 한눈에 보기
배포는 준비-검증-승인-출시-회복(롤백)의 순서가 핵심입니다.
일상 비유: 우편 배달과 같습니다. 분류(빌드/검증) -> 차량 적재(아티팩트) -> 일부 지역 시범 배달(canary) -> 전 지역 배달(릴리스) -> 반송 처리(롤백) 순서가 흔들리면 잘못된 우편이 모든 집에 한꺼번에 도착합니다.
핵심 용어 빠르게 정리
| 용어 | 쉬운 뜻 |
|---|---|
릴리스 |
사용자에게 배포되는 정식 버전 공개 |
카나리 배포 |
일부 사용자에게 먼저 내보내 위험을 줄이는 배포 |
피처 플래그 |
기능을 조건부로 켜고 끄는 스위치 |
롤백 |
문제 발견 시 이전 버전으로 되돌리는 동작 |
확인 지표 |
배포 후 오류율/지연/로그를 확인하는 지표 |
deploy |
코드/아티팩트를 환경에 올리는 동작 |
release |
그 코드가 실제 사용자에게 노출되는 시점 |
deploy와 release 분리 한눈에 보기
왜 중요한가: deploy와 release를 같이 두면 "노출 직후 발견된 결함" 때문에 전체 롤백이 강제됩니다. 분리하면 코드는 그대로 두고 노출만 끌 수 있습니다.
flowchart LR
subgraph DEPLOY["Deploy (배포)"]
D1["artifact 환경에 올림"]
D2["검증/smoke 통과"]
end
subgraph RELEASE["Release (노출)"]
R1["feature flag ON"]
R2["canary 확대"]
R3["전체 사용자 공개"]
end
DEPLOY --> RELEASE
R3 -. 문제 발생 .-> Kill["flag OFF\n(코드 재배포 불필요)"]
| 분류 | 배포 & 운영 | 상태 | Stable |
|---|---|---|---|
| 연관 가이드 | 08. 성능, 09. 장애 대응, 11. CI/CD, 12. CDN 캐시, 27. 다중 개발 서버 | 도구 원칙 | 벤더 중립 |
| 핵심 테마 | deploy/release 분리, progressive delivery, rollback, feature flag, post-deploy monitoring | Update | 최신 기준 |
배포는 파일을 서버에 올리는 작업이 아니라 검증된 artifact를 안전하게 사용자에게 노출하고, 문제가 생기면 빠르게 되돌리는 운영 절차입니다.
추천 항목 (실무 우선순위)
- 시작 추천: release 전 5단계 체크(빌드, 테스트, 보안, 모니터링, 롤백 준비)를 정형화하세요.
- 안정 추천: 카나리아는 기능 단위로 좁게 시작해 이슈 전파 범위를 제한하세요.
- 운영 추천: 각 배포에 대한 승인 근거와 롤백 근거를 템플릿으로 남깁니다.
추천 항목 고도화 체크
-
첫 적용— canary, flag, rollback artifact, release health 중 하나를 실제 PR이나 운영 이슈에 붙이고, 변경 전 기준을 먼저 적는다. -
증거 정리— release note, deployment log, rollback artifact, health dashboard를 같은 작업 기록에 남긴다. -
재점검— rollback 시간, canary error rate, release failure 수가 나아졌는지 30일 안에 확인하고 기준을 유지, 수정, 폐기 중 하나로 판정한다.
추천 항목 실행 기록 템플릿
-
작업: canary, flag, rollback artifact, release health 적용 범위를 어느 화면, 패키지, 문서에 둘지 적는다. -
증거: release note, deployment log, rollback artifact, health dashboard 중 실제로 남긴 항목만 링크한다. 판정: 유지/수정/폐기 중 하나와 이유를 한 문장으로 남긴다.-
다음 점검: rollback 시간, canary error rate, release failure 수를 다시 볼 날짜와 담당자를 지정한다.
문서 책임 범위
| 이 문서가 결정하는 것 | 단일 출처로 따르는 문서 |
|---|---|
| deploy/release 분리, canary, rollback, post-deploy monitoring | 11. CI/CD, 09. 관측성 |
| artifact, cache purge, CDN entry 전환과 release 증적 | 12. CDN 캐시, 10. 인프라 |
| preview/staging/production 환경 승격과 URL 기반 smoke | 27. 다중 개발 서버 |
| 접근성/성능/보안 release gate | 19. 웹 접근성, 08. 성능, 06. 보안 |
| 고위험 변경의 승인/철회 기준 | 15. 의사결정 |
0. 모든 프론트엔드 그룹 공통 Baseline
| 영역 | 공통 기준 | 증적 |
|---|---|---|
| Deploy != Release | 코드 배포와 사용자 노출을 분리 | feature flag, canary 설정 |
| Preflight | type/test/build/security/perf/accessibility gate 통과 | CI report |
| Artifact | 검증된 immutable artifact만 승격 | checksum, release id |
| Canary | 일부 환경/사용자/트래픽에서 먼저 확인 | release health |
| Rollback | rollback, flag off, cache purge 경로를 사전 검증 | rollback runbook |
| Monitoring | 배포 후 error, latency, Core Web Vitals, conversion smoke 확인 | dashboard |
| Communication | 배포 owner, 승인자, 변경 요약, 영향 범위 공유 | release note |
0.0 배포 실행 경로
flowchart TD
A["배포 대상 변경사항 정리"] --> B["Preflight 체크"]
B --> C{"Preflight 통과"}
C -->|미통과| D["수정 후 Recheck"]
C -->|통과| E["deploy/release 분리 확인"]
E --> F["Canary / Flag 전략 선택"]
F --> G["실사용 모니터링"]
G --> H{"이상 징후"}
H -->|있음| I["중단 + 완화"]
H -->|없음| J["release handoff"]
I --> D
J --> K["모니터링 위임 + runbook 종료"]
0.1 교차 검증 매트릭스
| 권고 | 1차 출처 | 실행 증거 | 운영 증거 | 철회 조건 |
|---|---|---|---|---|
| Deploy/Release 분리 | Progressive delivery 운영 원칙 | flag/canary smoke | release health, rollback rate | flag debt가 누적되면 cleanup gate |
| Rollback readiness | incident/runbook 표준 | rollback drill, artifact restore | MTTR, failed rollback count | rollback 불가 변경은 RFC 필요 |
| Post-deploy monitoring | Core Web Vitals/관측성 기준 | synthetic smoke, dashboard link | error p95, RUM p75 | 회귀 감지 시 자동 확대 중단 |
0.2 운영 게이트
| Gate | Evidence | Owner | Rollback |
|---|---|---|---|
| Preflight | type/test/build/security/perf/accessibility report | Release owner | 배포 보류와 수정 PR 요구 |
| Canary 확대 | release health, error rate, Core Web Vitals | On-call owner | 확대 중단, flag off, artifact rollback |
| Rollback readiness | rollback drill, artifact restore, cache purge 증적 | Tech lead | 이전 artifact와 entry 문서 복구 |
| Handoff | release note, dashboard, monitoring owner | Release owner | monitoring window 연장 |
0.3 배포 의사결정 지도
배포는 기능 공개 시점과 rollback 비용을 동시에 고려해야 합니다.
배포 단계 책임 맵
빌드 오너 => artifact + checksum 책임
릴리즈 오너 => canary/rollback 판단
관측성 => 모니터링 지표와 dashboard 유지
커뮤니케이션 => 사용자 공지/상태 공유
flowchart TD
A["변경이 사용자 노출되는가?"] -->|아니오| B["데모/PR 경로"]
A -->|예| C["deploy/release 분리 점검"]
C --> D["preflight gate 통과 여부"]
D -->|미통과| E["롤백/수정 후 게이트 재실행"]
D -->|통과| F["점진 노출 전략 선택\ncanary / flag / blue-green"]
F --> G["post-deploy 모니터링"]
G --> H{"이상 징후?"}
H -->|yes| I["중단 + 완화 + 재평가"]
H -->|no| J["release handoff"]
flowchart TD A2["빌드 오너"] --> B2["artifact/checksum 책임"] C2["릴리즈 오너"] --> D2["canary/rollback 판단"] E2["관측성"] --> F2["지표 + dashboard 유지"] G2["커뮤니케이션"] --> H2["사용자 공지/상태 공유"]
1. 배포 전 체크리스트
| 항목 | 기준 |
|---|---|
| 변경 범위 | 사용자 영향 화면, API, 데이터, 캐시, 권한 변경을 요약 |
| 위험도 | P0/P1 가능성, rollback 난이도, 피크 시간 영향 평가 |
| 테스트 | 핵심 flow E2E, 변경 영역 regression, 브라우저 smoke 통과 |
| 성능 | bundle budget, Core Web Vitals 예산, 이미지/font 변경 확인 |
| 접근성 | 키보드 이동, focus, aria, contrast 변경 확인 |
| 보안 | secret, auth, CSP, dependency, supply-chain 검사 |
| 운영 | 알림, dashboard, feature flag, rollback owner 확인 |
2. 배포 전략 선택
일상 비유: 새 다리를 개통할 때 통행을 일부 차량에만 먼저 허용(canary)할지, 옆에 새 다리를 짓고 한번에 통행을 옮길지(blue/green)는 사고 시 우회 비용이 결정합니다.
| 전략 | 적합한 경우 | 주의점 |
|---|---|---|
| Blue/Green | 빠른 전체 전환과 즉시 rollback 필요 | 두 환경의 설정 drift 관리 |
| Canary | 사용자 영향이 큰 기능을 점진 노출 | 지표와 자동 중단 조건 필요 |
| Feature flag | 기능 release를 배포 이후 통제 | 오래된 flag 정리 필요 |
| Release train | 여러 팀 변경을 정해진 창에 묶음 | 긴급 hotfix 경로 별도 필요 |
| Manual approval | 규제/고위험 변경 | 승인 증적과 책임 명확화 |
전략은 조직 문화가 아니라 변경 위험과 복구 가능성에 따라 고릅니다.
2.0 blue/green 전환 흐름
이 그림은 blue 환경에서 green 환경으로 트래픽을 전환하면서 문제가 생기면 즉시 되돌리는 흐름을 보여줍니다.
일상 비유: 호텔이 새 객실 동(green)을 짓고 손님을 받기 전 청소·점검을 마친 뒤 단 한 번의 키 발급 시스템 변경(라우터 스위치)으로 손님을 옮기는 방식입니다. 문제가 생기면 키를 다시 옛 객실 동(blue)으로 돌려주면 됩니다.
flowchart LR
subgraph BLUE["Blue (현재 운영)"]
B1[기존 artifact v1]
B2[100% 트래픽]
end
subgraph GREEN["Green (새 release)"]
G1[새 artifact v2]
G2[0% 트래픽]
end
R[Router/CDN] --> B2
G1 -. warm-up + smoke .-> S1[smoke 통과]
S1 --> Cut{스위치 전환}
Cut -->|성공| R2[Router 100% Green]
Cut -->|이상 감지| Back[즉시 Blue 복귀]
R2 --> Hold[Blue 환경 유지\n롤백 대기 창]
Hold --> Drain[일정 시간 후 Blue 폐기]
2.1 canary 점진 롤아웃 단계
왜 중요한가: 한 번에 100%를 노출하면 문제 영향 범위가 즉시 전체로 퍼집니다. 단계별 확대는 "조기 발견 + 작은 폭발 반경"을 만듭니다.
flowchart LR S0["0%\n내부 dogfood"] --> S1["1%\n초기 신호 관측"] S1 --> S5["5%\n오류율/지표 확인"] S5 --> S25["25%\nCWV/전환율 확인"] S25 --> S50["50%\n장시간 안정성"] S50 --> S100["100%\nrelease note + handoff"] S1 -.->|회귀 감지| Halt["확대 중단\nflag off 또는 rollback"] S5 -.->|회귀 감지| Halt S25 -.->|회귀 감지| Halt S50 -.->|회귀 감지| Halt
3. 배포 중 확인
| 시점 | 확인 항목 |
|---|---|
| 시작 | release id, artifact checksum, target environment |
| 배포 직후 | HTML/asset 버전 일치, CDN cache header, health endpoint |
| canary | 신규 오류, API 실패율, LCP/INP/CLS, blank screen |
| 확대 | segment별 지표, 브라우저별 오류, 주요 전환 |
| 완료 | rollback window 유지, release note, monitoring owner handoff |
배포 중 이상 징후가 있으면 "원인 분석을 끝낼 때까지 확대 중단"이 기본입니다.
4. 롤백 기준
일상 비유: 비행기 조종사의 "go-around" 결정과 비슷합니다. 무리하게 착륙을 강행하기보다 다시 상승해 안전을 확보하는 것이 훈련된 절차입니다. 롤백은 실패가 아니라 설계된 비상 경로입니다.
| 조건 | 조치 |
|---|---|
| 핵심 flow 실패 | 즉시 rollback 또는 flag off |
| 신규 JS error 급증 | canary 중단, 영향 release rollback |
| Core Web Vitals 급락 | 확대 중단, 원인 확인 |
| 잘못된 HTML/asset 조합 | entry 문서 rollback + cache 재검증 |
| 보안/개인정보 노출 | 즉시 노출 차단, purge, incident open |
롤백은 실패가 아니라 준비된 복구 절차입니다. rollback을 어렵게 만드는 schema/cache/auth 변경은 배포 전에 별도 RFC가 필요합니다.
4.1 롤백 의사결정 트리
왜 중요한가: 장애 중에 의사결정 기준이 머릿속에만 있으면 사람마다 판단이 달라집니다. 분기를 미리 정해두면 30분 내에 일관된 결정을 내릴 수 있습니다.
flowchart TD
Detect[이상 징후 감지] --> Sev{심각도}
Sev -->|보안/PII 노출| Sec[즉시 노출 차단 + purge + incident]
Sev -->|핵심 flow 차단| Crit[flag off 시도]
Sev -->|지표 회귀\nCWV/오류율| Warn[canary 확대 중단]
Crit --> Q1{flag off로 복구되는가}
Q1 -->|예| Stab[안정화 후 원인 분석]
Q1 -->|아니오| RB[artifact rollback]
RB --> Q2{HTML/asset mismatch}
Q2 -->|예| Entry[entry 문서 rollback + cache 재검증]
Q2 -->|아니오| Prev[이전 release로 복귀]
Warn --> Inv{원인 식별 가능한가}
Inv -->|예| Fix[hotfix 또는 점진 rollback]
Inv -->|아니오| Pause[확대 정지 + 모니터링]
Sec --> Post[postmortem + 재발 방지 액션]
Stab --> Post
Entry --> Post
Prev --> Post
Fix --> Post
4.2 롤백 실행 시퀀스
비유: 응급실에서 의사가 환자에게 처치할 때 "절차서대로" 움직이는 것과 같습니다. 누가 무엇을 언제 하는지를 평소에 정해두지 않으면 실제 상황에서 늦습니다.
sequenceDiagram
participant Owner as On-call/Release Owner
participant Flag as Feature Flag
participant CDN as CDN
participant CI as Deploy CI
participant Mon as Monitoring
Owner->>Flag: 우선 flag off 시도
Flag-->>Owner: 영향 범위 축소
alt flag로 회복되지 않음
Owner->>CI: 이전 artifact rollback 트리거
CI->>CDN: entry HTML/manifest 복구
CI-->>Owner: rollback 완료 이벤트
Owner->>CDN: 변경 경로 purge
end
Owner->>Mon: 지표 회복 확인
Mon-->>Owner: error/latency/CWV 정상
Owner->>Owner: postmortem 시작 + release note 갱신
5. 배포 후 모니터링
왜 중요한가: "배포 성공"과 "기능 성공"은 다릅니다. 배포 직후 보지 않는 지표는 며칠 뒤에야 문제로 드러나, 원인 추적이 어렵습니다.
| 기간 | 기준 |
|---|---|
| 0~15분 | error/crash/blank screen, synthetic smoke |
| 15~60분 | Core Web Vitals, API 실패율, 주요 전환 |
| 1일 | 사용자 문의, 브라우저/지역별 이상치, 비용 급증 |
| 1주 | 장기 성능 추세, feature flag 정리, post-release review |
monitoring owner는 배포자가 맡되, 장기 운영 지표는 기능 owner에게 인계합니다.
Sentry를 사용하는 배포에서는 28. Sentry 모니터링 활용의 release, source map, trace alert 기준을 이 monitoring window에 연결합니다.
flowchart LR T0["0~15분\nerror/crash/blank"] --> T1["15~60분\nCWV/API 실패율/전환"] T1 --> T2["1일\n문의/지역·브라우저 이상치/비용"] T2 --> T3["1주\n장기 추세/flag 정리/회고"] T0 --> O1["배포자가 owner"] T3 --> O2["기능 owner에게 handoff"]
6. Feature Flag 운영
일상 비유: 전등 스위치를 방마다 다는 것은 편리하지만, 어느 스위치가 어느 방을 켜는지 잊으면 집 전체가 점점 어두워집니다. flag도 owner와 만료일이 없으면 코드 경로가 미로가 됩니다.
| 기준 | 설명 |
|---|---|
| owner | 모든 flag는 owner와 만료일을 가짐 |
| default | 장애 시 안전한 기본값 정의 |
| kill switch | 서버/API 오류와 무관하게 끌 수 있어야 함 |
| audit | 누가 언제 값을 바꿨는지 기록 |
| cleanup | release 완료 후 제거 PR 생성 |
flag가 많아지면 코드 경로가 폭발합니다. 임시 flag는 만료일 없이 만들지 않습니다.
이 그림은 flag가 생성·실험·전체 노출·정리로 이동하는 단계별 상태와 전이 조건을 보여줍니다.
stateDiagram-v2 [*] --> Created: owner + 만료일 설정 Created --> Internal: dogfood로 검증 Internal --> Canary: 일부 사용자 노출 Canary --> Released: 전체 노출 완료 Canary --> KilledOff: kill switch 발동 KilledOff --> Created: 원인 수정 후 재시도 Released --> CleanupPending: 제거 PR 생성 대상 CleanupPending --> Removed: 코드/설정 정리 완료 Removed --> [*]
6.1 feature flag 사용 단계
이 그림은 flag를 코드에 도입한 시점부터 사용자에게 전체 노출하고 정리하기까지의 실무 작업 순서를 보여줍니다.
flowchart LR P1["1. 정의\nowner+만료+default"] --> P2["2. 코드 머지\noff-default"] P2 --> P3["3. 내부 dogfood"] P3 --> P4["4. canary 1~5%"] P4 --> P5["5. 점진 확대 25~50%"] P5 --> P6["6. 100% 안정 운영"] P6 --> P7["7. cleanup PR"] P4 -. 회귀 .-> KS["kill switch off"] P5 -. 회귀 .-> KS KS --> P3
7. 체크리스트
- [ ] 배포 artifact와 테스트 artifact가 동일한 commit에서 생성되었는가
- [ ] deploy와 release가 분리되어 있는가
- [ ] 변경 위험도와 rollback 난이도가 PR 또는 release note에 적혀 있는가
- [ ] canary 또는 preview에서 핵심 flow가 검증되었는가
- [ ] 배포 후 볼 dashboard와 알림 조건이 준비되어 있는가
- [ ] rollback/flag off/cache purge 절차가 사전에 검증되었는가
- [ ] 배포 완료 후 owner가 30~60분 동안 release health를 확인하는가
- [ ] 임시 feature flag 제거 계획이 있는가
8. 제외한 벤더 종속 항목
공통 개발 가이드에는 특정 배포 플랫폼, 특정 progressive delivery 제품, 특정 feature flag SaaS, 특정 알림 도구, 특정 CDN/클라우드 명령을 표준으로 포함하지 않습니다. 이 문서에는 어떤 배포 시스템에서도 유지되어야 하는 사전 검증, 점진 노출, 롤백, 배포 후 관측 기준만 남깁니다.
실무 적용 가이드
언제 이 문서를 펼칠까
- 배포와 기능 공개가 같은 순간에 일어나 rollback이 어려울 때
- canary 지표 없이 전체 사용자에게 바로 노출할 때
- 장애 시 누가 어떤 순서로 되돌릴지 불명확할 때
적용 순서
- deploy와 release를 feature flag로 분리한다.
- preflight gate와 post-deploy smoke를 정한다.
- canary 확대 기준과 중단 기준을 숫자로 둔다.
- rollback artifact와 flag off 경로를 리허설한다.
- release health를 배포 후 일정 시간 모니터링한다.
함께 두는 파일
- feature flag 정의와 사용처, fallback test를 feature 폴더에 둔다.
- release checklist와 rollback runbook은 서비스별 배포 문서에 둔다.
- 관측성 metric name은 기능/route와 연결한다.
흔한 실수
- 배포 성공을 기능 성공으로 착각한다.
- rollback artifact 없이 hotfix만 준비한다.
- flag off 후 UI 상태를 테스트하지 않는다.
- 배포 후 모니터링 기준이 없다.
PR 완료 기준
- [ ] preflight와 post-deploy smoke가 있다.
- [ ] canary/rollback 기준이 있다.
- [ ] feature flag kill switch가 검증되었다.
- [ ] release health 결과가 남았다.
추천 항목 실행 우선순위 매핑
-
P1(7일 내)— canary, flag, rollback artifact, release health 중 하나를 작은 변경 1건에 적용하고 증거(release note)를 남긴다. -
P2(30일 내)— 배포 절차 기준을 팀 템플릿, 체크리스트, CI 중 한 곳에 고정한다. -
P3(90일 내)— rollback 시간, canary error rate, release failure 수 추이를 보고 기준을 유지할지 조정할지 결정한다. -
완료 기준— 릴리스 오너가 증거와 철회 조건을 확인했다는 기록을 남긴다.
추천 항목 실행 체크리스트
-
[ ]
1단계(7일): canary, flag, rollback artifact, release health 적용 대상을 1개로 좁힌다. -
[ ]
2단계(30일): 증거(release note, deployment log, rollback artifact, health dashboard)를 PR, ADR, 회고 중 한 곳에 연결한다. -
[ ]
3단계(60일): rollback 시간, canary error rate, release failure 수가 기준 안에 들어왔는지 확인한다. -
[ ]
문제 대응: 미달성 사유와 다음 조치, 중단 여부를 같은 기록에 남긴다.
추천 항목 실행 운영 규칙
-
실행 게이트: deploy와 release를 분리하고 rollback artifact를 먼저 확인한다. -
승인 체계: 릴리스 오너가 영향 범위와 rollback 담당자를 적용 전에 확인한다. -
재개 조건: canary health가 기준 안에 있으면 트래픽을 단계적으로 늘린다. -
정지 조건: rollback 경로가 없거나 health 지표가 비면 release를 멈춘다. -
리스크 점수: 트래픽 비중, 변경 파일 수, dependency 변경으로 산정한다. 리더 승인자: 릴리스 매니저가 최종 승인 책임을 맡는다.-
승인 역할: 배포 절차 작성자, 검토자, 운영 확인자를 분리해 기록한다. 재평가 주기: 배포 후 24시간 안에 release health를 회고한다.