Stateful과 Stateless 는 클라이언트와 서버간의 통신 상태(state) 유지 여부에 따라 나뉘는 특성이다.
Stateful(상태 유지)
stateful은 서버가 클라이언트 상태를 유지한다. 클라이언트와 상태를 유지한다는 것은 꼭 TCP 연결이 끊어지지 않고 유지된다고만 볼 수는 없다.
클라이언트와 상태를 유지한다는 것은 서버가 클라이언트와의 상호작용에서 발생한 데이터를 서버가 기억하고 이를 기반으로 이후 요청을 처리한다는 것을 뜻이다.
stateful 방식의 문제점
요청을 정상적으로 처리하기 위해서는 클라이언트의 요청이 같은 서버에 유지되어야 한다.
하지만 서버는 다양한 이유로 동작하지 않을 수 있다.
또한 요청 트래픽이 몰리게되면 상태를 유지하는 것에 Resource가 많이 소모된다. 리소스가 버티지 못하면 서버가 종료되거나 다음 요청에 대한 처리가 느려진다.
Stateless(무상태)
Stateless는 서버가 클라이언트의 상태를 유지하지 않는다.
서버가 클라이언트 상태를 유지하지 않는다면 stateless 통신에서 상태가 필요한 어떻게 이루어 질까?
stateless 구조에서 서버는 단순히 요청이 들어오면 응답을 보내는 역할만 수행하므로, 상태에 대한 관리는 전적으로 클라이언트에게 책임이 있다.
즉, 통신에 필요한 모든 상태 정보들은 클라이언트가 가지고 있다가 서버와 통신할 때 데이터에 같이 보낸다.
장단점
장점
- stateless는 클라이언트의 요청을 위해 같은 서버를 유지할 필요가 없다.
- 요청이 갑자기 증가할 때 Scale Out이 수월하다.
단점
- 클라이언트가 데이터를 추가적으로 전송해야 한다.
- 전송되는 데이터의 양이 많아진다.
Stateless 방식의 한계점
WebApplication을 만들 때 서버의 확장성을 고려하여 최대한 stateless하게 만들어야 한다.
하지만, 로그인과 같이 상태를 유지해야 하는 기능이 필요한 경우가 발생한다.
따라서 모든 것을 stateless로 설계할 수 없다.
Cookie, Session, Token 등을 활용해서 이러한 한계를 극복하지만 상태 유지 최소화를 지향해야 한다.
'용어 모음집' 카테고리의 다른 글
프레임워크와 라이브러리 (0) | 2024.11.26 |
---|---|
Connection과 Connectionless (0) | 2024.11.26 |
Scale Up, Scale Out (0) | 2024.11.26 |
JSON (1) | 2024.11.26 |
프로그래밍 명명규칙(Casing) (0) | 2024.11.26 |