Knowledge

[Knowledge] Stateless와 Stateful 차이

Jeong Jeon
반응형

알고있다고 생각했는데, 알고있지 않았던 부분.... 반성해야겠다.

 

한번 정리해두자..!

 

간단하게 표현하면 Client의 상태정보를 Server가 저장해놓고 가지고 있느냐, 아니냐에 따라 Stateful / Stateless로 구분된다.

최근에는 서비스들이 Stateless 서비스 구조를 선호한다고 하는데, 그이유도 함께 자세하게 알아보자..

 

1). Stateful이란

Stateful 구조는 Server와 Client간 세션의 상태에 따라 Client에게 Response를 보내는 형태이다.

이때 Client 세션의 상태가 필요하기 때문에 서버에서는 Client의 세션 정보를 저장해둔다.

 

대표적인 Stateful 구조의 프로토콜은 TCP/IP이다.

TCP의 3-wayhandshake 과정을 다시 되짚어보면 Server가 Syn을 보내고, Syn/Ack를 Client가 보내게 된다.

이렇게 패킷를 주고 받으며 Server와 Client 간의 연결 세션 상태를 Establish 상태로 만들게 된다.

여기서 중요한것은 세션 상태에 따라 Server의 응답이 달라진다.! 이것이 Stateful 한 구조 라는 것이다.

데이터 전송과정을 살펴보면, Server는 Client로 부터 받은 패킷헤더를 파싱하여 데이터의 크기와 seq를 저장해둔다.

그리고 해당 데이터가 모두 수신될때까지 세션을 유지하고 있다.

 

2). Stateless란?

Stasteless 구조는 Server의 Response가 Client의 상태에 상관없이 독립적이다.

Server는 덩그러니 있다가, Client의 요청이 들어오면 간단하게 Response만 해주는 형태이다.

대표적인 프로토콜로는 HTTP와 UDP가 있다.

 

UDP는 TCP와 달리 handshaking 과정을 통해 연결 세션을 인증하는 절차를 수행하지 않는다.

양간에 송신하려 했던 데이터가 다 들어오는지 안들어오는지 확인을 하지 않는다.

 

 

3). 그렇다면 왜 요즘 개발 추세는 Stateless를 추구하는가!!!

Stateful한 구조를 만들려면 위에서 본것과 같이 세션의 상태를 저장해 두어야한다.하지만 Scale Out을 했을경우, Scale Out된 서버에 세션의 상태가 저장되어있지않아 별도로 세션정보를 옮겨주거나 공유할 수 있도록 만들어 주어야한다.하지만 Stateless 구조는 세션관리를 하지않기때문에 자유롭게 Scaling하여 서비스를 할 수 있다.!!

 

 

 

요즘 트랜드가 어떻게 되고있는지, 몰랐다...Stateless와 Stateful에 대해서 한번 더 반성하며 되짚는 시간이 되었다...

반응형