본문 바로가기
전공공부

Stateful과 Stateless는 무엇인가?

by 시아나 2026. 5. 5.

웹 개발을 하다보면 Stateless 같은 말을 한번씩 들어봤을 것이다.
오늘은 Stateless가 뭐고 Stateful과의 차이는 무엇인지 알아보려고 한다.

 

State(상태)

Stateless는 말 그대로 State(상태)가 없는 것이고
Stateful은 State(상태)가 있는 것이다.

그럼 State가 무엇인가?

서버의 State는
Server가 Client와 주고 받은 정보를 저장한 것이다.

예를 들면 "로그인 정보, 장바구니 상품 리스트" 등이 있을 것이다.

Stateful (상태유지)

Stateful은 아까 말한 상태를 서버가 보존하는 것이다.

서버가 클라이언트와 통신하면서 이전에 통신한 값을 저장하는 것이다.
홈페이지에서 로그인을 한번 하면 페이지를 이동해도 로그인 정보가 남는 것이 대표적인 Stateful의 예시이다.

이러한 정보들은 Client의 쿠키나 서버의 세션 메모리 등에 저장되어 상태를 유지한다.

대표적인 Stateful 프로토콜은 TCP 이다.
TCP는 "3-way Handshake"라는 과정이 있어 서로의 State를 확인하고 연결을 한다.

https://ko.wikipedia.org/wiki/%EC%A0%84%EC%86%A1_%EC%A0%9C%EC%96%B4_%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C

TCP는 SYN(연결요청) -> SYN-ACK(서버준비완료) -> ACK(Client 확인)의 단계를 거쳐
"ESTABLISHED(연결됨)"이라는 State를 만들고 통신 내내 그 State를 추적하므로
대표적인 Stateful 프로토콜이다.

 

Stateful의 단점

Stateful은 서버에서 클라이언트의 상태 정보를 저장하고 있는 것이다.
때문에 해당 서버가 다운되어 다른 서버를 사용하게 되는 경우 문제가 발생한다.

만약 A1 서버에서만 Client의 A 정보를 저장해뒀다면
A1 서버가 다운되고 A2 서버에 연결되었을 때 A의 정보가 없기 때문에
처음부터 통신을 다시해야 한다.

또한 Stateful 방식은 많은 수의 Client가 몰린다면
그만큼 더 많은 메모리를 사용해야 한다는 단점도 있다.

때문에 확장성이 떨어지고 접속자 수에 비례하여 메모리 비용이 증가한다는 단점이 있다.

 

현업에서는 이러한 클라이언트 State를
캐시서버(Redis)에 저장하는 방식으로 단점을 보완한다.

 

 

Stateless (무상태)

Stateless는 반대로 서버가 클라이언트의 상태를 보존하지 않는 것이다.

Stateless에서 서버는 Client의 요청을 처리만하고 State 관리는 Client에서 진행한다.

Client가 통신에 필요한 모든 정보를 가지고 있다가
Server와 통신할 때 해당 데이터를 포함해서 요청하는 것이다.

때문에 어떤 서버가 요청을 받든지 상관없이 요청을 처리할 수 있다.
Stateful 방식의 단점이 었던 확장성이 유연하다는 장점이 있다.

Stateless의 대표적인 프로토콜로는 UDP(User Datagram Protocol)가 있다.
UDP는 TCP와 달리 연결 설정 단계가 없고 세션 상태를 저장하지 않는다.

 

즉 Server가 Client의 상태를 저장하지 않는 점에서
Stateless의 대표 프로토콜로 볼 수 있다.

 

Stateless의 단점

Stateless는 Client의 요청에 필요한 데이터를 담아서 보내기 때문에
Stateful보다 더 많은 데이터를 전송해야 한다는 단점이 있다.

또한 보안이 어려워진다
서버는 토큰을 기억하지 않고 검증만 하기 떄문에 사용자의 토큰이 탈취 당했을 때
토큰 무효화가 어려워진다.

때문에 보안이 중요한 서비스에서는 Stateful을 섞어서 설계를 한다.

 

Stateless와 토큰

Stateless는 Client와 Server간 통신에 필요한 모든 State를 Client에서 가지고
통신 할 때 요청에 실어서 보내는 것이다.
때문에 서버는 단순 응답만 하기 때문에 부하가 줄어든다.

하지만 로그인과 같은 서비스는 Stateful이 필요하다.
Stateless의 특징을 유지하면서도 로그인 상태를 유지하게 하는 기술이 JWT 토큰이다.

JWT 토큰은 Client가 암호화된 로그인 정보를 가지고 있다가
서버 통신 시 넘겨주어 로그인 되었음을 인증하는 방법을 사용한다.