HTTP (HyperText Transfer Protocol) 특징

  • 클라이언트 서버 구조
  • 무상태 프로토콜 (Stateless)
  • 비 연결성 (Connectionless)
  • 단순함, 확장가능

 

Stateless ?

Stateful과는 반대로 서버에서 클라이언트의 상태를 저장하지 않는 것을 말합니다.

Stateless 구조에서 서버는 단순하게 요청에 대해 응답을 하는 역할만 하고, 세션 관리는 Client에게 있습니다.

즉, 서버의 응답이 클라이언트의 세션 상태와 독립적입니다.

따라서, 이러한 Stateless 구조는 Client와의 세션 정보를 서버에 저장하지 않습니다. 다만, 필요에 따라 DB에 저장하며 관리할 수 있습니다.

 

아래와 같이 응답할 수 있는 서버 3개가 있고 중계서버(LoadBalancer 역할)가 있는 구조를 살펴보겠습니다.

 

로그인과 같은 세션관리가 필요한 서비스에 대한 요청이 서버1에 들어왔다고 가정해보겠습니다.

Stateful 구조에서는 서버에 세션 정보를 저장했지만, Stateless 구조에서는 서버에 세션 정보를 저장하지 않고 DB에 저장합니다.

따라서 클라이언트1의 요청이 어떤 서버로 전달되던지 클라이언트1 정보에 접근할 수 있습니다.

 

이렇게 서버에서 세션 정보를 관리하지 않기 때문에 로드밸런서가 최초 서버로 계속 연결되도록 신경 쓸 필요가 없고

Scale-out에 유리합니다. (Stateful 같은 경우에는 최초 서버와 연결 되도록 해야하고 Scale-out시 세션정보를 옮겨주는 부가적인 작업 필요)

대표적인 Stateless 프로토콜로 HTTP, UDP가 있습니다.

 

 

비연결성 (Connectionless)

HTTP는 서버에서 클라이언트와의 연결을 계속 유지하는게 아니라 데이터를 주고 받으면 연결을 종료하는 모델입니다.

일반적으로 초 단위 이하의 빠른 속도로 응답하기 때문에 서버 자원을 효율적으로 사용할 수 있습니다. (연결 유지 X 때문에)

 

비연결성 (Connectionless) 한계 와 극복

  • TCP/IP 연결을 새로 맺어야 한다 - 3 way handshake 시간 추가
  • 웹 브라우저로 사이트를 요청하면 HTML 뿐만 아니라 JS, css, 추가 이미지 등 수 많은 자원이 함께 다운로드된다 (이때마다 다시 연결)
  • 자원을 보낼 때마다 연결을 반복하는 것은 비효율적이기 때문에 지금은 HTTP 지속 연결(Persistent Connections)로 문제를 해결한다.

 

참고 :

 

인프런 : 모든 개발자를 위한 HTTP 웹 기본 지식 - 김영한 

 

https://5equal0.tistory.com/entry/StatefulStateless-Stateful-vs-Stateless-%EC%84%9C%EB%B9%84%EC%8A%A4%EC%99%80-HTTP-%EB%B0%8F-REST

 

[Stateful/Stateless] Stateful vs. Stateless 서비스와 HTTP 및 REST

Contents 0. Prologue 1. Stateful Service 2. Stateless Service 3. Why Stateless Service 4. Stateless Service 및 HTTP, 그리고 REST Stateful/Stateless 서비스의 개념을 알아보고, 이를 바탕으로 Stateless..

5equal0.tistory.com

 

'HTTP' 카테고리의 다른 글

URI ? URN ? URL ?  (0) 2021.12.15

URI (Uniform Resource Idenfier) ? 

URI는 단어 뜻대로 리소스를 나타내는 유일한 식별자를 말합니다. 그리고 URI는 URL, URN 두 종류가 있습니다.

여기서 Resource는 html 파일, text 파일, 이미지 파일 등 같은 정적 컨텐츠 뿐만 아니라 은행장고, 장바구니 같은 요청에 따라 결과값이 달라지는 동적 컨텐츠도 포함합니다.

 

URL (Umniform Resource Locator) ?

URL은 특정서버의 리소스에 대해 위치를 나타낸 것입니다..

 

아래는 URL 포맷입니다.

scheme://[userinfo@]host[:port][/path][?query][#fragment]

  • scheme : 프로토콜을 나타냅니다. (ex. http, https, ftp 등)
  • userinfo : URL에 사용자정보를 포함해서 인증
  • host       : 호스트명(도메인명 또는 IP 주소를 직접 사용)
  • PORT     : 접속 포트
  • path       : 리소스 경로   (ex. /manage/post)
  • query     : key=value 형태로 웹서버에 제공하는 파라미터 (ex. ?q=hello&hl=ko)
  • fragment : html 내부 북마크 등에 사용하는 것으로 서버에 전송하는 정보는 아닙니다. 

 

URN (Uniform Resource Name) ?

urn:example:animal:ferret:nose <- 처럼 실제로 리소스에 주소가 아닌 이름을 부여하는 것입니다.

URL은 리소스의 위치가 이동하게 되면 URL이 더이상 유효하지 않게 됩니다.

하지만 URN은 위치를 표현한게 아니라 이름을 부여한 것이기 때문에 리소스를 옮기더라도 찾을 수 있어야합니다.

그렇게 되려면 Name을 넣었을 때 리소스 결과가 나오도록 매핑이 되어있어야하는데 이게 보편적이지 않고 어려워서 잘 사용하지 않습니다.

'HTTP' 카테고리의 다른 글

HTTP 정리  (0) 2021.12.15

+ Recent posts