Stateful 과 Stateless

환승의 개발로그·2021년 6월 14일
0

1. Stateful Service

Stateful '구조'는 Server와 Client간 세션의 'State(상태)'에 기반하여 Client에 response를 보냅니다.

이를 위해 세션 '상태'를 포함한 Client와의 세션 정보를 server에 저장하게 됩니다.

TCP

대표적인 Stateful 구조를 따르는 프로토콜로 TCP가 있습니다.

Server와 Client는 3-way handshaking 과정에서 SYN과 SYNACK을 주고 받으며,

양단간 세션 '상태'를 established한 '상태'로 만듭니다.

세션 '상태'가 established가 되면 client와 server는 데이터를 주고 받을 수 있습니다.

이렇게 TCP는 세션 '상태'에 따라 Server의 응답이 달라지는 Stateful 프로토콜입니다.

따라서

세션 상태에 기반한 server의 응답이 달라진다는 점에서 Stateful 하다고 말할 수 있습니다.

Stateful Service는 이러한 Stateful한 특성,

  1. 세션 정보를 server에 저장,
  2. 세션 'State(상태)'에 따른 응답

를 만족하도록 설계된 서비스 구조 입니다.

2. Stateless Service

Stateless '구조'는 server의 응답이 client와의 세션 '상태'와 독립적입니다.

Stateless 구조에서 server는 단순히 요청이 오면 응답을 보내는 역할만 수행하며, 세션 관리는 client에게 책임이 있습니다.

따라서 이러한 Stateless 구조는 client와의 세션 정보를 기억할 필요가 없으므로, 이러한 정보를 서버에 저장하지 않습니다.

대신 필요에 따라 외부 DB에 저장하여 관리 할 수 있습니다.

대표적인 Stateless 프로토콜로는 UDP와 HTTP 등이 있습니다.

UDP는 Client와의 세션 상태에 관계없이 요청에 대한 응답만을 수행합니다.

또한 Client와의 세션 정보를 server가 저장하지 않는다는 점에서 Stateless 하다고 말할 수 있습니다.

Stateless Service는 이러한 Stateless한 특성,

  1. 세션 정보를 server에 저장하지 않음,
  2. 세션 'State(상태)'에 무관한 응답

를 만족하도록 설계된 서비스 구조 입니다.

3. Why Stateless Service?

현재와 같은 트랙픽 또는 사용량 급증으로 서버 오류나 서버 장애가 발생한다면 서버의 자원을 늘리거나(Scale Out) 조치를 취해야 할 필요가 있어집니다. 이러한 상황에서 Stateless Service는 유연하게 Scale Out을 할 수 있습니다.

반면에 Stateful 서비스의 경우, client의 세션 정보가 새로 scale out된 서버에 저장 되어 있지 않습니다! 따라서 세션 정보를 옮겨주는 등의 부수적인 관리가 요구 됩니다.

결론적으로

-Stateless 서비스의 경우,

client 세션 관리를 하지 않으므로, 요즘 추세와 맞는 서버리스 아키텍처입니다 !

[출처] : https://5equal0.tistory.com/entry/StatefulStateless-Stateful-vs-Stateless-%EC%84%9C%EB%B9%84%EC%8A%A4%EC%99%80-HTTP-%EB%B0%8F-REST

profile
눈보다는 손으로 기억하기

0개의 댓글