순서
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 상태가 필수적인 기능들을 위해 토큰 등의 기술 사용 가능
'개발 공부' 카테고리의 다른 글
[CLI vs GUI] feat. UX, UI (0) | 2024.09.04 |
---|---|
[MultiValueMap] feat. HashMap, TreeMap, LinkedHashMap (0) | 2024.09.02 |
[다양한 코딩 스타일] feat. GNU, K&R, BSD (0) | 2024.01.19 |
[파이썬 슬라이스 사용하기] feat. 시퀀스 자료형 (0) | 2024.01.16 |
[AWS LB(Load Balancer)] feat. ALB, NLB (2) | 2023.12.05 |