[HTTP] HTTP의 특징 ( Stateless, Connectionless )

업데이트:




✅ HTTP란

초기에는 HTML과 같은 하이퍼미디어 문서를 주로 전송했지만, 최근에는 Plain text, JSON, XML 등 다양한 형태의 정보도 전송하는 애플리케이션 레이어 프로토콜이다.
초기에는 웹 브라우저와 웹 서버 간의 커뮤니케이션을 위해 디자인되었지만 최근에는 모바일 애플리케이션 및 IoT 등과의 커뮤니케이션과 같이 다른 목적으로도 사용되고 있다.
HTTP는 클라이언트가 요청을 생성하기 위한 연결을 연 다음 응답을 받을 때까지 대기하는 전통적인 클라이언트-서버 모델을 따른다.
HTTP는 무상태 프로토콜이며, 이는 서버가 두 요청 간에 어떠한 상태나 데이터를 유지하지 않음을 의미한다. (상태를 유지하기 위한 노력으로 Cookie와 Session을 사용한다.)
일반적으로 안정적인 TCP/IP 레이어를 기반으로 사용하는 응용 프로토콜이다.



✅ HTTP 특징

📌 클라이언트 서버 구조

Request Response 구조로 클라이언트는 서버에 요청을 보내고, 응답을 대기한다. 서버가 요청에 대한 결과를 만들어서 응답한다.



📌 무상태(Stateless) 프로토콜

무상태 프로토콜이란 서버가 클라이언트의 상태를 보존하지 않는 특징이다. 서버의 확장성에 용이하다는 장점이 있지만, 클라이언트가 추가 데이터를 전송해야 하는 단점이 있다.



상태 유지(Stateful)란?
클라이언트의 요청1에 대한 상태를 해당 요청을 받은 서버A가 기억하고 있는 것으로 항상 같은 서버A가 유지되어야 할 것이다. 만약 서버A에서 장애가 난다면 유지되던 상태 정보가 없어져 버리므로 처음부터 다시 요청을 해야한다.



무상태 프로토콜은 클라이언트에 요청을 보낼때 필요한 데이터를 항상 담아서 전송하기 때문에 어떠한 서버든지 상관없이 호출해서 사용할 수 있다. 때문에 서버가 고장나도 다른 서버로 대체하여 사용가능하고, 서버의 무한증설이 가능하다!



무상태(stateless)의 한계
로그인이 필요 없는 단순한 서비스 소개 화면 같은 경우엔 무상태로 설계할 수 있지만, 로그인이 필요한 서비스라면 유저의 상태를 유지해야 되기 때문에 브라우저 쿠키, 서버 세션, 토큰 등을 이용해 상태를 유지한다. 이러한 상태 유지는 최소한만 사용한다.



📌 비연결성 (Conectionless) 프로토콜

HTTP는 기본적으로 연결을 유지하지 않는 모델이다. 일반적으로 초 단위 이하의 빠른속도로 응답하고, 수천명이 서비스를 사용해도 서버에서 동시에 처리하는 요청은 수십개 이하로 매우 작기 때문에 서버 자원을 매우 효율적으로 사용할 수 있다.



연결성 모델 (Connection Oriented) TCP/IP의 경우 기본적으로 연결을 유지한다. 클라이언트는 요청을 보내지 않아도 계속 연결을 유지해야 한다. 이러한 경우 연결을 유지하는 서버의 자원이 계속 소모가 된다.



비연결성 프로토콜은 TCP/IP 연결을 새로 맺어야 하기때문에 3 way handShake 시간이 추가되고, 웹브라우저로 사이트를 요청하면 HTML뿐만 아니라 자바스크립트, CSS, 이미지 등 수많은 자원이 함께 다운로드 되어 시간이 오래 걸리는 단점이 있다.

그러나 최근에는 HTTP 지속연결 (Persistent Connections) 로 문제를 해결한다.

태그:

카테고리:

업데이트:

댓글남기기