웹 기술 기초

HTTP/2와 HTTP/3에 대한 설명으로 올바른 것은?

  1. AHTTP/2는 하나의 TCP 연결로 여러 요청을 병렬로 처리할 수 있지만 패킷 손실로 다른 스트림도 기다리게 되는 경우가 있으며, HTTP/3은 UDP 위의 QUIC으로 이를 줄였다
  2. BHTTP/2는 HTTP/1.1과 같은 텍스트 형식의 메시지를 사용하고, 요청마다 새로운 TCP 연결을 병렬로 만들어 여러 리소스를 동시에 받을 수 있게 한 버전이다
  3. CHTTP/3은 HTTP/2와 마찬가지로 TCP 위에서 동작하며 헤더를 압축하는 방식만 고친 버전으로, 패킷 손실의 영향은 HTTP/2와 다르지 않고 UDP는 사용하지 않는다
정답과 해설 보기

정답: A. HTTP/2는 하나의 TCP 연결로 여러 요청을 병렬로 처리할 수 있지만 패킷 손실로 다른 스트림도 기다리게 되는 경우가 있으며, HTTP/3은 UDP 위의 QUIC으로 이를 줄였다

HTTP/1.1에서도 지속 연결(keep-alive)로 하나의 TCP 연결을 재사용할 수 있지만, 하나의 연결에서는 응답을 하나씩 차례로 받기 때문에 브라우저는 여러 연결을 병렬로 열었습니다. HTTP/2는 메시지를 바이너리 프레임으로 나누고, 하나의 TCP 연결 위에 여러 스트림을 다중화하여 병렬로 보냅니다. 다만 TCP는 바이트열을 순서대로 전달하므로, 패킷이 하나 손실되면 재전송이 도착할 때까지 관계없는 스트림의 데이터도 기다리게 됩니다(HOL 블로킹, head-of-line blocking). HTTP/3은 UDP 위에서 동작하는 QUIC을 사용하여 스트림마다 순서를 관리하므로, 손실의 영향이 그 스트림에만 머뭅니다.

이 분야 연습하기 분야로 돌아가기

웹 기술 기초의 다른 문제

  1. RTT가 40 ms인 웹 서버에서 HTML 하나와 거기서 참조하는 이미지 4개를 하나씩 차례로 가져온다. TCP 연결 설정에 1왕복, 각 요청과 응답에 1왕복이 걸린다고 하고, 데이터 전송 시간, 서버의 처리 시간, TLS, 연결 종료는 고려하지 않는다. 객체마다 새로운 TCP 연결을 여는 경우와 하나의 TCP 연결을 재사용하는 지속 연결의 경우에 걸리는 시간의 차이는?
  2. HTTP는 무상태(stateless) 프로토콜이다. 이것과, 웹사이트에서 로그인한 상태를 유지하는 일반적인 방법에 대한 설명으로 올바른 것은?
  3. 위의 헤더로 설정된 Cookie에 대한 설명으로 올바른 것은?
  4. 브라우저의 localStorage와 Cookie의 차이로 올바른 것은?
  5. 로드 밸런서 뒤에 애플리케이션 서버 3대를 두고, 요청을 차례로 각 서버에 분배하고 있다(라운드 로빈). 로그인한 이용자의 세션 정보는 로그인을 처리한 서버의 메모리에만 저장하고 있다. 일어나기 쉬운 문제와 대책의 조합으로 적절한 것은?