Stateless(무상태 프로토콜)
무상태 프로토콜의 주요 특징은 서버가 클라이언트의 상태를 보존하지 않는다는 점이다.
이 덕분에 서버를 확장하기 쉬우나, 클라이언트가 요청을 보낼때마다 추가적인 데이터 전송이 필요하다.
반대로 Stateful 하다는 것은 서버가 클라이언트이 상태를 보존하는 것이겠죠??
Stateful 의 예시 시나리오
1) 클라이언트가 서버에 상품A 가격 조회 요청 -> 서버는 클라이언트에게 상품A의 가격을 응답
2) 클라이언트는 해당 상품의 구매 개수 요청 -> 서버는 이전 상품A를 기억하고 있기 때문에, 구매 개수와 가격을 연산처리 후 값을 응답 및 결제 수단 선택 요청 폼 전송
3) 클라이언트는 해당 상품의 결제 수단 선택 후 서버에 전송 -> 서버는 이전 상품 A, 구매 개수, 가격을 기억하고 있고, 결제 수단도 받았기 때문에 결제 진행
-> 클라이언트는 편하나, 요청이 많고 메모리를 많이 써야하는 서버의 부하가 극심하다.
Stateless 의 예시 시나리오 (안 좋은 예)
1) 클라이언트가 서버에 상품A 가격 조회 요청 -> 상품 가격을 처리하는 서버A는 클라이언트에게 상품A의 가격을 응답
2) 클라이언트는 해당 상품의 구매 개수 요청 -> 구매 개수 * 가격을 처리하는 서버B는 해당 요청만으로는 어떤 상품인지 알 수 없다
3) (이 단계까지 오지도 않겠지만, 서버 병크로 결제까지 왔다고 가정) 클라이언트는 결제 수단 선택 후 서버에 전송 -> 결제를 처리하는 서버C는 해당 요청만으로는 물건, 가격 아무것도 알 수 없다
-> 중간 단계별 프로세스를 처리하는 서버가 다르면, 상태가 유지 되지 않기 때문에 정상적인 흐름이 불가하다.
즉, 클라이언트는 각 단계별 서버로부터 받은 응답을 저장했다가 그 내용을 포함하여 다음 프로세스의 서버에 요청을 전달해야한다
Stateless 의 예시 시나리오 (좋은 예)
1) 클라이언트가 서버에 상품A 가격 조회 요청 -> 상품 가격을 처리하는 서버A는 클라이언트에게 상품A의 가격을 응답
2) 클라이언트는 상품A 의 구매 개수 요청 -> 구매 개수 * 가격을 처리하는 서버B는 해당 요청에 있는 상품 A를 토대로 개수 * 가격 연산 처리 후 결과 응답
3) 클라이언트는 상품A의 구매 개수, 결제 수단 선택 후 서버에 전송 -> 결제를 처리하는 서버C는 해당 요청의 구매 물품, 가격, 결제 수단을 통해 정상적으로 결제를 진행
-> 클라이언트가 각 요청별로 이전 응답 값을 포함하여 전송해야 하는 부담이 조금 늘긴 했지만, 대신 서로 다른 프로세스를 처리하는 서버를 무한정으로 증설할 수 있다.
여담
백엔드, 서버 개발자는 반드시 개발을 할 때 Stateless를 기억해야한다.
수강신청, 선착순 이벤트등 같은 시간에 대용량 트래픽이 발생하는 서비스 같은 경우에는 다음과 같은 로직을 떠올리자
이벤트 설명 페이지 (순순 HTML) -> 버튼 클릭 -> 이벤트 접속
위와 같은 방법을 통해 이벤트 설명 페이지에서 상세 설명등을 사용자들이 읽도록 하여 최대한 트래픽을 줄이고, 이후에 Stateless 를 적용하여 각 요청을 처리하도록 하자 !
결론
즉, 한가지 상태를 유지 하며 서버와 통신하는 Stateful은 서버에 큰 부하를 발생시킬 수 있다. 반면에 Stateless는 각 서버별로 처리하는 로직이 다르고(그래서 한 서버에서 장애가 발생해도 다른 서버에는 영향 없다) 클라이언트 측에서 전송하는 내용들로만 프로세스를 처리하기 때문에, 무한정으로 서버를 증설할 수 있게되고, 서버에 부하가 줄어든다.
Stateless를 기본으로 사용하되 Stateful 을 사용해야하는 상황도 있다.
예를 들어 로그인을 한 사용자는 로그인 했다는 사실을 서버에 유지해야한다 -> Stateful 적용
즉 우리는 Stateful은 최소한으로 사용하고, 주로 Stateless로 처리하는 방법을 모색해야한다.
'HTTP' 카테고리의 다른 글
| [HTTP] HTTP API 만들어보기 1 - 리소스와 행위의 분류 (0) | 2025.06.15 |
|---|---|
| [HTTP] Connectionless - 비연결성 모델 (0) | 2025.06.15 |
| [HTTP] URL, URI , URN 이 대체 뭔데? (0) | 2025.06.14 |
| [HTTP] Cookie - 쿠키 (0) | 2025.05.29 |
| [HTTP] 4xx - Client Error / 5xx - Server Error (0) | 2025.05.22 |