격리 수준은 동시에 실행되는 트랜잭션 사이에서 허용할 관찰 결과를 정합니다. 낮은 격리는 동시성을 높일 수 있지만 같은 트랜잭션의 반복 조회 결과가 달라지는 등의 현상이 생길 수 있습니다.
데모는 T1이 두 번 읽는 사이 T2가 값을 확정한 경우를 비교합니다. 실제 보장과 이름은 DB 제품마다 차이가 있으므로 해당 엔진의 문서를 확인해야 합니다.
언제 쓰나
동시 수정이나 반복 조회 결과가 업무 규칙에 영향을 줄 때 격리 수준을 정합니다.
동시 트랜잭션이 서로의 변경을 언제 볼지 정합니다.
<div class="demo"><div class="head"><b>T1 READ → T2 COMMIT → T1 READ</b><span id="level">read committed</span></div><div class="stage isolation"><div class="cell">T1 first<br><b>100</b></div><div class="cell">T2 writes<br><b>120</b></div><div class="cell last">T1 second<br><b id="seen">120</b></div></div><div class="foot"><span id="isostatus">new committed value visible</span><span>two readers</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)}.isolation{justify-content:space-around}.isolation .cell{min-width:27%;line-height:1.4}.isolation b{font:700 clamp(19px,6vmin,28px) ui-monospace,monospace;color:var(--accent)}.last{transition:.25s}@media(max-width:400px){.isolation{gap:3px}.isolation .cell{min-width:30%;padding:3px}}let n=0;function tick(){document.getElementById('level').textContent=n?'repeatable read':'read committed';document.getElementById('seen').textContent=n?'100':'120';document.getElementById('isostatus').textContent=n?'same snapshot remains':'new committed value visible';document.querySelector('.last').classList.toggle('on',!!n);n=1-n}tick();const t=setInterval(tick,1300);document.querySelector('.demo').onclick=()=>{clearInterval(t);tick()}격리 수준은 동시에 실행되는 트랜잭션 사이에서 허용할 관찰 결과를 정합니다. 낮은 격리는 동시성을 높일 수 있지만 같은 트랜잭션의 반복 조회 결과가 달라지는 등의 현상이 생길 수 있습니다.
데모는 T1이 두 번 읽는 사이 T2가 값을 확정한 경우를 비교합니다. 실제 보장과 이름은 DB 제품마다 차이가 있으므로 해당 엔진의 문서를 확인해야 합니다.
동시 수정이나 반복 조회 결과가 업무 규칙에 영향을 줄 때 격리 수준을 정합니다.