### HTTP & HTTPS 란 ?
HTTP(HyperText Transfer Protocol)
인터넷 상에서 클라이언트와 서버가 자원을 주고 받을 때 쓰는 통신 규약HTTPS(HyperText Transfer Protocol Secure)
인터넷 상에서 정보를 암호화하는 SSL 프로토콜을 사용해 클라이언트와 서버가 자원을 주고 받을 때 쓰는 통신 규약즉 HTTP에 공개키 암호화 방식을 사용해 보안을 강화한 것이 HTTPS
1️⃣ 클라이언트 서버 구조
2️⃣ 무상태 프로토콜(Stateless) & 비연결성
3️⃣ HTTP 메시지
4️⃣ 단순함, 확장가능
✅ HTTP의 구조
HTTP는 애플리케이션 계층의 프로토콜로, 신뢰 가능한 전송 프로토콜이라면 무엇이든 사용할 수 있으나 TCP 혹은 암호화된 TCP 연결인 TLS(Transport Layer Security)를 통해 전송된다. 이런 HTTP의 확장성 덕분에, 오늘날 하이퍼텍스트 문서 뿐만 아니라 이미지와 비디오 혹은 HTML 폼 결과와 같은 내용을 서버로 포스트(POST)하기 위해서도 사용되고 필요할 때마다 웹 페이지를 갱신하기 위해 문서의 일부를 가져오는데 사용될 수도 있다.

✅ 클라이언트 - 서버 프로토콜
HTTP는 웹에서 이루어지는 모든 데이터 교환의 기초이며, 클라이언트-서버 프로토콜이다.
클라이언트-서버 프로토콜이란, 수신자 측(보통 웹브라우저)에 의해 요청이 초기화되는 프로토콜을 의미한다.

✅ 클라이언트 - 서버 작동원리
HTTP는 클라이언트가 HTTP 메세지를 통해 서버에 요청을 보낸다.
서버가 요청에 대한 결과를 만들어서 응답이 오면 클라이언트가 응답 결과를 열어서 동작을 하게된다.

클라이언트와 서버들은 (데이터 스트림과 대조적으로) 개별적인 메세지 교환에 의해 통신한다.
요청과 응답 사이에는 여러 개체들이 있는데, 예를 들면 다양한 작업을 수행하는 게이트웨이, 캐시 역할을 하는 프록시 등이 있다.

✅ 무상태(Stateless) 프로토콜
무상태 프로토콜이란 ? 서버가 클라이언트의 상태를 보존하지 않는 것을 말한다.
✔︎ 장점 : 서버 확장성이 높다.
👉 클라이언트가 서버에 접속한 후 계속해서 연결 상태를 관리할 필요가 없다.
무상태인 경우 클라이언트와 서버의 연결 고리가 없기 때문에 요청을 보낼 때마다 아무 서버나 서비스할 수 있다. 따라서 웹 서버를 확장한다고 했을 때 고려할 부분이 적어진다.
✔︎ 단점 : 클라이언트가 추가 데이터를 전송해야 한다.
별도로 상태값을 관리하지 않아 이전 상태값을 기억 못하므로 브라우저 쿠키, 서버 세션, 토큰 등을 이용해 극복한다.

✅ 상태 유지(Stateful) vs 무상태(Stateless) 비교
❗️상태 유지 – Stateful
항상 같은 서버가 유지 되야한다.
상태 유지가 되어야하는 프로토콜이라면 클라이언트A의 요청을 서버1이 기억하고 있기 때문에 항상 서버1이 응답해야한다.
만약 서버에 장애가 생긴다면?
만약 서버1이 장애가 난다면 유지되던 상태정보가 다 날아가버리므로 처음부터 다시 서버에 요청해야 한다.
❗️무상태 – Stateless
✅ Stateless 프로토콜의 실무에서의 한계
모든 것을 무상태로 설계할 수 있는 경우도 있고 없는 경우도 있다.
무상태 : 로그인이 필요없는 단순한 서비스 소개 화면
상태 유지 : 로그인
로그인한 사용자의 경우 로그인했다는 생태를 서버에 유지(브라우저 쿠키, 서버 세션, 토큰 등)
상태 유지는 최소한만 사용
✔️ 서버와 클라이언트의 연결을 유지하는 모델
클라이언트가 서버에 요청을 보내면 응답을 받고 난 후에도 계속 서버에 접속된 상태로 남아있게 된다.
이렇게 서버에 접속하는 클라이언트가 많아질수록 연결을 유지하는 서버의 자원이 계속해서 소모되게 된다.
✔️ 서버와 클라이언트의 연결을 유지하지 않는 모델
클라이언트가 서버에 요청을 보내고 응답을 받게되면 바로 클라이언트와 서버의 연결을 끊어버린다.
따라서 서버는 최소한의 자원만을 사용하게 된다.
✅ HTTP의 비연결성
HTTP는 기본적으로 서버와 클라이언트의 연결을 유지하지 않는 모델이다.
일반적으로 초 단위 이하의 빠른 속도로 응답이 가능하며
1시간 동안 수천명이 서비스를 사용해도 실제 서버에서 동시 처리하는 요청은 수십개 이하로 매우 작다.
예) 수천명이 웹 브라우저에서 계속 연속해서 검색 버튼을 누르지는 않기 때문
따라서 서버 자원을 매우 효율적으로 사용할 수 있다.
✅ 비연결성의 한계
*️⃣ HTTP의 지속 연결(Persistent Connection)

클라이언트와 서버 간 연결, 종료의 시간 낭비
HTTP 지속연결은 웬만한 리소스들을 다 다운 받기 전까지 연결을 유지하고
다운로드가 끝난 후 연결을 종료한다.
*️⃣ STATELESS를 기억하자



❍ HTTP는 단순하다.
❍ HTTP 메시지도 매우 단순하다.
❍ 확장 가능한 기술이다.