Stateful , Stateless

김원종·2023년 8월 11일
0

Stateful과Stateless의 차이

상태유지 - Stateful

상태유지 - Stateful,점원이 중간에 바뀐다면?

상태유지 - Stateful,정리

  • 클라이언트가 노트북이라는 상태를 서버에게 보낸다.
  • 서버는 노트북이라는 상태를 유지하고 있는다.
  • 클라이언트가 서버에게 2개를 구매한다고 보낸다.
  • 상태를 유지한 서버는 가격을 알고있기에 200만원이 나오고 결제 방법을 물어보는데 이때 노트북이라는 상태와 2개를 구매한다는 상태를 유지하고 있는다.
  • 클라이언트가 신용카드를 선택하면 노트북 , 2개, 신용카드 라는 상태를 유지한다.

무상태 프로토콜 스테이스리스(Stateless)

  • 서버가 클라이언트의 상태를 보존하지 않는 상태
  • 장점 : 서버의 확장성이 높다 (스케일 아웃)
  • 단점 : 클라이언트가 추가 데이터를 전송해야한다.

무상태 - Stateless

  • 고객의 마지막 대화만으로 결제가 가능하다 .

무상태 - Stateless,점원이 중간에 바뀌면?

  • 상태유지에서는 중간에 다른 점원으로 바꾸면 서비스에 장애가 발생하는데 즉 문맥이 사라지는데 무상태에서는 고객이 그때그때마다 필요한 정보를 다 넘겨줘서 문제가 발생하지 않는다 .
  • 클라이언트와 서버의 아키텍쳐에서는 엄청난 확장성을 가진다.

Stateful,Stateless의 차이

  • 상태유지 Stateful : 중간에 다른 점원으로 바뀌면 안된다. (중간에 다른 점원으로 바뀔 때 상태 정보를 다른 점원에게 미리 알려줘야 한다.)

  • 무상태 Stateless : 중간에 다른 점원으로 바뀌어도 된다.

    • 갑자기 고객이 증가해도 점원을 대거 투입할 수 있다.
    • 갑자기 클라이언트 요청이 증가해도 서버를 대거 투입할 수 있다.
  • 무상태는 응답 서버를 쉽게 바꿀 수 있다. -> 무한한 서버 증설이 가능하다


    상태유지 - Stateful
    항상 같은 서버가 유지되어야 한다.

    • 상태유지 서버1 에 클라이언트가 노트북이라는걸 요청하면 서버는 노트북이라는 상태를 유지하고 응답을 보낸다. 그리고 클라이언트가 다시 2개를 요청하면 그 전 상태인 노트북을 유지한상태로 2개라는 값을 추가로 유지하고 응답을 보낸다.

      만약 서버가 장애가 발생하면??

  • 그럼 클라이언트는 처음부터 다시 요청을 보내야한다.

무상태 - Stateless

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

  • 클라이언트가 애초에 요청할때부터 필요한 데이터를 담아서 보내버린다 .
  • 서버는 클라이언트가 요청한 상태를 보관하지 않고 응답한다.

만약 서버가 장애가 발생하면?

  • 서버1번이 장애가 발생하면 중계서버가 서버2번으로 던진다.
  • 클라이언트가 필요한 정보를 담아서 보내기 때문에 서버2는 그에 대한 응답만 해주면 되니까 문제가 발생하지 않는다.

  • 서버를 옆으로 늘리는 것을 스케일 아웃이라하는데 무상태는 이런 수평 확장을 하는데 유리하다.

그럼 Stateless만 사용하면 되는건가??!

Stateless의 실무한계

  • 모든 것을 무상태로 설계 할 수 있는 경우도 있고 없는 경우도 있다.
  • 무상태
    • 예 ) 로그인이 필요 없는 단순한 서비스 소개 화면
  • 상태유지
    • 예 ) 로그인
  • 로그인한 사용자의 경우 로그인 했다는 상태를 서버에 유지
  • 일반적으로 브라우저 쿠키와 서버 세션등을 사용해서 상태 유지
  • 상태 유지는 최소한만 사용 ( 꼭 필요한 경우에만 사용하는걸 추천한다 )
  • 무상태의 단점중 하나는 클라이언트가 데이터를 너무 많이 보내게 된다.

웹 애플리케이션을 설계할때는 최대한 무상태로 설계한다.정말 어쩔수 없는 경우에 만 상태유지를 한다!!


profile
개린이

0개의 댓글