DB 연결 풀링

Database connection pooling

요청이 소수의 재사용 가능한 DB 연결을 빌리고 반환하게 합니다.

···
html
<div class="demo"><div class="head"><b>CONNECTION POOL</b><span>2 slots</span></div><div class="stage pool"><div class="requests"><div class="pill">req A</div><div class="pill">req B</div><div class="pill" id="reqC">req C</div></div><div class="poolarrow">→</div><div class="slots"><div class="cell" id="slotA">conn 1 · A</div><div class="cell" id="slotB">conn 2 · B</div></div></div><div class="foot"><span id="poolstatus">C waits for a slot</span><span>borrow → return</span></div></div>
css
*{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)}.pool{justify-content:space-around}.requests,.pool .slots{display:grid;gap:5px;min-width:36%}.poolarrow{color:var(--accent);font-size:clamp(18px,5vmin,27px)}.pool .pill,.pool .cell{white-space:nowrap;padding:clamp(3px,1vmin,7px)}.pool #reqC{transition:.3s}.pool .cell{transition:.3s}
js
let n=0;function tick(){document.getElementById('reqC').classList.toggle('on',!!n);document.getElementById('slotA').textContent=n?'conn 1 · C':'conn 1 · A';document.getElementById('slotA').classList.toggle('on',!!n);document.getElementById('poolstatus').textContent=n?'A returns · C borrows':'C waits for a slot';n=1-n}tick();const t=setInterval(tick,1200);document.querySelector('.demo').onclick=()=>{clearInterval(t);tick()}

연결 풀은 미리 만든 데이터베이스 연결을 보관하고 여러 요청이 차례로 재사용하게 합니다. 요청마다 연결을 새로 맺는 비용을 줄이고 DB가 동시에 받는 연결 수를 제한할 수 있습니다.

데모는 연결 2개가 바쁠 때 세 번째 요청이 기다리다가 반환된 연결을 빌리는 흐름을 보여줍니다. 풀 크기가 너무 작으면 대기열이 길어지고, 너무 크면 DB 자원을 압박합니다.

언제 쓰나

동시 요청이 많고 DB 연결 생성 비용이나 최대 연결 수가 문제가 될 때 사용합니다.

페이지로 열기 ↗