다중 앱 워크플로

Multi-app workflows

하나의 지속 워크플로가 앱 ID가 다른 서비스의 작업을 호출합니다.

···
html
<div class="scene"><div class="title">ONE HISTORY · THREE APP IDS</div><div class="timeline"><div class="stem"></div><div class="step" id="app1">APP 1<br>CPU</div><div class="step" id="app2">APP 2<br>GPU</div><div class="step" id="app3">APP 3<br>DEPLOY</div></div><div class="history">PARENT HISTORY <span id="history">1 / 3 complete</span></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)}}.timeline{display:flex;align-items:center;justify-content:space-around;gap:5px;position:relative;flex:1}.timeline .stem{position:absolute;left:9%;right:9%;height:3px;background:var(--line)}.step{position:relative;z-index:1;border:2px solid var(--line);background:var(--bg);border-radius:8px;padding:7px 3px;text-align:center;min-width:25%}.step.active{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 14%,var(--surface))}.history{border:1px solid var(--line);border-radius:7px;padding:7px;display:flex;justify-content:space-between;gap:5px}.history span{color:var(--accent)}
js
let n=0;function tick(){['app1','app2','app3'].forEach((id,i)=>document.getElementById(id).classList.toggle('active',i<=n%3));document.getElementById('history').textContent=(n%3+1)+' / 3 complete';n++}tick();setInterval(tick,900);document.querySelector('.scene').addEventListener('pointerdown',tick)

Dapr 다중 앱 워크플로에서는 부모 워크플로가 작업이나 자식 워크플로의 대상 앱 ID를 지정합니다. 각 앱이 자기 작업을 실행하고 결과를 부모에게 돌려주며, 최종 이력은 부모 앱에 저장됩니다. 런타임 1.16부터 지원하며 .NET SDK는 1.17부터 지원합니다.

데모는 오케스트레이터가 CPU 처리, GPU 처리, 배포 앱을 차례로 호출합니다. 참여 앱은 같은 네임스페이스와 워크플로 상태 저장소를 써야 하며, 대상 작업 등록과 접근 정책을 확인해야 합니다.

언제 쓰나

작업별 실행 환경이나 팀 소유 앱이 달라도 하나의 복구 가능한 흐름으로 묶을 때 사용합니다.

페이지로 열기 ↗