모든 개발자를 위한 HTTP 웹 기본 지식 Chapter 4

이규훈·2024년 12월 31일

HTTP

Hyper Test Trnasfer Protocol의 약자

최근에는 모든 것을 HTTP로 통신함

현재 1.1 버전이 메인스트림이고 많이 사용되는 버전이다. 2,3은 버전 개선정도의 느낌이다.

TCP는 UDP보다(3way handShake 과정 등등 때문에)
속도가 빠르지않아 UDP가 HTTP3에 사용됨

HTTP 특징

클라이언트 서버 구조
무상태 프로토콜 지향
비연결성
HTTP 메세지로 통신
단순함, 확장 가능

클라이언트 서버 구조


Request Response구조
HTTP는 클라이언트가 서버에 요청을 보낼때까지 서버는 대기해야함.
서버는 요청을 받고 요청에 대한 결과를 만들어서 응답함.

이렇게 분리해야하지 비즈니스 로직을 서버에 밀어넣고 클라이언트는 사용성에 집중할 수 있음. 그래야지 클라이언트 서버 각자 진화가 가능함.

Stateful, Stateless

Stateful

예시
고객: 이 노트북 얼마인가요?
• 점원: 100만원 입니다.
• 고객: 2개 구매하겠습니다.
• 점원: 200만원 입니다. 신용카드, 현금중에 어떤 걸로 구매 하시겠어요?
• 고객: 신용카드로 구매하겠습니다.
• 점원: 200만원 결제 완료되었습니다.

점원이 중간에 바뀌면?

• 고객: 이 노트북 얼마인가요?
• 점원A: 100만원 입니다.
• 고객: 2개 구매하겠습니다.
• 점원B: ? 무엇을 2개 구매하시겠어요?
• 고객: 신용카드로 구매하겠습니다.
• 점원C: ? 무슨 제품을 몇 개 신용카드로 구매하시겠어요?

Stateful, 정리

• 고객: 이 노트북 얼마인가요?
• 점원: 100만원 입니다. (노트북 상태 유지)
• 고객: 2개 구매하겠습니다.
• 점원: 200만원 입니다. 신용카드, 현금중에 어떤 걸로 구매 하시겠어요?
(노트북이라는 걸 알고 있음, 2개 상태 유지)
• 고객: 신용카드로 구매하겠습니다.
• 점원: 200만원 결제 완료되었습니다. (노트북, 2개, 신용카드 상태 유지)

이렇게 상태를 유지하는 것이 StateFul임

StateLess

Stateless 예시

• 고객: 이 노트북 얼마인가요?
• 점원: 100만원 입니다.
• 고객: 노트북 2개 구매하겠습니다.
• 점원: 노트북 2개는 200만원 입니다. 신용카드, 현금중에 어떤 걸로 구매 하시겠어요?
• 고객: 노트북 2개를 신용카드로 구매하겠습니다.
• 점원: 200만원 결제 완료되었습니다.

Stateless, 점원이 중간에 바뀌면?

• 고객: 이 노트북 얼마인가요?
• 점원A: 100만원 입니다.
• 고객: 노트북 2개 구매하겠습니다.
• 점원B: 노트북 2개는 200만원 입니다. 신용카드, 현금중에 어떤 걸로 구매 하시겠어요?
• 고객: 노트북 2개를 신용카드로 구매하겠습니다.
• 점원C: 200만원 결제 완료되었습니다

상태유지에서는 중간에 다른 점원으로 바뀌면 장애가 일어남. 그러나 Stateless는 중간에 바뀌더라도 문제가 없음

항상 같은 서버가 유지되어야하는 단점이 있다.

그러나 여기서 만약 서버가 에러가 날 경우

클라이언트는 처음부터 요청을 보내야한다.

그러나 Stateless는 이런 걱정이 없어진다. -> 수평 확장에 유리해짐

StateLess 한계

모든 것을 설계할 수 있는 경우도 있고 없는 경우도 있음
상태는 유지해야하는 경우가 있음 (로그인) -> 이 경우는 쿠키, 세션을 통해서 유지함

비연결성

TCP/IP의 연결 같은 경우에는 연결을 유지하는 모델이다.

연결을 유지할 경우 연결을 유지하는 서버의 자원이 지속적으로 소모됨


또한 요청이 없는 클라이언트에 대해서도 연결을 유지해줘야함 -> 서버 자원 낭비

연결 유지하지 않는 모델

각 요청이 오는 경우에는 연결을 유지하고 그 이후로는 연결을 끊음으로써 최소한의 자원만을 유지함

HTTP는 기본이 연결을 유지하지 않는 모델
• 일반적으로 초 단위의 이하의 빠른 속도로 응답
• 1시간 동안 수천명이 서비스를 사용해도 실제 서버에서 동시에 처리하는 요청은 수십개 이
하로 매우 작음
• 예) 웹 브라우저에서 계속 연속해서 검색 버튼을 누르지는 않는다.
• 서버 자원을 매우 효율적으로 사용할 수 있음

한계와 극복

TCP/IP 연결을 새로 맺어야함 -> 3way handShake 시간이 추가

웹브라우저 사이트를 요청하면 HTML, JS CSS등 한번에 다운로드

HTTP는 이를 지속 연결을 통해서 문제 해결

HTTP 지속 연결


각 요청을 받고 해당 응답을 맏고 연결을 유지하는 형태

HTTP 메세지

요청 메세지를 보면

요청 메세지 -> request-line

요청 메세드 -> GET POST PUT DELETE등등

profile
개발취준생

0개의 댓글