Coding Planet

Stateful과 Stateless의 차이 - 세션 관리 본문

CS

Stateful과 Stateless의 차이 - 세션 관리

jhj.sharon 2024. 1. 19. 12:16
반응형
JWT(Jason Web Token)을 이용한 로그인 방식을 공부하던 도 중 stateless 통신의 장점에 대한 포스트를 읽게되었다. Stateful과 Stateless에 대한 개괄적인 이해만 있는 상태여서 이번 기회에 명확하게 이해하고 싶어졌다.

 

StatelessStateful은 주로 웹 서버의 세션 관리 방식을 설명하는 데 사용되는 두 가지 개념이다. 이들은 서버가 클라이언트의 상태(예: 사용자의 인증 상태, 이전의 상호작용)를 어떻게 추적하고 관리하는지에 대한 차이를 나타낸다.

 

 

| Stateful(유상태)

상태 유지라함은 클라이언트와 서버 관계에서 서버가 클라이언트이 상태를 보존함을 의미한다. 클라이언트와 서버 사이에서 송수신이 일어날 때 서버에서 클라이언트가 이전 단계에서 제공한 값을 저장하고 다음 단계에서도 저장한 상태이다. 유상태 프로토콜에서는 서버가 클라이언트의 상태 정보를 세션 혹은 쿠키를 통해 유지한다. 이로 인해 서버는 클라이언트의 이전 상태를 알고 있으므로 더 풍부한 상호작용이 가능하게 된다. 대표적으로 홈페이지에서 로그인을 하면 페이지를 이동해도 로그인이 풀리지 않고 계속 유지되는 것이 유상태 통신이다.

 

  • 작동 방식 : 클라이언트는 최초 요청 시 서버에 상태 정보를 전달하고, 서버는 이 정보를 세션에 저장한다. 이후 요청에서는 서버가 이 세션 정보를 참조하여 클라이언트를 기억한다.
  • 장점 :  클라이언트는 모든 요청에 모든 정보를 전송할 필요가 없어, 네트워크 트래픽이 줄어들고 사용자의 상태 정보를 기반으로 더 맞춤화된 상호작용이 가능하다.
  • 단점 : 서버가 각 클라이언트의 상태를 유지해야 하므로 더 많은 리소스를 사용한다. 또한 상태 정보를 유지해야하므로, 서버의 부하가 증가하고 시스템 확장이 어려워질 수 있다. 그리고 만일 해당 서버가 작동이 불가능해진다면 새로운 서버는 이전 서버에서 가지고 있던 상태값을 가지고 있지 않기 때문에 문제가 발생할 수 있다. 따라서 현업에서는 이러한 클라이언트의 상태 데이터를 따로 캐시 서버(Redis)에 저장하여 이용한다.
  • 예시 : TCP 통신

 

 

| Stateless(무상태)

무상태 프로토콜에서는 서버가 클라이언트의 상태 정보를 유지하지 않는다. 각 요청은 독립적이며, 이전의 요청이나 상태에 대한 정보를 포함하지 않는다. 따라서 Stateless 구조에서는 서버는 단순히 요청이 오면 응답을 보내는 역할만을 수행하며, 상태 관리는 전적으로 클라이언트에게 책임이 있다. 

 

  • 작동방식 : 클라이언트는 모든 요청에 필요한 정보(예:사용자 인증 정보)를 매번 전송한다. 서버는 이 정보를 기반으로 요청을 처리하고 응답한다.
  • 장점 : 서버가 클라리언트의 상태를 추적할 필요가 없기 때문에 리소스 요구 사항이 적고 서버 부하가 적다(서버확장가능). 또한 각 요청이 독립적이므로 시스템의 복잡성이 감소한다. 유상태와는 다르게 서버가 바뀐다고 해도 요청은 독립적이기 때문에 문제가 없다
  • 단점 : 클라이언트가 각 요청에 필요한 모든 정보를 포함해야하므로 네트워크 오버헤드가 증가할 수 있다. 
  • 예시 : UDP, HTTP, JWT

 

 

 

| Stateless(무상태)와 JWT

이전 설명에서 언급한 것처럼 로그인의 경우 로그인 상태가 여러 페이지에 걸쳐 유지되어야 하기 때문에 Stateful이 필수적이다. 하지만 Stateless 상태로도 로그인을 유지할 수 있는데 대표적 기술이 JWT(Jason Web Token)이다.  토큰은 클라이언트측에 저장되고 각 요청에 포함되어 서버로 전송된다. 이 토큰은 사용자의 인증 정보를 담고 있으므로 서버는 상태 유지를  할 필요 없이 각 요청을 독립적으로 처리할 수 있다. 

 

 

 

 

 

 

 

 

 

 

| 참고

https://inpa.tistory.com/entry/WEB-%F0%9F%93%9A-Stateful-Stateless-%EC%A0%95%EB%A6%AC

 

🌐 아주 쉽게 이해하는 Stateful / Stateless 차이

Stateful 과 Stateless 차이점 웹 공부를 하다보면 클라이언트(Client)와 서버(Server)간의 통신을 상태유지(Stateful) 하느냐, 상태유지하지않음(Stateless) 으로 하느냐 라는 말귀를 한번쯤은 들어본 적이 있

inpa.tistory.com

https://inpa.tistory.com/entry/WEB-%F0%9F%93%9A-JWTjson-web-token-%EB%9E%80-%F0%9F%92%AF-%EC%A0%95%EB%A6%AC

반응형
Comments