본문 바로가기

카테고리 없음

Stateless 상태

공부이유

JWT를 공부하다가 stateless 와 stateful에 대해서 기술된 것을 보았는데 이것의 이해가 있어야 본 공부 목적인 JWT를 알 수 있을 것 같다. 

 

Stateless란 무엇인가

Stateless란 '상태가 없는' 뜻으로서 '무상태', '연결되지 않은' 이라는 의미를 내포하고 있다.

Stateless는 HTTP프로토콜의 대표적인 특징이다.

이와 반대로 Stateful은 TCP의 대표적인 특징이라고 한다.

 

Stateful에 대해서 완벽한 이해를 바로 할 수는 없겠지만, 조금 이해가 되는 설명이 있어 다음과 같이 정리한다.

쉽게 설명해 상태를 유지하고있다는 의미인데, 서비스간 작업처리의 상태가 항상 공유되고 있는 상태를 말한다.

대표적으로 클라이언트 측에서 사용하고 있는 어플리케이션에서 업데이트하는 데이터 또는 서버어플리케이션에서 업데이트하는 데이터들이 항상 서로에게 영향을 주는 것을 예로 들 수 있고, 온라인뱅킹이나 실시간 투자지표 어플리케이션등이 있다.

예전에 채팅앱 사이드프로젝트를 했을 때 소켓을 이용한 경험이 있는데 이 어플리케이션이 Stateful의 성격을 띄고있다. 그리고 Socket뿐만 아니라 TCP, Message Queue 역시 Stateful의 특징을 띄고 있다고 한다.

 

이와 반대로 Stateless는 클라이언트와 서버간의 요청•응답이 이전 혹은 이후의 요청•응답과는 연결성이 없고 독립적인 상태을 의미한다.

이는 요청이 클라이언트의 어떤 정보를 가지고있는 것이 아니므로 서버에 세션상태가 없는 것이다.

각 요청과 응답이 이루어지면 주고받았던 데이터들은 사라지고 서버의 연결이 끊어진다.(

이전의 데이터가 연결되지 않기때문에 이 방식은 서버의 부하를 많이 줄여주고, 주로 HTTP프로토콜에 사용되는 방식이다.

 

우리가 서비스를 이용할 때 회원인증과 로그인 기능을 하는 것은 HTTP의 Stateless한 특성때문이다.

각 요청이 이전 요청과는 연결성이 없기에 이를 연결하기 위해서 부가적인 인증요소로 사용자의 정보를 확인할 수 있는 쿠키, 세션, JWT가 필요하다.

인증요소를 같이 요청에 끼워 보내어 서버에서 외부 세션이나 DB를 이용해 사용자 정보를 파악하고 서비스 이용을 가능하게 하는 것이다.