- 클라이언트(Client)와 서버(Server)간의 통신을 상태유지(Stateful)하느냐, 상태유지 하지않느냐(Stateless)로 구분
1. Stateful
- 클라이언트와 서버 관계에서 서버가 클라이언트의 상태를 보존함
- 클리아언트와 서버 간에 송수신을 하며 단계별 과정을 진행하는데 있어, 서버에서 클라이언트가 이전 단계에서 제공한 값을 저장하고 다음 단계에서도 저장한 상태
- 일반적으로 브라우저의 쿠기(Cookie)에 저장되거나, 서버의 세션(Session) 메모리에 저장되어 상태 유지
- 예시)
홈페이지에서 한 번 로그인하면 페이지를 이동해도 로그인이 풀리지 않고 유지되는것
2-1. Stateful한 프로토콜
대표적인 Stateful 구조를 따르는 프로토콜은 TCP의 3-Way handshaking과정이 있음
- 클라이언트는 서버에 SYN(접속요청 메시지)를 전송하고 SYN_SENT 상태가 됨
- 서버는 SYN 요청을 받고, 클라이언트에 요청을 수락하는 SYN/ACK를 전송하고 SYN_RECEIVED상태가 됨
- 클라이언트는 서버에게 수락 확인으로 ACK를 또 보내고, 수신 받은 서버는 ESTABLISHED상태가 됨
- 세션 '상태'가 ESTABLISHED가 됨으로써, 서버와 클라이언트는 서로 데이터를 주고 받을 수 있는 상태가 됨
2-2. 문제점
- 해당 서버가 멈추거나 여러 이유로 해당 서버가 못쓰게 되어 다른 서버를 사용 할 때 문제점 발생
▶이유 : 새로운 서버에서는 이전 서버에서 가지고 있던 상태값들을 가지고 있지 않기 때문 - 하나의 서버가 1만명의 클라이언트 처리할 능력이 있을때 그보다 많은 수의 클라이언트가 몰리면, 이미 연결되 클라이언트 중 일부가 빠져야 다음 클라이언트가 처리됨
2. Stateless
- 서버가 클라이언트의 상태를 보존하지 않음
- 서버는 단순히 요청이 오면 응답을 보내는 역할만 수행
▶ 상태 관리는 전적으로 클라이언트의 책임 - 통신에 필요한 모든 상태 정보들은 클라이언트에서 가지고 있다가 서버와 통신할 때 데이터를 실어서 보내는 것
- 장점
- 서버의 부하 감소
- 대량의 트래픽 발생 시 서버 확장을 통해 대처를 수월 하게 할 수 있음
2-1. Stateless한 프로토콜
- UDP와 HTTP
- 무상태인 브라우저는 데이터를 전송할때마다 연결하고 바로 끊어버림
- 서버쪽은 클라이언트와의 세션 정보를 저장하는 과정을 거치지 않아 클라이언트가 송신한 데이터가 수신되었는지 확인하지 않으며 클라이언트와의 세션 상태에 관계없이 요청에 대한 응답만 수행하게 됨
2-2. Stateless문제점
- 클라이언터의 요청에 상대적으로 더 많은 데이터가 소모됨
- 매 요청시 자신의 부가정보를 줘야함
2-3. Stateless와 토큰(Token)
- JWT토큰 : stateless특징을 유지하면서도 로그인 상태를 유지를 가능 하게 하는 기술
▶ 클라이언트가 로그인 정보를 지니고 있다가 서버에 통신할때 넘겨줌으로써 로그인됐음을 인증하는 방식 - 무상태를 지향해야하며 필요한 경우에만 상태유지를 해야함
2-4. Stateless와 HTTP/ REST
- HTTP : Stateless한 성격을 가진 프로토콜
- REST : Stateless한 성격을 가진 구조(Architecture)
▶ REST는 HTTP프로토콜 상에 구현된 Resource Oriented Architecture(ROA)설계구조
▶ HTTP와 REST모두 Stateless한 성격
더보기
참고)
[WEB] 🌐 Stateful / Stateless 차이 💯 정리 (tistory.com)
[WEB] 🌐 Stateful / Stateless 차이 💯 정리
Stateful 과 Stateless 차이점 웹 공부를 하다보면 클라이언트(Client)와 서버(Server)간의 통신을 상태유지(Stateful) 하느냐, 상태유지하지않음(Stateless) 으로 하느냐 라는 말귀를 한번쯤은 들어본 적이 있
inpa.tistory.com
stateful과 stateless 차이 (velog.io)
stateful과 stateless 차이
클라이언트-서버 관계에서 서버가 클라이언트의 상태를 보존함을 의미한다.클라이언트의 이전 요청이 서버에 잘 전달되었을 때, 클라이언트의 다음 요청이 이전 요청과 관계가 이어지는 것을
velog.io
'CS지식 > 네트워크' 카테고리의 다른 글
[CS지식 - 네트워크] RESTful 의미와 설계규칙 (0) | 2023.01.27 |
---|---|
[CS 지식 - 네트워크] TCP/IP 흐름제어, 혼잡제어 (0) | 2023.01.26 |
[CS지식 - 네트워크] OSI 7계층 (1) | 2023.01.26 |
[CS지식 - 네트워크] UDP와 TCP 차이 (0) | 2023.01.23 |
[CS 지식 - 네트워크] 세션과 쿠키 (0) | 2023.01.14 |