본문 바로가기
WEB/HTTP

HTTP 기본개념 (HTTP/1.1, Stateful, Stateless, 비연결성, 지속연결)

by 정권이 내 2023. 2. 28.

HTTP 기본개념 (HTTP/1.1, Stateful, Stateless, 비연결성, 지속연결)

 

HTTP(Hypertext Transfer Protocol)는 인터넷에서 웹페이지와 같은 리소스를 전송하기 위한 프로토콜입니다. HTTP는 클라이언트와 서버 간에 요청과 응답을 전송하며, 일반적으로 웹 브라우저에서 사용됩니다.

전송되는 데이터의 종류는 우리가 주로 사용하는 이미지, 텍스트, 영상 뿐만아니라 json, xml 등등 모든 형태의 데이터를 전송할수 있습니다.

 

HTTP 버전

  • HTTP/0.9

    • HTTP의 초기버전으로 단순히 HTML 문서를 전송하는 용도로 사용되었습니다. GET 메소드만 지원했으며, 응답 메시지는 HTML 문서 자체였고 HTTP 헤더는 없었습니다.
  • HTTP/1.0

    • HTTP/0.9에서 발전하여, 다양한 요청 메소드(GET, POST...)와 상태 코드(200, 404 등)를 지원하게 되었습니다. 또한 HTTP 헤더를 지원하기 시작했으며 클라이언트-서버간 복잡한 통신이 가능해졌습니다.
    • TCP/IP 방식이 적용되었기 때문에 연결 지연과 오버헤드가 발생하는 단점이 있었습니다.
  • HTTP/1.1

    • 현재 가장 많이 사용되는 버전이며 지속적 연결(Persistent Connection)과 Keep-Alive 기능이 추가되어 하나의 TCP 연결로 여러 개의 요청과 응답을 처리할 수 있게 됬습니다.
    • 파이프라이닝(Pipelining) 기능으로 한번에 여러개의 요청을 보내 성능이 향상되었고 캐싱, 압축, 인증, 프록시등 다양한 기능이 추가되었습니다.
  • HTTP/2

    • HTTP/1.1 버전에서 성능 향상을 위주로 업그레이드된 버전입니다.
  • HTTP/3

    • 기존 HTTP의 TCP/IP 프로토콜 기반에서 HTTP3 부터는 UDP 프로토콜을 사용하는 QUIC(Quick UDP Internet Connection) 프로토콜을 사용합니다. 3 way handshake가 강제되는 TCP/IP의 혼잡도를 해결할수있고 HTTP2의 성능개선이 주로 이루어졌습니다.

 

HTTP 연결 유지방식, Stateless / Stateful

HTTP 통신에서 서버, 클라이언트간 연결은 Stateful, Stateless 방식을 사용합니다. 각각 서버, 클라이언트간에 연결을 유지하는것과 서버가 클라이언트의 상태를 저장하고있는지에 따른 차이점이 있습니다.

 

Stateful, 상태 유지 방식

  • Stateful은 클라이언트, 서버간 연결을 유지하고 서버는 클라이언트의 상태를 가지고 있습니다.
  • 서버는 클라이언트의 상태를 알기때문에 클라이언트는 요청시 필요한 데이터만 전송하고 서버는 유지중인 상태 정보를 바탕으로 응답을 생성합니다.
  • 상태정보는 쿠키(Cookie)나 세션(Session) 등의 방식으로 유지되는데 쿠키는 클라이언트에서 상태정보를 유지하는 방식이고 세션은 서버에서 상태정보를 유지하는 방식입니다.
  • 웹사이트에서 로그인 상태, 장바구니 정보등을 관리할때 사용됩니다.

 

Stateless 상태 비유지 방식

  • Stateless는 서버, 클라이언트간 연결을 유지하지않고 요청, 응답시 필요한 정보를 모두 전송합니다.
  • RestAPI에서 주로 사용되며 각각의 요청들은 독립적이고 서버는 클라이언트의 상태정보를 유지하지 않습니다.

 

Stateful, Stateless 장단점

  • Stateful은 서버측에서 상태정보를 유지해야 하므로 서버에서 요청 처리에 대한 오버헤드가 발생할수 있지만 Stateless의 경우 상태정보를 유지하지 않으므로 요청에 대한 오버헤드가 적습니다.
  • Stateless의 경우 클라이언트에서 상태정보를 유지하므로 보안문제, 상태정보의 일관성에 대한 문제가 발생할수 있습니다.
  • 실무에서는 상태유지는 최소한으로 사용하는것을 목표로하고 대부분의 경우 Stateless 방식을 사용합니다.

 

비연결성(Connectionless), 지속연결(Persistent Connection)

HTTP는 기본적으로 클라이언트와 서버간 연결을 유지하지 않는 방식을 사용하는데 빠른 응답속도와 동시에 수많은 트래픽을 처리하는데 있어서 서버 자원을 효율적으로 사용할수 있습니다.

한계점도 존재하는데 서로 연결을 유지하지 않기때문에 TCP/IP 프로토콜에 따라 연결과 종료를 반복할때 요청에 대한 응답을 여러번 반복하게 되면서 시간과 서버의 자원이 낭비됩니다.

 

Connectionless 방식

img

 

이 방식에서 성능을 개선하고자 HTTP/1.1 버전부터는 Keep-Alive 라는 기능을 이용해 지속연결(Persistent Connection) 방식으로 여러개의 요청, 응답을 서버, 클라이언트간 연결을 유지하면서 처리하게 되었습니다.

 

Persistent Connection 방식

img

 

 

 

출처 : 인프런 - 우아한 형제들 기술이사 김영한의 스프링 완전 정복 (모든 개발자를 위한 HTTP 웹 기본)

반응형

댓글