블로그를 옮겨서 첫글이네요 하하.
첫글은 Stateful과 Stateless에 대해 알아보겠습니당.
Stateless 과 Stateful 란?
웹 브라우저 및 서버용 네트워크 프로토콜은 Stateless와 Stateful로 두 가지의 유형으로 분류되어 있습니다.
이 두개의 프로토콜은 서버의 상태 또는 세션 정보를 저장하기 위한 서버 또는 서버 측의 소프트웨어의 요구 사항에 따라 구별되어집니다.
Stateless
Stateless는 영어의 뜻 그대로 상태를 저장하지 않습니다, 클라이언트가 서버에 요청을 보내고 서버가 응답하는 네크워크 프로토콜 유형입니다. 다중 요청에 대해서 서버가 각 세션 정보 또는 각 통신 파트너에 대한 정보를 유지할 필요가 없습니다.
HTTP, UDP, DNS 가 Stateless 프로토콜의 종류입니다.
- 장점
- 서버 설계를 단순화 합니다.
- 다중 링크 통신 또는 세션에 대한 정보를 저장하지 않기 때문에 적은 리소스를 필요로 합니다.
Stateful
이름만 봐도 Stateful은 Stateless와 상태가 반대인걸 알 수 있습니다. Stateful은 클라이언트가 서버에 요청을 보내면 일종의 응답을 기대하고 응답을 받지 못하면 요청을 다시 보냅니다.
FTP, Telnet이 여기에 속합니다.
- 장점
- 연결유지로 인하여 빠른 상호작용이 가능하다.
- 빠른 처리속도에 적합하다.
이 두가지의 차이를 아시겠나요?
글로만 적으면 이해가 쉽지않기 때문에 인터넷 뱅킹으로 예시를 들겠습니다.
A :계좌이체를 하려합니다.
B : 비밀번호를 입력하셔서 인증을 해주세요
A : XXXX
B : 무엇을 하실건가요?
A : 아 토토로씨한테 100만원만 보내줘
B: 네, 정보를 이해했으며 이 이전의 정보들을 확인하겠습니다.
그냥 대화의 내용만 보면 제대로 작동하는거 같습니다
여기서 마지막 두 단계를 실행하려면 1단계의 정보가 필요하다, 하지만 우리가 사용하는 HTTP에서의 프로토콜은 Stateless를 사용하므로 세션의 상태를 저장하지않는다.
이 문제를 처리하는 방법에는 두 가지의 방법이 존재합니다.
- Stateful : 서버측(은행)에 추가 정보를 저장하고 다음 지시를 기다린다.
- Stateless : 웹브라우저(클라이언트)에 추가 정보를 저장하고 각 단계에 이전 단계에서의 추가 정보를 서버에 전달한다 (쿠키나, localStorage)를 이용한다.
하지만 이 두가지의 방법은 각각의 문제점이 있습니다.
A : 계좌이체를 하려합니다
B : 비밀번호를 입력해주세요
A : XXXX
B : 네?
A : 토토로씨 한테 100만원 보내줘
B : 네?
이게 Stateful의 문제점이다. 서버에 정보를 저장하기 때문에 서버가 바뀌면 위와 같이 바보가되는 모습을 볼 수 있다.
어떻게 처리할까?
Stateless방식을 사용하는것 서버는 아무것도 저장하지 않는다.
A :계좌이체를 하려합니다.
B : 비밀번호를 입력하셔서 인증을 해주세요 (서버에 저장 X)
A : XXXX
B : 무엇을 하실건가요? (서버에 저장 X)
A : 아 토토로씨한테 100만원만 보내줘
B: 네, 정보를 이해했으며 이 이전의 정보들을 확인하겠습니다.
현재 우리가 사용하는 웹브라우저는 HTTP의 프로토콜을 사용하기 때문에 무상태를 기본적으로 사용하고 있다, 그렇기때문에 보통의 브라우저에서는 Stateless를 많이 사용하는것이다.