비 연결성
- HTTP는 기본이 연결을 유지하지 않는 모델
- 일반적으로 초 단위의 이하의 빠른 속도로 응답
- 1시간 동안 수천명이 서비스를 사용해도 실제 서버에서 동시에 처리하는 요청은 수십개 이하로 매우 작음
- ex) 웹 브라우저에서 계속 연속해서 검색 버튼을 누르지는 않는다.
- 서버 자원을 매우 효율적으로 사용할 수 있음
연결을 유지하는 모델
- 여러 클라이언트의 연결을 유지한다면 서버의 자원이 계속 소모
- 클라이언트2, 클라이언트3이 요청을 안보내더라도 연결중이므로 자원을 계속 소모
연결을 유지하지 않는 모델
- 요청하고 응답할 때만 연결하고 종료
- 서버를 유지하는 자원을 최소한으로 줄일 수 있음
비 연결성의 한계와 극복
- TCP/IP 연결을 새로 맺을 때마다 3 way handshake로 인한 시간이 추가 됨
- 웹 브라우저로 사이트를 요청하면 HTML 뿐만 아니라 자바스크립트, css, 추가 이미지 등 수 많은 자원이 함께 다운로드되므로 요청 -> 응답 -> 종료의 반복으로 인한 시간 추가
- 지금은 HTTP 지속 연결(Persistent Connections)로 문제 해결
- HTTP/2, HTTP/3에서 더 많은 최적화
HTTP 지속 연결(Persistent Connections)
- TCP연결의 재사용
- Connection: keep-alive -- 서버에 HTTP요청 시, 요청 message 헤더에 추가
- TCP연결의 수를 적게 함으로서 서버의 cpu나 메모리 자원을 절약할 수 있음
- 네트워크 혼잡이나 지연의 경우의 수를 줄일 수 있음
- 모든 페이지에 Persistent Connection을 사용하면 서버의 자원이 고갈되기때문에 사용할지 말지 고려해야함
Stateless를 기억하자
- 실무에서는 특정 시간에 발생하는 대용량 트래픽에 대해서 대응해야 하는 경우가 생김
- ex) 선착순 이벤트, 명절 KTX 예약, 학과 수업 등록
- 수천, 수만명 이상이 동시에 접속을 하면 서버에 과부하가 걸리는 경우가 생기면, 무상태 페이지를 활용해서 페이지 접속 인원을 분산시켜 대용량 트래픽을 분산시키면 좋음
'HTTP 웹 기본 지식' 카테고리의 다른 글
HTTP 메서드[HTTP API를 만들어보자] (0) | 2022.11.24 |
---|---|
HTTP 기본[HTTP 메시지] (0) | 2022.11.24 |
HTTP 기본[Stateful, Stateless] (0) | 2022.11.23 |
HTTP 기본[클라이언트 서버 구조] (0) | 2022.11.23 |
HTTP 기본[모든 것이 HTTP] (0) | 2022.11.23 |
댓글