CS/네트워크

[네트워크] HTTP (무상태성, 비연결성)

연듀 2024. 1. 31. 20:16

HTTP

HTML 문서와 같은 리소스들을 가져올 수 있도록 해주는 프로토콜

 

hypertext 문서 간의 링크를 통해서 연결할 수 있는 html을 전송하는 프로토콜로 시작

지금은 html 텍스트 뿐만 아니라 http 메시지에 모든 것을 전송

 

http1/1.1 이 가장 많이 사용되는 버전

2, 3은 성능 개선에 초점

1.1이나 2는 tcp 프로토콜 위에서 동작

3은 udp 기반으로 개발됨

tcp 프로토콜이 속도가 느리기 때문에 성능 개선을 위해 udp 프로토콜 위에 애플리케이션 레벨에서 최적화도록 새로 설계된게 HTTP3

 

 

클라이언트 서버 구조

HTTP는 클라이언트 서버 구조로 되어있다.

양쪽이 독립적으로 진행할 수 있게 된다.

 

Request Response 구조

  • 클라이언트는 서버에 요청을 보내고, 응답을 대기
  • 서버가 요청에 대한 결과를 만들어서 응답

 

무상태 프로토콜(stateless)

서버가 클라이언트의 상태를 보존X

장점: 서버 확장성 높음(스케일 아웃)

단점: 클라이언트가 추가 데이터 전송

 

클라이언트A는 계속 서버 1이랑만 통신해야 한다.

 

 

서버가 장애가 날 경우 중계 서버가 다른 서버로 보내면 된다.

 

 

stateless 실무 한계:

상태 유지를 해야 하는 로그인 기능 같은 경우가 있다.

이런 경우 일반적으로 브라우저 쿠키와 서버 세션 등을 사용해서 사용자의 로그인 상태를 서버에 유지한다.

 

또 데이터를 너무 많이 보내야 하는 단점이 있다.

 

💡 상태 유지는 최소한만 사용하고, 꼭 필요한 경우에만 사용해야 한다.

 

 


HTTP의 비연결성

클라이언트가 서버에게 요청을 보내고, 서버가 응답을 보낸 후에 연결이 끊어짐

  • 1시간 동안 수천명이 서비스를 사용해도 실제 서버에서 동시에 처리하는 요청은 수십개 이하로 매우 작음
  • 예) 웹 브라우저에서 계속 연속해서 검색 버튼을 누르지는 않는다.
  • 서버 자원을 매우 효율적으로 사용할 수 있음

 

한계

  • TCP/IP 연결을 새로 맺어야 함
    • 3 way handshake 시간 추가
    • 웹 브라우저로 사이트를 요청하면 HTML 뿐만 아니라 자바스크립트, css, 추가 이미지 등등 수 많은 자원이 함께 다운로드
  • 지금은 HTTP 지속 연결(Persistent Connections)로 문제 해결
  • HTTP/2, HTTP/3에서 더 많은 최적화

 

 

연결 하고, 요청하고 쭉 응답 받은 후에 연결 종료

http3은 UDP 프로토콜을 사용하며 연결 속도 자체를 줄였다.

 

 

💡 항상 stateless한 방식으로 설계해야 한다.