HTTP (Hypertext Transfer Protocol)는 클라이언트와 서버가 웹 상에서 데이터를 주고 받기위한 데이터 교환 protocol(규칙), 브라우저인 클라이언트에 의해 전송되는 메시지를 requests(요청)라고 부르며, 그에 대해 서버에서 응답으로 전송되는 메시지를 responses(응답)라고 한다.
클라이언트가 서버에 요청하면 서버는 클라이언트에 응답하는 구조이다.
- 클라이언트가 서버에 요청하고 응답을 대기
- 서버는 클라이언트의 요청에 대한 응답을 생성하여 전송
서버가 클라이언트의 상태를 보존하지 않는다.
서버의 확장성에 용이하다는 장점이 있지만, 클라이언트가 추가 데이터를 전송해야 하는 단점이 존재한다.
클라이언트의 요청A에 대한 상태를 해당 요청을 받은 서버A가 기억하고 있는 것으로 항상 같은 서버A가 유지되어야 한다. 만약 서버A에서 장애가 생긴다면 유지되던 상태 정보가 없어져 버리므로 처음부터 다시 요청을 해야한다.
무상태 프로토콜이라면 클라이언트 요청A을 보낼 때, 데이터를 다 담아서 보내기 때문에 아무 서버나 호출할 수 있다. 무상태는 응답 서버를 쉽게 바꿀 수 있는 특징 덕분에 서버증설 측면에서 용이하다.
상태 유지가 필요 없는 단순한 서비스 소개 화면 같은 경우엔 무상태로 설계할 수 있지만, 상태 유지가 필요한 서비스라면 이를 위해 브라우저 쿠키, 세션, 토큰 등을 이용해 상태를 유지한다. 이러한 상태 유지는 최소한으로 사용한다.
카페에서 아메리카노 3잔을 신용카드로 결제한다는 가정을하면
고객(클라이언트), 점원(서버)
- 상태 유지(Stateful)중 서버가 바뀜
고객 : 아메리카노 얼마인가요?
점원A : 3천원입니다.
고객 : 3잔 주세요.
점원B : 어떤 음료 3잔 결제하십니까?
고객 : 신용카드로 결제할게요.
점원B : 어떤 음료를 신용카드로 몇 잔 결제하십니까?
- 무상태(Stateless)
고객 : 아메리카노 얼마인가요?
점원A : 3천원입니다.
고객 : 3잔 주세요.
점원B : 9천원입니다. 결제수단은 어떻게 하시겠습니까?
고객 : 신용카드 결제할게요.
점원C : 만원 결제 완료 되었습니다.
- 상태 유지 : 중간에 다른 서버로 바뀌면 안됨
중간에 다른 서버으로 바뀔 때 상태 정보를 다른 서버에게 미리 알려줘야한다.- 무상태 : 중간에 다른 서버로 바뀌어도 된다.
갑자기 클라이언트 요청이 증가해도 서버를 추가로 투입할 수 있다.
무상태는 응답 서버를 쉽게 바꿀 수 있다. —> 서버증설 용이