프도의길 2022. 2. 14. 16:59

저번에 HTTP 와 HTTPS 차이점에서 잠깐 소개를 했다 다시한번 HTTP 에 대해 소개 해보겠다

 

HTTP 특징

- 클라이언트 서버구조

- 무상태 프로토콜 (Stateless), 비연결성(Connectionless)

- HTTP 메세지

- 단순함, 확장 가능

 

클라이언트가 서버에 요청을 보내면 서버는 그에 대한 응답을 보내는 클라이언트 서버 구조로 이루어져 있습니다.
HTTP에서는 서버가 클라이언트의 상태를 보존하지 않는 무상태 프로토콜입니다. 
 
카페에서 아메리카노 2잔을 신용카드로 결제한다고 가정해 봅시다. 상태가 유지되는 때에는 점원 A가 고객의 주문 상태에 대해 기억하고 있습니다.
 
 
 
 
 
만약 중간에 점원 A가 아닌 점원 B가 그대로 고객을 접객한다고 가정해 봅시다. 이 경우 점원 A만 고객의 주문을 기억하고 있기 때문에 상태 정보를 다른 점원 B에게 미리 알려줘야 합니다.

 

 
 
 
 
 
 
 
 
이렇게 점원 A가 고객의 상태를 기억하고 있는 것을 상태를 유지한다고 합니다.
무상태에서는 고객이 자신의 주문을 기억하고 있다면 중간에 다른 점원으로 바뀌어도 주문을 할 수 있습니다. 만약 갑자기 고객이 증가하더라도 무상태에서는 점원을 대거 투입할 수 있습니다.
 
 
 
 
 
상태 유지와 무상태는 다음과 같이 정리할 수 있습니다.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

상태 유지 – Stateful

 항상 같은 서버가 유지 되야한다.

  • 상태 유지가 되어야하는 프로토콜이라면 클라이언트A의 요청을 서버1이 기억하고 있기 때문에 항상 서버1이 응답해야한다.

 만약 서버에 장애가 생긴다면?

  • 만약 서버1이 장애가 난다면 유지되던 상태정보가 다 날아가버리므로 처음부터 다시 서버에 요청해야 한다.

❗️무상태 – Stateless

 아무 서버나 호출해도 된다.

  • 무상태 프로토콜이라면 클라이언트A가 요청할 때 이미 필요한 데이터를 다 담아서 보내기 때문에 아무 서버나 호출해도 된다.

 만약 서버에 장애가 생긴다면?

  • 만약 서버1에 장애가 생기도라도 다른 서버에서 응답을 전달하면 되기 때문에 클라이언트는 다시 요청할 필요가 없다.

 스케일 아웃 – 수평 확장 유리

  • 무상태는 응답 서버를 쉽게 바꿀 수 있기 때문에 무한한 서버 증설이 가능하다.

 실무에서의 한계

  • 모든 것을 무상태로 설계할 수 있는 경우도 있고 없는 경우도 있다.
  • 무상태 : 로그인이 필요없는 단순한 서비스 소개 화면
  • 상태 유지 : 로그인
  • 로그인한 사용자의 경우 로그인했다는 생태를 서버에 유지(브라우저 쿠키, 서버 세션, 토큰 등)
  • 상태 유지는 최소한만 사용