Network

[HTTP] HTTP는 Stateless, Connectionless하다

HEY__ 2022. 7. 21. 17:20
728x90

이 글은 공부를 하면서 알게 된 내용들을 기록하는 글 입니다. 오류나 고쳐야 할 사항들이 있다면 지적 부탁드립니다!

⛅️ HTTP는 Stateless하다.

 Stateless?

  •  Stateless란 서버가 클라이언트의 상태를 저장하지 않는 것을 말한다.
  •  장점 : 서버의 확장성이 높다 → 서버에 상태를 저장하지 않으므로 서버 확장이 용이하다.
  •  단점 : 클라이언트가 데이터를 추가 전송해야 한다.

 

 

 상황 예시 - 가게에서 물건 구매

<Stateful>
고객: 이 바나나 얼마인가요?
점원 : 4000원입니다.

고객 : 2개 구매할게요.
점원 : 8000원 입니다. 신용카드, 현금 중에 어떤걸로 결제하시겠어요?
          (구매 상품수량에 대한 state 저장/유지)

고객 : 신용카드로 하겠습니다.
점원 : 8000원 결제 완료되었습니다.
         (구매 상품, 수량, 결제 수단에 대한 state 저장/유지)
  •  서버가 클라이언트의 상태를 저장하는 Stateful의 경우에 점원이 바뀐다면, 지니고 있던 상태 정보를 다른 점원에게 미리 알려주어야 한다.
    만약 상태 정보(문맥)을 전달하지 않는다면, 다음 점원은 고객의 말을 이해하지 못할 것이다.
  • 클라이언트는 통신하던 서버와 계속 통신해야 하므로, 서버 장애 발생 시 문제가 커진다.
  •  따라서 서버의 확장이 쉽지 않다.

 

<Stateless>
고객 : 이 바나나 얼마인가요?
점원 : 4000원 입니다.

고객 : 바나나 2개 구매할게요.
점원 : 바나나 2개는 8000원입니다. 신용카드, 현금 중에 어떤걸로 결제하시겠어요?

고객 : 바나나 2개를 신용카드로 결제하겠습니다.
점원 : 8000원 결제 완료되었습니다.
  •  클라이언트가 서버에게 정보를 추가적으로 알려주어야 한다.   ex) 2개 구매 → 바나나를 2개 구매
  • 서버가 클라이언트의 상태를 저장하지 않기 때문에, 서버(점원)이 바뀌어도 하던 일을 이어서 진행할 수 있다.
  • 클라이언트의 요청이 증가해도 서버를 대거 투입할 수 있다. Scale out : 응답서버를 쉽게 바꿀 수 있다.

 

 

 Stateless의 실무 한계

  • 모든 것을 Stateless로 설계하면 좋겠지만, 실무에서는 그 한계가 있다.
  • 예를 들어 로그인한 사용자의 경우 로그인 했다는 상태를 서버에 유지할 필요가 있다.
  • 웹 브라우저의 쿠키, 서버 세션 등을 이용하여 상태(State)를 유지할 수 있다.
  • 상태 유지는 최소한으로만 사용하자.

 

 


⛅️ HTTP는 Connectionless하다.

 Connection-oriented?

  •  Connection-oriented(연결 유지) 모델은 클라이언트의 요청 & 서버의 응답 이후에도 연결을 계속 유지한다.
  • 요청 & 응답 이후에도 연결을 계속 유지하기 때문에 서버의 자원을 계속 소모하게 된다.

김영한님 자료 : 연결 유지 모델

 

 Connectionless?

  • HTTP는 Connectionless한 특성이 있다.
  • 클라이언트의 요청 & 서버의 응답 이후에는 연결을 종료한다.
  • 1시간동안 수천명이 서비스를 사용해도, 실제 서버에서의 동시 처리 요청은 매우 적다.
    따라서 서버 자원을 효율적으로 사용할 수 있다.

김영한님 자료 : 연결을 유지하지 않는 모델

 Connectionless의 한계

  •  TCP/IP 연결을 계속 새로 맺어야 한다 → 3-way handshake 시간이 소요된다.
  • 사이트 요청 시 html, css, javascript, 이미지 등 많은 자원을 다운로드 → 자원마다 연결을 생성하기 때문에 overhead가 너무 크다.

 

 

 Persistent Connection

object를 보내고 연결을 끊는 것이 아니라, 일정 시간동안 동일한 TCP 연결을 사용하며 여러 개의 http request를 처리하는 방식.

김영한님 자료 : Persistent Connection

 

 

 

 

728x90