모바일이나 웹서비스에서 가장 많이 쓰이는 통신 방식
(참고)
웹 표준 기술 HTML, JavaScript, CSS는 ‘Client Side Script’ (클라이언트 컴퓨터에서 동작하는 코드)로, 서버에 저장되어 있고 이를 웹 브라우저로 다운로드 받아서 클라이언트 컴퓨터에서 실행시킨다.
이때, 데이터를 받아오는 프로토콜이 ‘HTTP’이다.
클라이언트는 서버에 요청을 보내고 응답을 대기한다.
서버가 요청에 대한 결과를 만들어 응답한다.
이때, 클라이언트와 서버는 서로 HTTP라는 프로토콜을 이용해 소통한다.
접속을 끊는 순간, 서버가 클라이언트의 이전 상태 정보를 유지하지 않는 특성을 가지고 있다. (특정 상태를 유지하지 않는다)
장점 : 서버 확장성 높음 (스케일 아웃) → 중요
단점 : 클라이언트가 추가 데이터 전송
상태 유지 / 무상태
상태 유지(Stateful) | 무상태(Stateless) |
---|---|
항상 같은 서버가 유지되야 한다. | 아무 서버나 호출해도 된다. |
중간에 다른 서버로 바뀌면 안된다. | 중간에 다른 서버로 바뀌어도 된다. |
다른 서버로 바뀔 때 상태 정보를 바뀌는 서버에게 미리 알려줘야 한다. | 갑자기 클라이언트의 요청이 증가해도 서버를 대거 투입할 수 있다. |
서버 에러 시, 유지되던 상태정보가 다 날아가므로 처음부터 다시 요청해야 한다. | 서버 에러 시, 다른 서버에 응답을 전달하면 되므로 클라이언트는 다시 요청할 필요가 없다. |
예) 로그인 화면 - 로그인 상태를 서버에 유지(브라우저 쿠키, 서버, 세션, 토큰 등) | 로그인이 필요없는 단순한 서비스 소개 화면 |
상태 유지는 최소한만 사용한다 (정보 공유를 위한 비용이 비싸지기 때문) | 무상태는 응답 서버를 쉽게 바꿀 수 있다 → 무한한 서버 증설 가능 (스케일 아웃 - 수평 확장 유리) |
+) 대규모 트래픽이 발생하는 서비스는 서버가 여러 대인데, 서버가 많아질수록 서버 간의 정보 공유를 위한 비용이 부담된다. 그러나 Stateless하게 사용할 경우 정보 공유가 최소화되어 비용 부담을 최소화할 수 있다
Stateless를 통한 Stateful 한계 극복
클라이언트에서 이전에 자신이 요청한 정보를 저장해놓고 해당 메시지를 함께 보내는 것
예) 순서
1. 'A' 정보 요청
2. 'A' 정보 응답
3. 'A' + 'B' 정보 요청
4. 'A' + 'B' 정보 응답
출처 : https://kotlinworld.com/97#Connectionless
(더보기) https://developer.mozilla.org/ko/docs/Web/HTTP/Basicsof_HTTP/Evolution_of_HTTP#http0.9–원-라인프로토콜
[네트워크/HTTP] HTTP란? - 특징(무상태와 비 연결성) - 하나몬
HTTP(HyperText Transfer Protocol)의 특징
[HTTP] 1. HTTP 메세지는 어떻게 구성되었는가? Start Line, Header Body로 보는 HTTP 메세지
[네트워크/HTTP] HTTP 메세지(message) - 요청과 응답 구조 - 하나몬
HTTP의 진화 - HTTP | MDN