Stateful '구조'는 Server와 Client간 세션의 'State(상태)'에 기반하여 Client에 response를 보냅니다.
이를 위해 세션 '상태'를 포함한 Client와의 세션 정보를 server에 저장하게 됩니다.
대표적인 Stateful 구조를 따르는 프로토콜로 TCP가 있습니다.
Server와 Client는 3-way handshaking 과정에서 SYN과 SYNACK을 주고 받으며,
양단간 세션 '상태'를 established한 '상태'로 만듭니다.
세션 '상태'가 established가 되면 client와 server는 데이터를 주고 받을 수 있습니다.
따라서
세션 상태에 기반한 server의 응답이 달라진다는 점에서 Stateful 하다고 말할 수 있습니다.
를 만족하도록 설계된 서비스 구조 입니다.
Stateless '구조'는 server의 응답이 client와의 세션 '상태'와 독립적입니다.
Stateless 구조에서 server는 단순히 요청이 오면 응답을 보내는 역할만 수행하며, 세션 관리는 client에게 책임이 있습니다.
따라서 이러한 Stateless 구조는 client와의 세션 정보를 기억할 필요가 없으므로, 이러한 정보를 서버에 저장하지 않습니다.
대신 필요에 따라 외부 DB에 저장하여 관리 할 수 있습니다.
UDP는 Client와의 세션 상태에 관계없이 요청에 대한 응답만을 수행합니다.
를 만족하도록 설계된 서비스 구조 입니다.
현재와 같은 트랙픽 또는 사용량 급증으로 서버 오류나 서버 장애가 발생한다면 서버의 자원을 늘리거나(Scale Out) 조치를 취해야 할 필요가 있어집니다. 이러한 상황에서 Stateless Service는 유연하게 Scale Out을 할 수 있습니다.
반면에 Stateful 서비스의 경우, client의 세션 정보가 새로 scale out된 서버에 저장 되어 있지 않습니다! 따라서 세션 정보를 옮겨주는 등의 부수적인 관리가 요구 됩니다.