HTTP/3는 QUIC 위에서 요청과 응답을 전송합니다. QUIC은 스트림별 순서를 관리하므로 한 스트림의 손실이 다른 스트림의 데이터 전달을 막지 않습니다.
데모는 위쪽 스트림에서 패킷이 빠진 동안 아래쪽 스트림은 계속 전진하는 모습을 보여줍니다. 네트워크 혼잡이나 연결 전체의 대역폭 한계까지 없어지는 것은 아닙니다.
언제 쓰나
손실이 있는 네트워크에서 여러 리소스를 병렬 전송할 때 HTTP/2와 차이를 설명할 수 있습니다.
QUIC의 독립 스트림으로 패킷 손실이 다른 스트림까지 막는 문제를 줄입니다.
<div class="n-demo"><div class="n-head"><strong>QUIC STREAM ISOLATION</strong><span>LIVE TRACE</span></div><div class="n-stage"><div class="quic"><div class="quic-row"><span>STREAM A</span><div><i id="q0"></i><b id="lost">LOSS</b></div></div><div class="quic-row"><span>STREAM B</span><div><i id="q1"></i></div></div><p id="q-note">independent delivery</p></div></div><div class="n-foot">tap to step · auto replay</div></div>.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}}.quic{width:94%;display:grid;gap:12px}.quic-row{display:flex;align-items:center;gap:8px}.quic-row span{width:84px;font-size:12px}.quic-row div{flex:1;background:var(--bg);border-radius:6px;height:26px;position:relative}.quic-row i{display:block;background:var(--accent);height:100%;border-radius:6px;width:8%;transition:width .45s}.quic-row:nth-child(2) i{background:var(--accent-2)}.quic-row b{position:absolute;left:35%;top:2px;color:var(--accent-3);font-size:12px;opacity:0}.quic p{margin:0;text-align:center;color:var(--muted)}let step=0;function advance(){const widths=[[20,20],[35,45],[35,70],[62,95]];document.getElementById('q0').style.width=widths[step][0]+'%';document.getElementById('q1').style.width=widths[step][1]+'%';document.getElementById('lost').style.opacity=step===1||step===2?'1':'0';document.getElementById('q-note').textContent=step===1||step===2?'A waits · B continues':'independent delivery';step=(step+1)%4}
const clickTarget=document.querySelector('.n-demo');if(clickTarget&&typeof advance==='function'){advance();const timer=setInterval(advance,1050);clickTarget.addEventListener('pointerdown',()=>{clearInterval(timer);advance()})}HTTP/3는 QUIC 위에서 요청과 응답을 전송합니다. QUIC은 스트림별 순서를 관리하므로 한 스트림의 손실이 다른 스트림의 데이터 전달을 막지 않습니다.
데모는 위쪽 스트림에서 패킷이 빠진 동안 아래쪽 스트림은 계속 전진하는 모습을 보여줍니다. 네트워크 혼잡이나 연결 전체의 대역폭 한계까지 없어지는 것은 아닙니다.
손실이 있는 네트워크에서 여러 리소스를 병렬 전송할 때 HTTP/2와 차이를 설명할 수 있습니다.