본문 바로가기
개발 공부

[Stateful vs Stateless] feat. TCP, UDP, HTTP

by 도됐좋 2024. 10. 24.
순서
1. Stateful (상태유지)
2. Stateful 예시 & 문제점
3. Stateless (무상태)
4. Stateless 예시 & 문제점
5. 정리

 

✅ Stateful(상태유지)

- 서버가 클라이언트의 상태를 보존하는 방식

- 일반적으로 브라우저의 쿠키나 서버의 세션 메모리에 저장됨

 

✅ Stateful 통신 예시 - TCP의 3-way handshaking

1. 클라이언트가 서버에 SYN을 전송하고, SYN_SENT 상태가 됨

2. 서버는 SYN을 요청받고, 클라이언트에게 SYN/ACK를 전송하고, SYN_RECEIVED 상태가 됨

3. 클라이언트는 SYN/ACK를 받아 ESTABLISHED 상태가 되고,

    서버에게 ACK를 전송하고, 서버도 ESTABLISHED 상태가 됨

4. 세션 상태가 ESTABLISHED가 됨으로써, 서버와 클라이언트는 데이터를 주고 받을 수 있는 상태가 됨

** 이렇게 상태에 따라 서버의 응답이 달라지게 되는 방식이 Stateful한 통신 방식

 

✅ Stateful 문제점

- 특정 서버가 클라이언트의 정보를 저장하는 방식이기 때문에

  해당 서버가 멈추거나, 다른 서버를 사용해야하는 상황이 생기면

  클라이언트는 처음부터 다시 정보를 입력해야함

- 서버의 용량 한계에 다다르면 기존 클라이언트가 다 처리되어야 다음 클라이언트 처리 가능

 


 

✅ Stateless(무상태)

- 서버가 클라이언트의 상태를 보존하지 않는 방식

- 통신에 필요한 모든 상태 정보들을 클라이언트가 가지고 있다가 서버와 통신할 때 데이터를 실어 보냄

- 서버의 부하 감소, 다른 서버 사용 용이

 

✅ Stateless 통신 예시 - UDP, HTTP

- HTTP의 통신은 기본적으로 Stateless

- UDP는 TCP와 다르게 세션 상태에 관계 없이 전송하고

  서버는 요청에 대한 응답만 수행

 

 

✅ Stateless 문제점

- 상대적으로 더 많은 데이터가 소모됨

 


 

✅ 정리

- 서버의 부담을 줄이기 위해 Stateless를 지향하는 것이 바람직함

- 로그인 등 Stateful 상태가 필수적인 기능들을 위해 토큰 등의 기술 사용 가능