본문 바로가기

Dev/HTTP

HTTP의 성질 Stateless

Stateless 스테이스리스 라고 불리우는 이것은 HTTP의 대표적인 성질 중의 하나이다.

서버가 클라이언트의 상태를 보존하지 않겠다라는 의미

Stateless의 성질을 알아보기 위해서는 이와 반대되는 Stateful를 비교하여 알아두는 것이 좋다.


Stateful의 특징을 알아보기 위해 예를 들어보려고 한다.

아래의 그림은.. 그렇다.. 31가지 아이스크림이다.. 필자가 자주 시켜먹는 아이스크림이다..

31가지 아이스크림

31가지 아이스크림을 방문하게 되었고.. 아래와같이 3명의 직원이 있다고 가정하자.. 실제로도 3명이상 역할을 나누어 일을한다.

31가지 아이스크림 직원들

상태 유지 Stateful 상태일 경우

손님 : 31가지 아이스크림 파인트로 주세요

직원A : 7900원 입니다. (아이스크림 종류 상태 유지) 신용카드, 현금중에 어떤걸로 결재하시겠어요?

 

손님 : 신용카드로 구매하겠습니다.

직원A : 7900원 결재 완료되었습니다. (신용카드 상태 유지) 세가지 맛 골라주세요!

 

손님 : 민트초코봉봉, 아몬드봉봉, 뉴욕치즈 맛으로 주세요

직원A : 네 3가지 맛 담았습니다. (아이스크림 종류, 신용카드 상태 유지)


무상태 Stateless 상태일 경우 - 중간에 직원이 바뀌는 경우에도 주문 가능!

손님 : 31가지 아이스크림 파인트 얼마인가요?

직원A : 7900원 입니다. 

 

손님 : 31가지 아이스크림 파인트 신용카드로 구매하겠습니다.

직원B : 7900원 결재 완료되었습니다. 어떤 맛으로 담아드릴까요?

 

손님 : 31가지 아이스크림 파인트를 신용카드로 구매하고 민트초코봉봉, 아몬드봉봉, 뉴욕치즈 맛으로  담아주세요

직원C : 7900원 결재 완료되었습니다.

 

Stateful vs Stateless 차이점

상태 유지(Stateful) : 중간에 다른 직원으로 바뀌면 안된다.

무상태(Stateless) : 중간에 다른 직원으로 바뀌어도 된다.

  • 갑자기 많은 손님이 몰려와도 직원을 대거 투입하여 일처리할 수 있다
  • 클라이언트의 요청이 증가해도 서버를 대거 투입할 수 있다.

무상태는 응답 서버를 쉽게 바꿀 수 있다. 무한 서버 증설


정리하면 다음과 같다!

  • 상태유지(Stateful) 상태일 떄 중간에 서버에 장애가 나면 아무런 조치를 할 수 없다. (출처)
  • 한 서버만 주문하고 아이스크림을 담아주는 역할을 다 하고 있었는데 그 서버가 장애가 났기떄문에 다른 서버는 놀게되는 것

Stateful 상태일 경우 문제점

 반면에 무상태일 경우 문제가 생기게 되면??

  • 무상태(Stateless) 일 경우 중간에 서버가 장애가 나도 다른 서버를 통해서 같은 기능을 수행할 수 있다. (출처)
  • 다른 서버들은 동일하게 아이스크림을 주문하고, 손님이 원하는 맛을 담을 수 있다는 뜻이다.

Stateless 상태

그래서 무상태일 경우에는 손님이 많이 몰려와도 직원을 대거 투입하여 처리할 수 있다는 장점이 있다. (출처)

즉, 클라이언트의 요청이 많아져도 서버를 많이 증설하여 처리할 수 있다는 뜻이다.

무상태일 경우 스케일 아웃

실무에서의 Stateless

  • 모든 것을 무상태로 설계할 수도 있고 그렇지 않은 경우도 있다.
  • ex) 로그인이 필요 없는 단순한 서비스 소개 화면 같은 경우

상태 유지

  • ex) 로그인
  • 로그인한 사용자의 경우 로그인 했다는 상태를 서버에 유지
  • 일반적으로 쿠키와 세션등을 사용해서 유지한다.
  • 상태 유지는 최소한으로 사용

이 두개의 적절하게 판단하여 설계하는 것이 중요하다!

'Dev > HTTP' 카테고리의 다른 글

HTTP의 메시지  (0) 2021.05.23
HTTP의 성격 Connectionless  (0) 2021.05.23
HTTP 시작  (0) 2021.05.11
UR패밀리 URI, URL, URN 과 웹브라우저 흐름  (0) 2021.05.06
친숙한 이름으로 바꿔주는 DNS  (0) 2021.05.05