[네트워크] HTTP 비연결성
HTTP 비연결성
연결을 유지하지 않는 모델은 서버와 클라이언트간 연결하고 요청과 응답이 오면 연결을 바로 끊음으로서 최소한의 자원이 유지된다.
- HTTP는 기본이 연결을 유지하지 않는 모델이다.
- 일반적으로 초 단위의 이하의 빠른 속도로 응답한다.
- 1시간 동안 수천명이 서비스를 사용해도 실제 서버에서 동시에 처리하는 요청은 수십개 이하로 매우 작음
- 예) 웹 브라우저에서 계속 연속해서 검색 버튼을 누르지는 않는다.
- 비연결성은 서버 자원을 매우 효율적으로 사용할 수 있다.
비연결성 단점
- TCP/IP 연결을 새로 맺어야 하게 되어 3 way handshake 시간이 추가된다.
- 웹 브라우저로 사이트를 요청하면 HTML 뿐만 아니라 자바스크립트, css, 추가 이미지 등 등 수 많은 자원이 함께 다운로드되는데 자원을 받을 때마다 연결 > 연결끊기 > 연결 을 반복하면 이 또한 시간이 지연된다.
- 현재는 HTTP 지속 연결(Persistent Connections)로 문제를 해결됐으며 HTTP/2, HTTP/3에서 더 많은 최적화가 되었다.
HTTP 지속 연결(Persistent Connections)
연결과 종료의 반복으로 비효율적이게 되는데 HTTP 지속연결을 통해 보통 HTTP 1개를 받을 때까지 연결을 유지시킨다. HTTP/2, HTTP/3에서 최적화가 더 많이 되었는데 특히 HTTP/3에서는 UDP프로토콜을 통해 연결 속도 자체도 줄여졌다.
Stateless 를 기억하기
서버 개발자들이 어려워하는 업무는 같은 시간에 딱 맞추어 발생하는 대용량 트래픽이다. 이런 경우에 최대한 무상태로 설계하는 것이 중요하다. 보통 이벤트 설계할 때 첫 페이지는 로그인도 필요없는 아무 상태도 없는 정적 Html을 두어 시간을 버는 식을 기본으로 한다.
eg. 선착순 이벤트, 명절 KTX 예약, 학과 수업 등록
eg. 저녁 6:00 선착순 1000명 치킨 할인 이벤트 -> 수만명 동시 요청
Notes
얼마전에 네고왕에서 마녀공장 세일을 해 평소 애정하던 브랜드라 구매하려고 들어갔는데 서버가 터져서 며칠을 못들어갔다. 개발공부를 하니 서버 개발자분이 고생하실 것이 훤히 보여서 너무 안쓰럽고 감정이입이 되서 무서웠다... 아무튼 서버 개발자는 아니지만 나도 겪게 될 수 있는 일이기에 잘 기억해두는 것이 좋겠다.
Reference
강의 | [인프런] 모든 개발자를 위한 HTTP 웹 기본 지식 - 김영한
출처: https://algoroot.tistory.com/108 [Algoroot's space:티스토리]