로드 밸런싱

Load balancing

요청을 여러 서버에 분산해 한 서버에 부하가 몰리지 않게 합니다.

···
html
<div class="n-demo"><div class="n-head"><strong>REQUEST DISTRIBUTOR</strong><span>LIVE TRACE</span></div><div class="n-stage"><div class="lb"><div class="lb-in n-box">request <b id="lb-num">1</b></div><div class="lb-fan">→</div><div class="lb-servers"><div id="lb0" class="n-box">A <i></i></div><div id="lb1" class="n-box">B <i></i></div><div id="lb2" class="n-box">C <i></i></div></div></div></div><div class="n-foot">tap to step · auto replay</div></div>
css
.n-demo{width:min(94vw,760px);height:min(88vh,324px);padding:clamp(9px,2.2vmin,18px);border:1px solid var(--line);border-radius:13px;background:var(--surface);display:flex;flex-direction:column;gap:clamp(5px,1.3vmin,10px);font:600 clamp(12px,2.4vmin,16px)/1.3 "Pretendard Variable",Pretendard,-apple-system,BlinkMacSystemFont,"Apple SD Gothic Neo",sans-serif;overflow:hidden}.n-head,.n-foot{display:flex;justify-content:space-between;align-items:center;color:var(--muted)}.n-head strong{color:var(--accent)}.n-head span,.n-foot{font-size:12px}.n-stage{flex:1;min-height:0;position:relative;display:flex;align-items:center;justify-content:center;gap:clamp(4px,1vmin,10px)}.mono{font-family:ui-monospace,SFMono-Regular,Consolas,monospace}.n-box{padding:clamp(5px,1.5vmin,11px);border:1px solid var(--line);border-radius:8px;background:var(--bg);text-align:center}.n-on{border-color:var(--accent)!important;color:var(--accent)!important;background:color-mix(in srgb,var(--accent) 12%,var(--surface))!important}.n-muted{color:var(--muted)}@media(max-width:400px){.n-head span{display:none}}.lb{width:90%;display:flex;align-items:center;justify-content:center;gap:12px}.lb-in{min-width:30%}.lb-fan{font-size:22px;color:var(--accent)}.lb-servers{display:grid;gap:5px;min-width:35%}.lb-servers .n-box{display:flex;align-items:center;gap:6px;padding:5px 8px}.lb-servers i{height:10px;background:var(--accent);width:8%;border-radius:2px;transition:width .4s}
js
let step=0;const loads=[0,0,0];function advance(){const selected=step%3;loads[selected]=(loads[selected]+1)%5;for(let i=0;i<3;i++){const el=document.getElementById('lb'+i);el.classList.toggle('n-on',i===selected);el.querySelector('i').style.width=(15+loads[i]*17)+'%'}document.getElementById('lb-num').textContent=String(step+1);step=(step+1)%12}
const clickTarget=document.querySelector('.n-demo');if(clickTarget&&typeof advance==='function'){advance();const timer=setInterval(advance,1050);clickTarget.addEventListener('pointerdown',()=>{clearInterval(timer);advance()})}

로드 밸런서는 클라이언트 요청을 여러 백엔드 중 하나로 보냅니다. 라운드 로빈은 순서대로 돌리고, 다른 방식은 부하나 건강 상태를 고려합니다.

데모는 요청이 세 서버에 돌아가며 배정되고 각 막대가 자라는 모습을 보여줍니다. 분산만으로 장애가 사라지지는 않으므로 헬스 체크와 세션 상태도 살펴야 합니다.

언제 쓰나

트래픽이 늘거나 서버 여러 대의 가용성을 높일 때 분산 정책을 정합니다.

페이지로 열기 ↗