HTTP의 특성에 대해서 알아보자.
📌Stateless (무상태)
Stateless는 서버가 클라이언트의 상태를 저장하지 않는 HTTP의 특징이다. 그렇다면 Stateful(상태유지)하면 안될까? 왜 HTTP는 무상태의 특성을 갖는지 알아보자.
확장성 (Scalability)
- 서버가 각 클라이언트의 상태를 유지하지 않으므로, 클라이언트의 수가 증가하더라도 서버의 복잡성이 크게 증가하지 않는다.
- 여러 서버에 트래픽을 분산시키기 쉬워진다. 클라이언트의 상태를 유지할 필요가 없기 때문에 로드 밸런서를 통해 요청을 여러 서버로 분산할 수 있다.
단순성 (Simplicity)
- 각 요청이 독립적이므로, 서버는 각 요청을 독립적으로 처리할 수 있다. 이는 서버 구현을 단순하게 한다.
- 클라이언트와 서버 간의 인터랙션이 단순해진다. 클라이언트는 각 요청에서 필요한 모든 정보를 포함시켜야 하므로, 서버가 클라이언트의 상태를 추적할 필요가 없다. (요청에 대해서 정보를 서버가 저장해서 추적할 필요가 없다)
유연성 (Flexibility)
- 상태를 유지하지 않기 때문에 클라이언트는 언제든지 다른 서버에 요청을 보낼 수 있다. 이는 분산 시스템에서 유연성을 높여준다.
- 실패 복구가 용이하다. 서버가 다운되거나 문제가 발생하면 클라이언트는 다른 서버에 요청을 보낼 수 있다.
📌Stateful (상태 유지)
Stateless와 반대되는 표현은 Stateful인데, 서버가 이전 요청에서의 클라이언트의 상태를 보존한다는 것이다. 만약 모든 요청에 대해서 상태를 유지하게 된다면, 클라이언트 요청에 대한 상태를 해당 요청을 받은 서버가 기억하고 있는 것으로 항상 같은 서버가 유지되어야 할 것이다. 만약 서버 1에서 요청에 대해 장애가 발생한다면 유지되던 정보가 없어져 버리므로 처음부터 다시 요청을 해야 한다.
🤔그럼 Stateless의 특성만 갖고 있나?
아니다. 로그인이 필요 없는 단순한 서비스 같은 경우에는 Stateless하게 설계할 수 있지만, 로그인, 장바구니 같은 서비스라면 상태를 유지해야 되기 때문에 브라우저 쿠키, 서버 세션, 토큰 등을 이용해 상태를 유지한다. 이러한 상태 유지는 최소한만 사용한다.
📌Connectionless (비연결성)
HTTP의 비연결성은 각 요청과 응답이 독립적이며, 서로 연결되어 있지 않다는 것이다.
사실 Stateless와 말이 비슷한게, Stateless는 이전 요청에 대한 상태를 기억하지 않는다. 그러므로 이전 상태를 기억하지 않으니 당연히 연결되어 있지 않은 것이다.
📌HTTP 1.0 - 비지속 연결 (Non-Persistent Connection)
HTTP 1.0버전에서는 이러한 각 요청과 응답마다 TCP 연결을 새로 생성하는 과정에서 매번 3-Way Handshake를 진행하여 연결을 했으므로 오버헤드에 의한 자원 낭비와 성능 저하가 심했다.
📌HTTP 1.1 - 지속 연결 (Persistent Connection)
HTTP 1.1 부터는 비지속 연결의 단점(오버헤드)을 보완하고자 TCP 연결을 유지하면서 여러 HTTP 요청과 응답을 처리하는 방식을 사용하였다.
HTTP 1.1버전 부터는 지속 연결을 도입하여 이전 요청에 대한 응답을 받아야 다음 요청을 보낼 수 있었다.
하지만 이것도 시간이 너무 오래 걸려서 나온 것이 가운데 있는 Pipelining이다. 연결 생성-종료 사이에 response를 기다리지 않고 여러 request를 보내는 방식인데 처리는 순차적으로 진행하기 때문에 첫 번째 요청이 늦어지는 경우 뒤 요청까지 전부 밀리는 지연이 발생한다. (HoL Blocking : 헤드 오브 라인 블로킹)
HTTP 2.0버전 이상부터는 이러한 단점들을 보완하여 하나의 TCP 연결로 더 최적화된 통신을 지원한다.
🤔그럼 HTTP는 Persistence Connection이 가능한데 왜 Connectionless라고 하는 것일까?
사실 이부분이 제일 헷갈렸다. HTTP는 Persistence Connection인데 왜 Connectionless 라고 부르는 것일까 생각해보니까 내가 너무 비지속 연결에 초점을 맞춘것 같다. Persistence Connection는 TCP Connection을 유지하여 3-Way Handshake를 불필요하게 다시 맺지 않아도 되게 함으로 TCP에 초점을 맞춘 말이다. 비 연결성은 각 요청과 응답이 독립적으로 처리되고, 그 과정이 끝나면 연결을 끊는 성질을 말한다.
'CS > Network' 카테고리의 다른 글
[Network] 3-Way Handshake란 (0) | 2024.05.22 |
---|---|
[Network] OSI 7계층 모델 (0) | 2024.05.20 |
컴퓨터 네트워크의 계층 (0) | 2023.06.19 |
컴퓨터 네트워크의 품질 기준 (0) | 2023.06.14 |
컴퓨터 네트워크의 소개 (0) | 2023.06.05 |