📚 Computer Science/Network

[모든 개발자를 위한 HTTP 웹 기본 지식] 3. HTTP 기본 - Stateful, Stateless

ryang x2 2023. 8. 10. 18:02
728x90
반응형

인프런 김영한님 [모든 개발자를 위한 HTTP 웹 기본 지식] 강의를 듣고 정리한 내용입니다.

틀린 부분이 있으면 답글 달아 주세요😊😊

 

1. 무상태 프로토콜 (Stateless)

- 서버가 클라이언트의 상태를 보존 X

- 장점 : 서버 확장성 높음 (스케일 아웃)

- 단점 : 클라이언트가 추가 데이터 전송

 

2. Stateful, Stateless 차이

👉 상태 유지 - Stateful

 

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

 

👉 상태 유지 - Stateful, 정리

 

👉 무상태 - Stateless

 

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

 

⭐ 정리

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

(중간에 다른 점원으로 바뀔 때 상태 정보를 다른 점원에게 미리 알려줘야 한다.)

 

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

  - 갑자기 고객이 증가해도 점원을 대거 투입할 수 있다.

  - 갑자기 클라이언트 요청이 증가해도 서버를 대거 투입할 수 있다.

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

 

 

3. 상태 유지 - Stateful

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

클라이언트A 서버1 계속 통신을 유지해야한다.

서버1 클라이언트A가 요청한 노트북, 2개라는 상태를 모두 유지하고 있는 상태가 된다. ( 서버 증식이 어려움 )

- 중간에 서버가 장애나면 ? 

서버1에서 장애가 나면, 클라이언트A처음부터 다시 해야 하는 문제가 발생한다.

 

4. 무상태 - Stateless

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

클라이언트A가 요청할 때부터 필요한 데이터(노트북, 2개 포함) 담아서 요청한다.

서버1상태를 보관하지 않고 필요한 부분을 응답만 한다.

- 중간에 서버가 장애나면?

서버1이 장애가 발생하면, 클라이언트A는 중개 서버가 서버2번으로 요청한다. 

서버2는 필요한 문맥을 다 보내기 때문에 문제없이 상태를 보관하지 않고 필요한 부분을 응답만 한다.

- 스케일 아웃 : 수평 확장 유리

예를 들어, 이벤트 페이지 할 경우 장비를 확장한다.

 

👉 실무 한계

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

1) 무상태

  - 예) 로그인이 필요 없는 단순한 서비스 소개 화면

2) 상태 유지

  - 예) 로그인

 • 로그인한 사용자의 경우 로그인 했다는 상태를 서버에 유지

 • 일반적으로 브라우저 쿠키와 서버 세션등을 사용해서 상태 유지

 • 상태 유지는 최소한만 사용

 


❓ 질문 정리 ❗

 

Q. stateful 보다 stateless 가 확장에 유리한 이유는?

stateful 는 클라이언트가 요청 전체를 보내는 것이 아니라, 그때 그때 필요한 요청만 하는 것이다. 우리가 현실세계에서 친구와 대화할 때 이런 방식을 사용한다. (친구는 내가 한 말을 기억한 상태에서 대답을 함) 하지만 stateful 는 서버에 많은 클라이언트가 몰릴 경우, 서버가 각 클라이언트의 모든 상태를 유지해야하므로 서버의 부담이 크다는 문제가 있다. 현재 서버가 다른 서버로 클라이언트의 요청을 넘길 수도 있으나, 그것보다는 애초에 무상태로 설계하는 것이 좋다.

stateless 는 클라이언트 입장에서 필요한 요청 전체를 서버로 보내야하므로 번거롭긴 하지만, 각 서버는 이전 요청을 기억하고 있지 않아도 현재 요청을 처리하는데 아무런 문제가 없이 응답을 보낼 수 있다. 그래서 현재 서버가 장애를 입거나 응답해줄 수 없는 상황이더라도 다른 서버들에게 요청을 보낼 수 있어 확작성이 좋다는 것이다.

[출처] https://www.inflearn.com/questions/223034

 

Q. 쿠키나 세션을 사용해 서버에 클라이언트 상태를 저장하는 경우, HTTP의 stateless한 특성이 사라지는 것인가?

사용자를 식별하는 정보를 서버에 저장할지 말지는 개발자가 어떻게 구현하는지에 달려있다. 다만 HTTP의 stateless 한 특성때문에, 사용자를 식별할 수 있는 정보를 저장하기 위한 기술(쿠키, 세션 등)을 사용하는 것이다. 이를 사용한다고 HTTP의 stateless 한 특성이 사라지는 것은 아니다. statless 한 프로토콜인 HTTP를 가지고 사용자를 식별하기 위해 세션, 쿠키 같은 기술을 사용하는 것 뿐이다.

[출처] https://www.inflearn.com/questions/239979

 

Q. 로그인은 항상 stateful(상태 유지)해야 하는가?

일반적으로 클라이언트의 로그인을 유지하기 위해서 서버는 클라이언트의 로그인 상태를 관리해야 한다. 쿠키, 세션으로 stateful하게 구현할 수도 있지만, 토큰을 이용하는 JWT로 stateltess 하게 구현할 수 도 있다.

[출처] https://www.inflearn.com/questions/471184

 

728x90
반응형