복습을 위한

무상태 프로토콜(Stateless) 본문

http

무상태 프로토콜(Stateless)

ho042479 2023. 11. 16. 17:11

Http특징 중 무상태 프로토콜을 알아보자

 

예시

상태유지(stateful)

  • 클라이언트: 이 노트북 얼마인가요?
  • 서버1: 100만원입니다 (노트북 상태 유지)
  • 클라이언트: 2개 구매할게요
  • 서버1: 200만 원입니다. 신용카드, 현금 중에 뭐로 계산하시겠어요? (노트북, 2개 상태 유지)
  • 클라이언트: 신용카드요
  • 서버1: 200만 원 결제되었습니다. (노트북, 2개, 신용카드 상태 유지)

위와 같이 클라이언트가 이전에 말한 것을 서버에게 다시 말하지 않는 것(서버가 클라이언트의 상태를 저장)을 stateful, 상태 유지라고 한다.

이때 근데 중간에 서버가 바뀌면 문제가 발생한다.

  • 클라이언트: 노트북 얼마죠?
  • 서버1: 100만 원입니다.
  • 클라이언트: 2개 구매할게요
  • 서버2: ?? 무엇을 2개 사신다는 거예요?
  • 클라이언트: 신용카드로 구매할게요
  • 서버3: ?? 무엇을, 몇 개, 신용카드로 구매하신다는 거예요?

위와 같이 서버가 전혀 클라이언트의 요청을 알아듣지 못한다. 장애가 발생하는 것이다.->항상 같은 서버가 유지되어야한다

 

그럼 무상태, stateless의 예시를 보자

  • 클라이언트: 노트북 얼마죠?
  • 서버1: 100만 원입니다.
  • 클라이언트: 노트북 2개 구매할게요
  • 서버2: 노트북 2개는 200만 원입니다. 신용카드, 현금 중에 뭐로 결제하시겠어요?
  • 클라이언트: 노트북 2개 신용카드로 구매할게요.
  • 서버3: 200만 원 결제 완료되었습니다.

위처럼 stateless한 상황에서는

클라이언트가 요청할 때마다 자신이 필요한 모든 정보를 요청하기 때문에 서버가 아무리 중간에 바뀌어도 적절할 응답을 받을 수 있다.

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

클라이언트A가 모든 정보(노트북, 2개)를 담아서 서버1에 요청을 하면, 서버1는 상태를 보관하지 않고 응답만 한다

 

정리하자면

  • stateful 상태유지: 중간에 다른 서버로 바뀌면 안된다. 바뀌려면 상태 정보를 다른 서버에게 미리 알려줘야 한다.
  • stateless 무상태: 중간에 다른 서버로 바뀌어도 된다. 갑자기 요청이 증가해도 서버를 대거 투입할 수 있다.

stateless는 응답 서버를 쉽게 바꿀 수 있기 때문에, 무한한 서버 증설 가능해진다. 클라와 소통하던 서버가 장애가 나도 다른 서버로 대체해도 아무런 문제가 없다.

stateful하다면 항상 같은 서버가 유지되어야 하며 어떤 클라이언트가 소통하던 서버가 장애가 난다면 클라이언트는 요청 과정을 처음부터 다시 해야 한다.

따라서 최대한 stateless하게 소프트웨어를 설계하는 것이 중요하다.

stateless 실무 한계

모든 것을 무상태로 설계할 수 없는 경우도 있다.

예를 들어 로그인 같은 경우에는 로그인이 되어 있는 상태를 유지해줘야만 한다.

일반적으로 로그인 같은 경우는 브라우저 쿠키와 서버 세션 등을 사용해서 상태 유지한다.

중요한 것은 기본적으로 stateless하게 설계하고, 필요할 때만 stateful하게 설계해야 한다.

웹어플리케이션을 설계할 때는 최대한 무상태로. 필요한 경우에만 상태 유지해야 한다.

 

 

무상태는 클라이언트 요청이 증가해도 서버를 대거 투입할 수 있다.

응답서버를 쉽게 바꿀 수 있다  --> 무한한 서버 증설 가능

 

 

 

 

참고https://www.inflearn.com/course/http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC/dashboard

'http' 카테고리의 다른 글

http메세지  (0) 2023.11.17
비연결성  (0) 2023.11.16
HTTP/클라이언트 서버 구조  (0) 2023.11.16
웹 브라우저 요청흐름  (0) 2023.11.16
URI  (0) 2023.11.16