Stateful vs Stateless

Lys·2023년 10월 19일
0

네트워크

목록 보기
18/19

Stateless프로토콜과 Stateful한 프로토콜은 웹 서버와 브라우저의 통신을 위한 네트워크 프로토콜이다. 하지만 이 프로토콜들은 서버 사이드에서 세션 및 세부 정보에 대해 추적 및 저장을 하는 지에서 차이가 있다.

  • (참고) 서버 사이드 : 서버(제공자) 측에서 즉시 처리하는 것이다.
    서버 사이드는 클라이언트로 보낼 웹 페이지(HTML, JavaScript 등이 담긴)를 만들며,
    정말 중요한 작업들(사용자 유효성, DB 관련 등)을 수행한다.
    대표적인 언어는 Java, PHP, Ruby, Python, Node.js 등을 언급할 수 있다.

Stateful

  • Stateful구조는 서버와 클라이언트간 세션의 State(상태)에 기반하여 클라이언트에 응답을 보낸다. 이를 위해 서버 사이드에 클라이언트와 서버의 동작, 세션 상태 정보를 저장한다.
  • 상태에 대해 저장해야하기 때문에 백업 스토리지가 요구된다.
  • 상태 저장에 대한 요청은 서버 측 상태에 따라 달라지게 된다.
  • Stateful 프로토콜 중 대표적인 예는 TCP(전송 제어 프로토콜)로, TCP의 경우 서버가 클라이언트와의 통신 상태를 계속 추적하기 때문에, 클라이언트의 세션 정보에 대해 저장한다. 세션 상태에 따라 서버의 응답이 달라지는 Stateful 프로토콜이다.
    서비스의 경우, 대체로 로그인이 필요한 서비스들 (ex., 온라인 뱅킹, 이메일)이 있다.
  • 장점 : 서버는 클라이언트의 세션 정보를 저장하므로, 갑자기 통신이 중단되더라도 중단된 곳부터 다시 시작할 수 있다.
  • 단점 :확장성이 안 좋다.
    클라이언트의 세션 정보가 새로 scale out 된 서버에 저장 되어 있지 않기 때문에
    scale out 시, 클라이언트의 세션 정보를 새로운 서버에 옮겨주는 등의 부수적인 관리가 요구된다.

  • (참고) scale out : 장비를 추가해서 확장하는 방식을 말한다.
    기존 서버만으로 용량이나 성능의 한계에 도달했을 때, 비슷한 사양의 서버를 추가로 연결해 처리할 수 있는 데이터 용량이 증가할 뿐만 아니라 기존 서버의 부하를 분담해 성능 향상의 효과를 기대할 수 있다.

Stateless

  • Stateless구조는 서버의 응답이 클라이언트와의 세션 State(상태)와 독립적이다.
  • 서버는 단순히 요청이 오면 응답을 보내는 역할만 수행하며, 세션 관리는 클라이언트에게 책임이 있다.
    따라서 Stateless 구조는 클라이언트와의 세션 정보를 기억할 필요가 없으므로 서버에 정보들을 저장하지 않는다.
  • 상태를 저장하지 않는 프로토콜이기 때문에, 시스템이 링크에 대한 통신과 세션 세부 정보를 추적할 필요가 없고, 리소스 역시 덜 필요하게 된다.
  • Stateless 프로토콜은 서버 설계를 단순화할 수 있고, 확장성 역시 더 높다.
  • 필요에 따라 외부DB에 저장하여 관리 할 수 있다.(Session Server)
  • 각 정보 패킷은 다른 패킷을 참조하지 않고, 자체적으로 이동한다.
  • 각 통신은 선행되거나 후속으로 따라오는 통신과 관련이 없다.
  • HTTP, UDP가 stateless 프로토콜의 대표적 예이다. UDP는 클라이언트와의 세션 상태에 관계없이 요청에 대한 응답만을 수행한다.
    또한 클라이언트와의 세션 정보를 서버가 저장하지않는다는 점에서 Stateless하다고 말할 수 있다.
  • 장점 :확장성이 좋다.
    서버가 클라이언트의 세션 상태 및 세션 정보를 저장하지 않는다.
  • 단점 : 서버가 세션 상태 및 세션 정보를 저장하지 않기 때문에, 클라이언트 측에서 송신할 데이터의 양이 많아진다.

Stateless Service가 많이 쓰이는 이유

최근의 웹서비스 구조는 모두 Stateless 구조 기반을 따르고 있다.
Stateless 구조는 컨택스트 유지를 포기하는 대신, 장애 대응이 쉽고 확장성이 좋다는 장점들이 있다. 클라이언트의 요청을 분산 배치된 서버 중 누가 받는지는 전혀 중요하지 않다. 모든 서버가 같은 요청을 동등하게 처리해줄 수 있기 때문이다.
어떤 서버 노드 하나가 마비되더라도 Stateful 서비스와는 다르게 다른 서버가 들어오는 요청들을 대신 맡을 수 있다. 응답을 받지 못한 클라이언트들은 동일한 요청을 또 보내기만 하면 되기 때문이다. 서버-클라이언트의 비종속적인 특징은 서버 자원의 스케일을 늘리거나 줄일 때도 다른 처리 작업(transaction)에 크게 영향을 미치지 않는다는 장점도 뒤따른다.
무엇보다 서버측에서 세션 데이터 저장을 위한 스토리지 공간을 마련할 필요가 없다는 점도 Stateless 아키텍처가 널리 이용되는데에 한몫하는 요인이다.


StatelessStateful
정의클라이언트가 서버로 요청을 보내고, 주어진 상태에 따라 서버의 응답을 다시 보내주는 네트워크 프로토콜클라이언트가 서버에 요청을 보냈을 때, 어떤 종류의 응답을 기대하고 만약 응답이 없을 경우에는 다시 요청을 보내는 네트워크 프로토콜
HTTP, UDPFTP(파일 전송 프로토콜), TCP
서버 제한서버 정보나 세션의 세부 정보를 자체적으로 유지하고자 할때 서버가 필요하지 않다.현재의 상태와 세션 정보를 유지하기 위해서 서버가 필요하다.
의존성서버와 클라이언트가 느슨한 결합으로 이루어져 있기 때문에, 서로 독립적으로 작동할 수 있다.상태 저장이 필요하므로 서버와 클라이언트가 밀접하게 연결될 수 밖에 없다.
디자인서버 설계가 구현하기에 간단하다.설계 디자인이 복잡하고, 구현하기도 상대적으로 더 어렵다.
충돌 관리서버 장애가 발생했더라도, 충돌 후 다시 쉽게 시작이 가능하다.서버가 세션 및 여러 세부 정보들을 유지해야 하기 때문에, 충돌 관리가 더 어렵다.
트랜잭션서버에서 트랜잭션을 빠르게 처리할 수 있다.서버가 비교적 느리게 작동한다.

🙇‍ 참고 사이트 🙇‍

https://jjy0821.tistory.com/36
https://dar0m.tistory.com/268
https://citizen.tistory.com/38
https://wooono.tistory.com/366

0개의 댓글

관련 채용 정보