Stateful과Stateless의 차이
상태유지 - Stateful
상태유지 - Stateful,점원이 중간에 바뀐다면?
상태유지 - Stateful,정리
- 클라이언트가 노트북이라는 상태를 서버에게 보낸다.
- 서버는 노트북이라는 상태를 유지하고 있는다.
- 클라이언트가 서버에게 2개를 구매한다고 보낸다.
- 상태를 유지한 서버는 가격을 알고있기에 200만원이 나오고 결제 방법을 물어보는데 이때 노트북이라는 상태와 2개를 구매한다는 상태를 유지하고 있는다.
- 클라이언트가 신용카드를 선택하면 노트북 , 2개, 신용카드 라는 상태를 유지한다.
무상태 프로토콜 스테이스리스(Stateless)
- 서버가 클라이언트의 상태를 보존하지 않는 상태
- 장점 : 서버의 확장성이 높다 (스케일 아웃)
- 단점 : 클라이언트가 추가 데이터를 전송해야한다.
무상태 - Stateless
무상태 - Stateless,점원이 중간에 바뀌면?
- 상태유지에서는 중간에 다른 점원으로 바꾸면 서비스에 장애가 발생하는데 즉 문맥이 사라지는데 무상태에서는 고객이 그때그때마다 필요한 정보를 다 넘겨줘서 문제가 발생하지 않는다 .
- 클라이언트와 서버의 아키텍쳐에서는 엄청난 확장성을 가진다.
Stateful,Stateless의 차이
-
상태유지 Stateful : 중간에 다른 점원으로 바뀌면 안된다. (중간에 다른 점원으로 바뀔 때 상태 정보를 다른 점원에게 미리 알려줘야 한다.)
-
무상태 Stateless : 중간에 다른 점원으로 바뀌어도 된다.
- 갑자기 고객이 증가해도 점원을 대거 투입할 수 있다.
- 갑자기 클라이언트 요청이 증가해도 서버를 대거 투입할 수 있다.
-
무상태는 응답 서버를 쉽게 바꿀 수 있다. -> 무한한 서버 증설이 가능하다
상태유지 - Stateful
항상 같은 서버가 유지되어야 한다.
-
그럼 클라이언트는 처음부터 다시 요청을 보내야한다.
무상태 - Stateless
아무 서버나 호출해도 된다.
- 클라이언트가 애초에 요청할때부터 필요한 데이터를 담아서 보내버린다 .
- 서버는 클라이언트가 요청한 상태를 보관하지 않고 응답한다.
만약 서버가 장애가 발생하면?
- 서버1번이 장애가 발생하면 중계서버가 서버2번으로 던진다.
- 클라이언트가 필요한 정보를 담아서 보내기 때문에 서버2는 그에 대한 응답만 해주면 되니까 문제가 발생하지 않는다.
- 서버를 옆으로 늘리는 것을 스케일 아웃이라하는데 무상태는 이런 수평 확장을 하는데 유리하다.
그럼 Stateless만 사용하면 되는건가??!
Stateless의 실무한계
- 모든 것을 무상태로 설계 할 수 있는 경우도 있고 없는 경우도 있다.
- 무상태
- 예 ) 로그인이 필요 없는 단순한 서비스 소개 화면
- 상태유지
- 로그인한 사용자의 경우 로그인 했다는 상태를 서버에 유지
- 일반적으로 브라우저 쿠키와 서버 세션등을 사용해서 상태 유지
- 상태 유지는 최소한만 사용 ( 꼭 필요한 경우에만 사용하는걸 추천한다 )
- 무상태의 단점중 하나는 클라이언트가 데이터를 너무 많이 보내게 된다.
웹 애플리케이션을 설계할때는 최대한 무상태로 설계한다.정말 어쩔수 없는 경우에 만 상태유지를 한다!!