🔗아주 쉽게 이해하는 Stateful / Stateless 차이 | Inpa Dev
Stateful (상태유지)
- 일반적으로 브라우저의 쿠키(Cookie)에 저장되거나, 서버의 세션(Session) 메모리에 저장되어 상태를 유지하게 된다.
- 예) TCP
- 단점
- 해당 서버가 멈추거나 여러 이유로 해당 서버가 못쓰게 되어 다른 서버를 사용해야 할 때 새로운 서버에서는 이전 서버에서 가지고 있던 상태값들을 가지고 있지 않음.
- 용량 한계가 존재해, 보다 많은 수의 클라이언트가 몰리면, 이미 연결된 클라이언트 중 일부가 빠져야 다음 클라이언트가 처리됨.
Stateless (무상태)
- 서버가 클라이언트의 상태를 보존하지 않음.
- 서버는 단순히 요청이 오면 응답을 보내는 역할만 수행하며, 상태 관리는 전적으로 클라이언트의 책임.
- 통신에 필요한 모든 상태 정보들은 클라이언트에서 가지고 있다가 서버와 통신할때 데이터를 실어 보내는 것.
- 예) UDP, HTTP (HTTP 통신 기본이 무상태), REST
- 단점 : 클라이언트의 요청에 상대적으로 Stateful 보다 더 많은 데이터가 소모
- 장점 : 서버에 대한 부하가 현저히 줄어든다.
stateless 특징을 유지하면서도 로그인 상태 유지를 가능하게 하는 기술이 바로 JWT 토큰
- 토큰 : 클라이언트가 암호화된 로그인 정보들을 지니고 있다가 서버에 통신할때 넘겨줌으로써 내가 로그인 됐음을 인증하는 방식
🔗JWT 토큰 인증 이란? (쿠키 vs 세션 vs 토큰) | Inpa Dev
서버가 클라이언트 인증을 확인하는 방식은 대표적으로 쿠키, 세션, 토큰 3가지 방식.
- 토큰
- 클라이언트가 서버에 접속을 하면 서버에서 해당 클라이언트에게 인증되었다는 의미로 토큰을 부여.
- 토큰은 유일하며 토큰을 발급받은 클라이언트는 또 다시 서버에 요청을 보낼 때 요청 헤더에 토큰을 심어서 보낸다.
- 세션 기반 인증은 서버가 파일이나 데이터베이스에 세션정보를 가지고 있어야 하고, 이를 조회하는 과정이 필요하기 때문에 많은 오버헤드가 발생.
- 토큰은 세션과는 달리 서버가 아닌 클라이언트에 저장되기 때문에 메모리나 스토리지 등을 통해 세션을 관리했던 서버의 부담을 덜 수 있다.

