인프런 김영한님 [모든 개발자를 위한 HTTP 웹 기본 지식] 강의를 듣고 정리한 내용입니다.
틀린 부분이 있으면 답글 달아 주세요😊😊
1. 비연결성(connectionless)
👉 연결을 유지하는 모델
- TCP/IP 연결 경우 연결을 유지하는 모델이다.
✔ 클라이언트1와 서버가 연결 후, 요청과 응답을 주고 받는다. 클라이언트1은 서버와 연결 유지된 상태
✔ 클라이언트2와 서버가 연결 후, 요청과 응답을 주고 받는다. 클라이언트2은 서버와 연결 유지된 상태
✔ 클라이언트3와 서버가 연결 후, 요청과 응답을 주고 받는다. 클라이언트3은 서버와 연결 유지된 상태
✔ 클라이언트1과 클라이언트2는 서버와 연결을 계속 유지하며, 서버 자원을 소모한다.
✔ 연결이 유지된 상태의 클라이언트1와 서버와 새로운 요청과 응답을 주고 받는다.
👉 연결을 유지하지 않은 모델
✔ 클라이언트1와 서버가 연결 후, 요청과 응답을 주고 받는다. 클라이언트1은 서버와 연결 유지된 상태
✔ 클라이언트1은 필요한 요청과 응답을 주고 받으면, 서버와의 연결을 종료한다. 클라이언트1과 서버는 연결 종료된 상태
✔ 클라이언트2와 서버가 연결 후, 요청과 응답을 주고 받은 후, 서버와 연결을 종료한다.
✔ 클라이언트3와 서버가 연결 후, 요청과 응답을 주고 받은 후, 서버와 연결을 종료한다.
2. 비연결성 특징
• HTTP는 기본이 연결을 유지하지 않는 모델
• 일반적으로 초 단위의 이하의 빠른 속도로 응답
• 1시간 동안 수천명이 서비스를 사용해도 실제 서버에서 동시에 처리하는 요청은 수십개 이 하로 매우 작음
- ex) 웹 브라우저에서 계속 연속해서 검색 버튼을 누르지는 않는다.
• 서버 자원을 매우 효율적으로 사용할 수 있음
3. 비연결성 한계와 극복.
• 한계
- TCP/IP 연결을 새로 맺어야 함 - 3 way handshake 시간 추가
- 웹 브라우저로 사이트를 요청하면 HTML 뿐만 아니라 자바스크립트, css, 추가 이미지 등 등 수 많은 자원이 함께 다운로드
• 극복
- 지금은 HTTP 지속 연결(Persistent Connections)로 문제 해결
- HTTP/2, HTTP/3에서 더 많은 최적화
4. HTTP 초기 - 연결, 종료 낭비
연결 → 자원 요청/HTML 응답 → 종료
필요한 자원이 있을 때마다, 위 과정을 무한 반복한다.
5. HTTP 지속 연결(Persistent Connections)
- HTTP/2, HTTP/3에서 더 많은 최적화
6. 최대한 Stateless를 기억하자 ⭐⭐
• 정말 같은 시간에 딱 맞추어 발생하는 대용량 트래픽
- ex) 선착순 이벤트, 명절 KTX 예약, 학과 수업 등록
- ex) 저녁 6:00 선착순 1000명 치킨 할인 이벤트 -> 수만명 동시 요청
하지만 최대한 stateless하게 설계하는 것이 중요하다.
👉 Stateless와 Connectionless의 차이
- Stateless : 클라이언트 서버 사이에 상태를 유지하지 않는다
- Connectionless : TCP/IP 커넥션 연결을 지속하지 않는다
❓ 질문 정리 ❗
Q. http 프로토콜과 3way-handshake는 어떤 관계인가?
A. 우선 서버에 대해 TCP/IP 연결을 진행하고(TCP 기반), 연결이 완료되면 HTTP 요청과 응답을 주고 받게된다.(HTTP 기반) 브라우저에서 URL을 입력하고 엔터를 누르면
1) DNS 서버에서 해당 URL의 ip를 조회한다.
2) 해당 ip에 해당하는 서버와 TCP/IP 연결을 한다.
3) 연결이 되면, HTTP 요청/응답을 한다.
[출처] https://www.inflearn.com/questions/313406
Q. HTTP 프로토콜은 TCP 기반인데, TCP는 연결지향, HTTP는 비연결성이라는 특성을 가지고 있는 이유는?
A. 1) TCP는 UDP와는 다르게 3 way-handshkae를 통해 요청을 보낼 서버와 연결할 수 있는지 체크한다는 점에서 연결지향적인 것이다.
2) HTTP는 SOCKET 통신과 다르게 클라이언트가 요청을 할 때마다 연결을 하고 응답이 끝나면 연결을 종료하는 비연결성인 것이다.
TCP가 연결지향적이다라고 말하는 부분과 HTTP가 비연결성이라고 말하는 부분은 다른 부분이다.그렇기 때문에, HTTP가 TCP기반인데 어떻게 HTTP는 비연결성이고 TCP는 연결지향적이냐라고 말하는 것이 모순된 것이 아니다.
[출처] https://www.inflearn.com/questions/523506
'📚 Computer Science > Network' 카테고리의 다른 글
[모든 개발자를 위한 HTTP 웹 기본 지식] 4. HTTP 메서드 - HTTP API를 만들어보자 (0) | 2023.08.11 |
---|---|
[모든 개발자를 위한 HTTP 웹 기본 지식] 3. HTTP 기본 - HTTP 메세지 (0) | 2023.08.11 |
[모든 개발자를 위한 HTTP 웹 기본 지식] 3. HTTP 기본 - Stateful, Stateless (0) | 2023.08.10 |
[모든 개발자를 위한 HTTP 웹 기본 지식] 3. HTTP 기본 (0) | 2023.08.10 |
[모든 개발자를 위한 HTTP 웹 기본 지식] 2. URI와 웹 브라우저 요청 흐름 (0) | 2023.08.08 |