HTTP 프토토콜의 특성에 대해 살펴보자.
1. Client - Server Architecture (서버 - 클라이언트 구조)
HTTP는 Client - Server Architecture 기반 프로토콜이다.
클라이언트는 서버에게 HTTP Request를 전송하며, 서버는 클라이언트에게 요청에 대한 HTTP Response를 전송한다.
2. Stateless (무상태)
HTTP는 Stateless 프로토콜이다.
이를 이해하기 위해 Stateful과 Stateless의 의미를 비교해 보자.
Stateful은 서버가 HTTP 요청을 보낸 클라이언트와 관련된 상태를 기억하는 것을 의미한다.
여기서 말하는 상태란, 쉽게 말해 클라이언트에 대한 Context다.
상태를 기억하는 프로토콜의 대표적인 예시로 TCP의 3-Way Handshaking을 떠올릴 수 있다.
이왕이면 클라이언트의 상태를 기억하는게 좋을 것 같다고 생각할 수 있는데, 실상은 단점이 더 많다.
우선 애초에 클라이언트의 상태 정보를 유지하는 것 자체가 서버에 큰 부담이 된다.
또한 서버는 하나가 아니라 여러 대로 구성될 수 있으므로, 통신해야 할 서버가 중간에 바뀔 경우 문제가 생길 수 있다.
예를 들어 로드 밸런싱으로 인해 통신할 서버가 변경된다면, 각 서버는 클라이언트의 상태 정보를 공유해야 하며 이 또한 서버에 큰 부담이 된다.
반면 Stateless는 서버가 HTTP 요청을 보낸 클라이언트와 관련된 상태를 기억하지 않는 것을 의미한다.
이 경우 서버는 클라이언트의 상태 정보를 유지할 필요도 없고, 통신해야 할 서버가 중간에 바뀌어도 문제가 발생하지 않는다.
즉, 무한한 서버 증설이 가능하다는 의미이다.
그러나 실무에서 로그인 등의 기능을 개발해야 할 경우 최소한의 Stateful한 설계는 필수적이라고 한다.
3. Persistent Connection (지속 연결)
지속 연결을 설명하기 앞서, HTTP는 기본적으로 비연결형 프로토콜이며 TCP는 연결형 프로토콜임을 알아야 한다.
HTTP 1.0 이하 버전의 경우 비지속 연결 방식을 지원했다.
이는 3-Way Handshaking을 통해 TCP 연결을 수립한 후, 요청과 응답을 주고받고 연결을 종료하는 방식이다.
그러나 웹 브라우저로 사이트를 요청 시, HTML 파일 뿐만 아니라 자바스크립트 등 수많은 자원을 함께 요청해야 하므로 이러한 방식은 비효율적이었다.
이에 HTTP 1.1 이상 버전부터 지속 연결 방식을 지원하게 된다.
이는 하나의 TCP 연결 상에서 여러 개의 요청과 응답을 주고받을 수 있는 방식이기 때문에, 비지속 연결 방식에 비해 더 빠르게 HTTP 요청과 응답을 처리할 수 있게 되었다.
Reference
https://www.inflearn.com/course/http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC/dashboard
'네트워크' 카테고리의 다른 글
HTTP 쿠키란? (0) | 2024.07.15 |
---|---|
HTTP API - 컬렉션과 스토어 (0) | 2024.07.13 |
HTTP 메서드 속성 (0) | 2024.07.11 |
HTTP 메시지 구조 (0) | 2024.07.10 |
TCP/IP 4 Layer PDU (Protocol Data Unit) (0) | 2024.07.02 |