장기 워크플로 버저닝

Workflow versioning

진행 중인 실행은 기존 경로를 유지하고 새 실행은 새 정의를 따릅니다.

···
html
<div class="scene"><div class="title">TWO VERSIONS, TWO ROUTES</div><div class="versionLane"><b>v1</b><span class="tile on">START</span><span>→</span><span class="tile" id="oldEnd">DONE</span></div><div class="versionLane"><b>v2</b><span class="tile on">START</span><span>→</span><span class="tile" id="review">REVIEW</span><span>→</span><span class="tile" id="newEnd">DONE</span></div><div class="muted" id="versionState">Old run keeps v1; new run uses v2</div></div>
css
.scene{width:min(94vw,760px);height:min(86vh,320px);padding:clamp(10px,2.5vmin,18px);border:1px solid var(--line);border-radius:14px;background:var(--surface);color:var(--fg);font:500 clamp(11px,1.3vw,16px)/1.25 "Pretendard Variable",Pretendard,-apple-system,sans-serif;display:flex;flex-direction:column;gap:clamp(7px,1.6vmin,12px);overflow:hidden}.scene *{box-sizing:border-box}.title{font-weight:750;color:var(--accent)}.muted{color:var(--muted)}.mono{font-family:ui-monospace,monospace}.row{display:flex;align-items:center;justify-content:center;gap:clamp(5px,1.4vmin,12px);flex:1;min-height:0}.tile{border:1px solid var(--line);border-radius:8px;background:var(--bg);padding:clamp(6px,1.6vmin,12px);text-align:center;min-width:0}.on{border-color:var(--accent)!important;background:color-mix(in srgb,var(--accent) 12%,var(--surface))!important}.pulse{animation:pulse 1.6s infinite alternate}@keyframes pulse{to{border-color:var(--accent);transform:translateY(-3px)}}.versionLane{display:flex;align-items:center;justify-content:space-between;gap:4px;flex:1}.versionLane b{color:var(--accent);min-width:10%}.versionLane .tile{flex:1;padding:6px 2px}.versionLane span:not(.tile){color:var(--accent)}
js
let phase=0;function tick(){document.getElementById('oldEnd').classList.toggle('on',phase%3>0);document.getElementById('review').classList.toggle('on',phase%3===1);document.getElementById('newEnd').classList.toggle('on',phase%3===2);document.getElementById('versionState').textContent=['Both executions active','v1 finishes; v2 enters review','v2 finishes after review'][phase%3];phase++}tick();setInterval(tick,950)

장기 워크플로는 배포가 여러 번 지나가도 살아 있을 수 있습니다. 단계 정의를 바꿀 때 실행 중인 인스턴스와 새 인스턴스가 어떤 코드 버전을 따를지 정해야 합니다.

데모는 v1의 진행 건이 옛 경로를 끝내고 새 요청만 v2의 추가 검토 단계를 지나는 모습을 보여줍니다. 버전 관리 없이 코드를 교체하면 재생 중인 이력과 코드가 어긋날 수 있습니다.

언제 쓰나

며칠 이상 실행되는 워크플로의 단계를 운영 중 수정할 때 사용합니다.

페이지로 열기 ↗