HTTP의 특성과 HTTP 메시지

Kim Dong Kyun·2023년 6월 9일
1
post-custom-banner

1. HTTP 특성

1 - 1 STAETELESS (비상태성)

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

  • 장점 : 서버 확장성이 높다 (스케일 아웃, 규모에 대한 확장 용이)
  • 단점 : 클라이언트가 추가 요청을 해야한다.

김영한님 강의에서는 다음과 같이 표현된다.

고객: 이 노트북 얼마인가요? 
점원**"A"**: 100만원 입니다.

고객: 노트북 2개 구매하겠습니다.
점원**"B"**: 노트북 2개는 200만원 입니다. 신용카드, 현금중에 어떤 걸로 구매 하시겠어요?

고객: 노트북 2개를 신용카드로 구매하겠습니다.
점원"C": 200만원 결제 완료되었습니다.

자바/스프링 귀신 김영한님에 대한 존경을 담아 code블럭으로 대화를 구성했다.

  • 점원은 A,B,C 계속 바뀌어도 구매 프로세스는 지속할 수 있다
  • 이 경우 클라이언트는 요청을 좀 더 해야되는 부분이 있긴 하다

STATELESS 특

  • 중간에 다른 점원으로 바뀌어도 된다.
  • 갑자기 고객이 증가해도 점원을 대거 투입할 수 있다.
  • 갑자기 클라이언트 요청이 증가해도 서버를 대거 투입할 수 있다.

무상태는 응답 서버를 쉽게 바꿀 수 있다. -> 무한한 서버 증설 가능

즉, 다음과 같이 중계 서버를 통해 수평적으로 서버 확장에 매우 유리하다.

어? 그러면 로그인 이런거는요??? 모임??

  • 일반적으로 브라우저 쿠키와 서버 세션등을 사용해서 상태 유지 가능. (보통은 인증을 위해서!)

  • 상태 유지는 최소한만 사용


1 - 2 CONNECTIONLESS(비연결성)

들어온 요청에 대해서 응답을 하고 나면 CONNECTION 을 종료시킨다.

  • 예로, 1시간 동안 수천명이 서비스를 사용해도 실제 서버에서 동시에 처리하는 요청은 수십개 이하로 매우 작다
  • 켜놓고 그냥 있기만 해도 연결 유지하면, 서버는 대체 얼마나 힘을 써야하는거여?

--> Connectionless 하게 운영하는 게 낫겠네!

무조건 좋은거겠네?

그건 또 아니쥐!

  1. TCP/IP 연결을 매번 새로 맺어야 함
  • 3 WAY Handshake 시간이 매번 추가된다는 점!
  1. 웹 브라우저로 사이트 요청하면 HTML + JS + CSS, IMAGE ... 많은 자원들이 한번에 다운로드됨
  • 자원을 하나하나 받을 때마다 연결하고 끊고 이러면 엄청 비효율적이네?

그래서, 현재는 HTTP 지속 연결 (Persistence Connections) 로 문제를 해결한다. 더불어 HTTP/2 , HTTP/3 에서는 더 많은 최적화가 이루어졌음!

Persistent Connection? HTTP Keep Alive? <- 링크


2. HTTP 메시지

2 - 1 시작 라인(==start line)

GET /search?q=hello&hl=ko HTTP 1.1
HOST : www.google.com

위는 예시!

요청 메시지

  1. HTTP Method

GET / POST / PUT(Or patch) / DELETE ...

등으로 대표되는 HTTP Method 가 제일 먼저 등장

예시에서는 "GET" 부분

  1. 요청 대상

absolute-path?query

절대경로= "/" 로 시작하는 경로

요청에서는 "/search?q=hello&hl=ko" 부분

  1. HTTP Version

"HTTP 1.1" 부분


응답 메시지

HTTP/1.1 200 OK
Content-Type: text/html;charset=UTF-8 Content-Length: 3423

<html> <body>...</body>
</html> // 요청 성공후 응답하는 콘텐츠들...
  1. HTTP VERSION
  1. HTTP Status code : 상태 메시지
  1. 이유 문구 : 사람이 이해할 수 있는 짧은 "상태 코드 설명" 글

2 - 2 Header

HTTP 전송에 필요한 모든 부가정보가 존재하는 곳

ex : body 내용, 크기, 압축, 인증, 클라이언트 정보, 서버 애플리케이션 정보, 캐시 정보 등등 엄청 많음

거의 뭐 바디빼고 다 있다고 생각하면 된다!

  • 임의의 헤더도 추가 가능하다
  • JWT 인증을 위해 사용했던 "Authorization" 은 국룰이긴 하지만 직접 추가한 헤더임

2 - 3 Body

실제 전송할 데이터

  • HTML 문서, 이미지, 영상, JSON 등등 byte로 표현할 수 있는 모든 데이터 전송 가능

추가로

이 글 대부분은 김영한님의 강의 내용 기반으로 직접 정리한 내용입니다. 추가 내용도 있어요!

post-custom-banner

0개의 댓글