HTTP의 특징(클라이언트 서버 구조, 무상태 프로토콜 Stateless, Stateful)

0

1.클라이언트 서버 구조

HTTP는 Request와 Response의 구조를 가진다.

클라이언트는 요청하면 서버가 응답할때까지 대기한다

HTTP의 클라이언트는 Request만 하고 서버는 Response만 한다는 뜻이다.
즉, 클라이언트와 서버를 분리하여 독립된 하나의 영역을 가지게 되는데
클라이언트는 UI에만 집중하고 서버는 데이터 저장과 비즈니스 로직에만 집중하게 된다.
이로 인해 클라이언트와 서버가 각각 발전할 수 있는 계기가 된다.
(독립적인 진화가 가능 함)

2.무상태 프로토콜(Stateful, Stateless)

HTTP는 무상태 프로토콜을 지향한다.(Stateless)

서버가 클라이언트의 상태를 보존하지 않는다는 뜻이다!

김영한 강사님께서는 아래와 유사한 예를 들었는데

고객 : 이 노트북 얼마인가요

점원A : 100만원입니다.

고객 : 2개 구매할게요

점원B : 뭘요?

고객 : 신용카드로 할게요

점원C : 뭘 몇개 사는거죠?

이게 Stateful의 요청방식이다. 즉, 우린 요청할 때 이전 요청을 기억하고 요청해야한다.

유사한 예시로 Stateful의 작동 방식을 정리해보자

고객 : 이 노트북 얼마인가요?

점원A : 100만원입니다.

고객 : 2개 구매할게요

점원A : 200만원입니다. 신용카드, 결제는 어떻게 하시겠습니까?

고객 : 신용카드로 할게요

점원A : 결제 완료되었습니다.

그럼 이제 무상태 프로토콜(Stateless)에서 올바른 요청을 어떻게 하는지 알아보자

고객 : 이 노트북 얼마인가요

점원A : 100만원입니다.

고객 : 100만원짜리 이 노트북을 2개 구매할게요

점원B : 결제는 뭐로 하시겠어요?

고객 : 100만원짜리 이 노트북 2개를 신용카드로 할게요

점원C : 결제 완료되었습니다.

이것은 어떤 차이를 가져오는가?
Stateful같이 요청을 한다고 했을때 서버가 바뀐다면 반드시 문제가 생긴다.

Stateless같은 요청을 하면 요청마다 서버가 달라져도 문제가 생기지 않는다.
또한 클라이언트 요청이 증가하더라도 서버를 대거 투입하여 증설이 가능하다.
즉, 이는 무한하게 서버를 증설(Scale out - 수평 확장 유리)할 수 있게 해주는 HTTP의 중요한 특징이다.

서버는 상태를 보관하지 않고 계속해서 요청할 때 클라이언트가 상태를 저장해서 보내준다.
그러므로 개발된 애플리케이션에서 특정 서버에 문제가 생기더라도 다른 서버에서 처리해줄 수 있도록 설계가 되어있다.

Stateless의 실무적 한계로는

서버에 상태를 유지해야하는 경우에도 무상태로 유지가 된다는 것인데
흔히 로그인의 경우에는 쿠키나 세션에 보관해서 이용하고 있으며
너무 많은 양의 데이터를 보내야한다는 단점이 있다.
그럼에도 불구하고 상태유지는 최소한으로만 설계해야 한다.(어쩔 수 없는 경우에만)

HTTP의 특성에 대해 알아보았는데 비연결성과 HTTP메세지로 소통한다는 점에 대해서는 다음글에서 마저 정리해보도록 하겠다!

출처 : 모든 개발자를 위한 HTTP 웹 기본 지식(김영한 강사님 인프런 강의)

profile
비전공자 개발초보입니다!

0개의 댓글