HTTP 프로토콜은 기본적으로 연결을 유지하지 않는 모델이다.
정확히 말하면 여기서 말하는 연결은 TCP/IP의 3 Way Hand Shaking 을 통한 논리적 연결 확립을 의미한다.
그렇다면 왜 HTTP는 Connectionless, 즉 비 연결성을 지향하는 것일까? 이를 위해 먼저 연결성 모델이 어떤식으로 작동되는지 알아야한다.
Connectionful - 연결을 유지하는 모델 예시
위 이미지처럼 연결을 유지하는 모델은 각 클라이언트별로 모든 논리적 연결로를 확립해둔다.
이로인해 서버는 각 클라이언트별 세션, 소켓 등 개인별로 스레드를 부여해야하기 때문에 서버 자원의 소모가 심해지고, 메모리 예외가 터지며 서버가 중지 될 수도 있다.
Connectionless - 비연결성 모델
비 연결성 모델은 다음과 같이 요청 - 응답이 종료되면 연결을 종료하는 모델이다. 서버는 연결을 유지 하지 않으므로, 최소한의 자원을 사용할 수 있다.
위의 연결성 모델과 비교하여 단순하고 쉽게 생각했을 때, 우리는 단 하나의 스레드로 모든 클라이언트를 처리할 수 있다. -> 즉 서버에 부담이 적어진다.
비연결성 모델의 장점과 단점
비 연결성 모델은 초 단위 이하의 빠른 속도로 응답이 가능하며, 특정 시간동안 수천명이 서비스를 사용해도 실제 서버에서 동시에 처리하는 요청은 수십개 이하로 매우 적기 때문에 서버 자원을 효율적으로 사용할 수 있다.
예시로, 우리는 한 서블릿 내에서 한가지 작업을 한 후에 여러번 새로고침을 하지 않고, 그 페이지에서 특정 작업(일정 시간 체류) 후에 다른 작업을 수행하기 때문에 사용자의 다음 입력 시간까지 들어온 다른 프로세스들을 처리하며 분산적으로 프로세스를 처리할 수 있다.
다만 비연결성은 연결을 계속 확립해야하는 3way handshake 비용이 추가되지만, 요새는 HTTP/2 , /3 에서 지속연결을 통한 최적화가 잘 진행이 되었다.
'HTTP' 카테고리의 다른 글
[HTTP] HTTP API 만들어보기 2 - HTTP 메서드 정리 (0) | 2025.06.15 |
---|---|
[HTTP] HTTP API 만들어보기 1 - 리소스와 행위의 분류 (0) | 2025.06.15 |
[HTTP] Stateless vs Stateful 어떤 것을 선택해야 할까? (0) | 2025.06.14 |
[HTTP] URL, URI , URN 이 대체 뭔데? (0) | 2025.06.14 |
[HTTP] Cookie - 쿠키 (0) | 2025.05.29 |