ACID는 원자성, 일관성, 격리성, 지속성을 가리킵니다. 트랜잭션 안의 작업은 모두 확정되거나, 실패하면 모두 되돌아가야 합니다.
데모는 A에서 20을 빼고 B에 20을 더하는 송금입니다. 중간 오류가 나면 두 계좌가 원래 잔액으로 돌아갑니다. 트랜잭션을 너무 오래 열면 잠금과 버전 관리 비용이 커질 수 있습니다.
언제 쓰나
송금·재고 차감처럼 여러 변경이 반드시 함께 반영되어야 할 때 사용합니다.
여러 DB 작업을 하나의 성공 또는 실패 단위로 묶습니다.
<div class="demo"><div class="head"><b>BEGIN → COMMIT / ROLLBACK</b><span id="txmode">transfer</span></div><div class="stage balances"><div class="account"><span>A</span><strong id="a">100</strong></div><div class="flow">20 →</div><div class="account"><span>B</span><strong id="b">50</strong></div></div><div class="foot"><span id="txstatus">both updates committed</span><span>one unit</span></div></div>*{box-sizing:border-box}.demo{width:min(96vw,820px);height:min(94vh,350px);padding:clamp(8px,2vmin,18px);border:1px solid var(--line);border-radius:14px;background:var(--surface);color:var(--fg);display:flex;flex-direction:column;gap:clamp(5px,1.5vmin,12px);font:600 clamp(12px,3.5vmin,15px)/1.25 var(--font-sans),sans-serif;overflow:hidden}.head,.foot,.row{display:flex;justify-content:space-between;align-items:center;gap:8px}.head b{color:var(--accent)}.head span,.foot,.muted{color:var(--muted)}.stage{flex:1;min-height:0;display:flex;align-items:center;justify-content:center;gap:8px}.cell,.pill{border:1px solid var(--line);border-radius:8px;background:var(--bg);padding:clamp(4px,1.2vmin,9px);text-align:center}.pill{border-radius:999px}.on{border-color:var(--accent)!important;background:color-mix(in srgb,var(--accent) 17%,var(--surface))!important;color:var(--fg)!important}.bad{border-color:#e16a5d!important;background:color-mix(in srgb,#e16a5d 18%,var(--surface))!important}.foot{font-size:clamp(12px,3vmin,14px)}.balances{justify-content:space-around}.account{display:flex;flex-direction:column;align-items:center;gap:6px;border:1px solid var(--line);border-radius:10px;background:var(--bg);min-width:30%;padding:8px}.account strong{font:700 clamp(20px,7vmin,34px) ui-monospace,monospace;color:var(--accent)}.flow{color:var(--accent);white-space:nowrap}let n=0;function tick(){document.getElementById('a').textContent=n?'100':'80';document.getElementById('b').textContent=n?'50':'70';document.getElementById('txmode').textContent=n?'error → rollback':'transfer';document.getElementById('txstatus').textContent=n?'both balances restored':'both updates committed';document.querySelectorAll('.account').forEach(e=>e.classList.toggle('bad',!!n));n=1-n}tick();const t=setInterval(tick,1300);document.querySelector('.demo').onclick=()=>{clearInterval(t);tick()}ACID는 원자성, 일관성, 격리성, 지속성을 가리킵니다. 트랜잭션 안의 작업은 모두 확정되거나, 실패하면 모두 되돌아가야 합니다.
데모는 A에서 20을 빼고 B에 20을 더하는 송금입니다. 중간 오류가 나면 두 계좌가 원래 잔액으로 돌아갑니다. 트랜잭션을 너무 오래 열면 잠금과 버전 관리 비용이 커질 수 있습니다.
송금·재고 차감처럼 여러 변경이 반드시 함께 반영되어야 할 때 사용합니다.