동적 앱별 저장소 분리

Durable Object facets

동적으로 로드한 앱마다 독립된 SQLite 저장소를 제공합니다.

···
html
<div class="scene"><div class="title">ONE SUPERVISOR, SEPARATE STORES</div><div class="supervisor"><div class="label">SUPERVISOR</div><div class="facets"><div class="tile" id="facetA">APP A<div class="db">SQLite A <b id="valA">0</b></div></div><div class="tile" id="facetB">APP B<div class="db">SQLite B <b id="valB">0</b></div></div></div></div><div id="facetState" class="muted">Each app writes only its own database</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)}}.supervisor{border:2px solid var(--accent);border-radius:10px;padding:9px;flex:1;min-height:0}.label{color:var(--accent);font-weight:700;margin-bottom:6px}.facets{display:flex;gap:8px;height:70%}.facets>.tile{flex:1}.db{margin-top:5px;border-top:1px solid var(--line);padding-top:5px}.db b{color:var(--accent)}
js
let a=0,b=0,phase=0;function tick(){if(phase%2===0)a++;else b++;document.getElementById('valA').textContent=a;document.getElementById('valB').textContent=b;document.getElementById('facetA').classList.toggle('on',phase%2===0);document.getElementById('facetB').classList.toggle('on',phase%2===1);document.getElementById('facetState').textContent='App '+(phase%2===0?'A':'B')+' writes; other store remains '+(phase%2===0?b:a);phase++}tick();setInterval(tick,850)

Durable Object Facets는 감독 객체 안에서 동적 코드가 구현한 객체를 패싯으로 실행하게 합니다. 패싯마다 감독 객체 및 다른 패싯과 분리된 SQLite 저장소를 쓸 수 있습니다. 2026년 발표 당시 공개 베타 기능입니다.

데모는 같은 감독 객체 아래 앱 A와 B가 각각 다른 값을 저장하는 모습을 보여줍니다. 격리 경계와 베타 기능의 제약을 검토한 뒤 사용해야 합니다.

언제 쓰나

동적으로 생성되는 여러 앱에 객체별 상태를 제공하는 플랫폼을 설계할 때 검토합니다.

페이지로 열기 ↗