twocowsong

[모든 개발자를 위한 HTTP 웹 기본 지식 - 11] 본문

IT/HTTP

[모든 개발자를 위한 HTTP 웹 기본 지식 - 11]

WsCode 2022. 1. 22. 16:12

무상태 프로토콜

스테이스리스(Stateless) - 서버가 클라이언트의 상태를 보존하지 않는다.
장점 : 서버 확장성 높음 , 단점 : 클라이언트 추가 데이터 전송

만약 상태를 유지하게된다면 아래와 같은 상황이된다.

// =========================================
상태 유지 - Stateful
• 고객: 이 노트북 얼마인가요?
• 점원: 100만원 입니다.

• 고객: 2개 구매하겠습니다.
• 점원: 200만원 입니다. 신용카드, 현금중에 어떤 걸로 구매 하시겠어요?

• 고객: 신용카드로 구매하겠습니다.
• 점원: 200만원 결제 완료되었습니다.

너무 평범한 대화라 이상할것이 없다.
만약 점원이 바뀐다면?

// =========================================
상태유지 - Stateful, 중간에 점원이 바뀌면?
• 고객: 이 노트북 얼마인가요?
• 점원A: 100만원 입니다.

• 고객: 2개 구매하겠습니다.
• 점원B: ? 무엇을 2개 구매하시겠어요?

• 고객: 신용카드로 구매하겠습니다.
• 점원C: ? 무슨 제품을 몇 개 신용카드로 구매하시겠어요?

점원B,C 는 문맥 상황을 모르기에 정상적으로 흐를수 없다.
그러면 상태를 유지하게된다면?

// =========================================
상태유지 - Stateful
• 고객: 이 노트북 얼마인가요?
• 점원: 100만원 입니다. (노트북 상태 유지)

• 고객: 2개 구매하겠습니다.
• 점원: 200만원 입니다. 신용카드, 현금중에 어떤 걸로 구매 하시겠어요?
(노트북, 2개 상태 유지)

• 고객: 신용카드로 구매하겠습니다.
• 점원: 200만원 결제 완료되었습니다. (노트북, 2개, 신용카드 상태 유지)

상태가 유지되어서 정상적으로 결제를 할수있다.
이제 무상태의 상태를 보자.

// =========================================
무상태 - Stateless
• 고객: 이 노트북 얼마인가요?
• 점원: 100만원 입니다.

• 고객: 노트북 2개 구매하겠습니다.
• 점원: 노트북 2개는 200만원 입니다. 신용카드, 현금중에 어떤 걸로 구매 하시겠어요?

• 고객: 노트북 2개를 신용카드로 구매하겠습니다.
• 점원: 200만원 결제 완료되었습니다

점원은 마지막의 고객의 말로만 결제를 진행할 수 있게된다.
이제 무상태의 점원이 바뀌게 되는 경우를 보자.

// =========================================
무상태 - Stateless, 중간에 점원이 바뀌면?
• 고객: 이 노트북 얼마인가요?
• 점원A: 100만원 입니다.

• 고객: 노트북 2개 구매하겠습니다.
• 점원B: 노트북 2개는 200만원 입니다. 신용카드, 현금중에 어떤 걸로 구매 하시겠어요?

• 고객: 노트북 2개를 신용카드로 구매하겠습니다.
• 점원C: 200만원 결제 완료되었습니다.

상태유지에서는 점원이바뀌면 문제가 발생하였는데 무상태에서는 고객이 필요한정보를 요청시에 모두 제공함으로 문제가 발생하지않는다. 그래서 무상태에서는 점원이 중간에 바뀌어도 문제가 발생하지 않는다. 이점이 클라이언트 아키텍쳐에서는 무한증식에 가까운 확장성을 보여준다. (단 문제는있습니다.)


위 상황을 비유하면 고객이 갑자기 늘어남에 따라 점원을 대거 투입할 필요가 없다.
즉 고객이 갑자기 늘어나도 서버를 갑자기 확장시킬 필요는 없다. (무상태일경우)
무상태는 상태를 유지하지 않기 때문에 쉽게 증설 시킬수 있다.

 


무상태이기 때문에 서버가 중간에 죽어도 클라이언트는 자연스럽게 다음서버에게 요청 후 진행을 할수 있다.


무상태는 클라이언트의 값을 가지고 있지 않기 때문에 서버를 늘리기 쉽다.

단 무상태도 한계가 있다.