헤드 오브 라인 블로킹 (Head-of-Line Blocking, HOL Blocking) 은 네트워크 프로토콜에서 발생할 수 있는 성능 저하 문제로, 한 패킷이 지연되면 그 뒤의 패킷들도 모두 지연되는 현상을 의미합니다. 이 문제는 주로 멀티플렉싱 방식에서 발생할 수 있습니다.
헤드 오브 라인 블로킹 설명
- 멀티플렉싱이란, 여러 개의 데이터 스트림을 하나의 연결을 통해 동시에 전송하는 방식입니다. 예를 들어, HTTP/2나 QUIC은 여러 스트림을 하나의 연결에서 동시에 처리할 수 있습니다.
- 하지만 헤드 오브 라인 블로킹은, 만약 첫 번째 스트림에 문제가 생기면 그 뒤에 있는 모든 스트림도 대기해야 하는 상황을 만듭니다. 이는 효율성에 큰 영향을 미칩니다.
예시
- 만약 HTTP/2에서 한 요청이 응답을 기다리고 있는 동안 그 스트림이 지연되면, 그 스트림 뒤에 있는 다른 요청들도 함께 지연됩니다.
- 예를 들어, 웹 페이지의 여러 리소스 (이미지, 스타일시트 등)가 동시에 로드될 때, 하나의 리소스에 문제가 생기면 나머지 리소스들도 로드되지 않거나 기다려야 하는 상황이 발생합니다. 이 현상이 헤드 오브 라인 블로킹입니다.
왜 문제가 될까?
- 네트워크에서 데이터를 전송할 때 순차적으로 처리되는 경우, 하나의 패킷이 처리되지 않으면 그 뒤에 오는 모든 패킷도 대기해야 합니다. 이는 전체적인 응답 시간을 지연시키고, 효율성을 크게 떨어뜨립니다.
헤드 오브 라인 블로킹 해결
- HTTP/2: HTTP/2에서는 멀티플렉싱 기능을 제공하여 여러 개의 요청을 하나의 연결에서 동시에 처리할 수 있습니다. 하지만 여전히 헤드 오브 라인 블로킹 문제가 발생할 수 있습니다. 예를 들어, HTTP/2에서 하나의 스트림이 지연되면 그 스트림에 의존하는 다른 스트림도 지연될 수 있습니다.
- HTTP/3 (QUIC): QUIC(HTTP/3의 기반 프로토콜)는 이 문제를 해결합니다. QUIC은 UDP를 기반으로 하며, 스트림 간 독립성을 제공하기 때문에 한 스트림의 지연이 다른 스트림에 영향을 미치지 않습니다. 즉, 헤드 오브 라인 블로킹을 방지할 수 있습니다.
결론
헤드 오브 라인 블로킹은 멀티플렉싱을 사용하는 네트워크 프로토콜에서 발생할 수 있는 성능 저하 문제로, 특정 스트림이 지연되면 그 뒤의 모든 스트림이 지연되는 현상을 의미합니다. 이를 해결하기 위해 HTTP/3는 QUIC 프로토콜을 사용하여 스트림 간 독립성을 제공하고, 성능을 향상시킵니다.