HTTP 개요
HTTP
HTTP란 Hyper Text Transfer Protocol 의 약자로서 클라이언트와 서버 사이에 이루어지는 요청/응답 프로토콜이다.
지금의 web 서비스라고 하면 거의 전부라 할 정도로 HTTP로 모든 것을 처리할 수 있다.
웹페이지를 구성하는 HTML 부터 각종 파일들, API를 통한 json, xml 형식까지 거의 모든 형태의 데이터를 전송 가능하다.
기반 프로토콜
HTTP는 버전 별로 다른 프로토콜이 사용된다.
- TCP : HTTP/1.1 , HTTP/2
- 현재 1.1을 가장 주로 사용하고 있다.
- UDP : HTTP/3
- 최근 급 부상하여 사용도가 올라가고 있다.
Stateful, Stateless
- Stateful 은 상태유지, Stateless 는 무상태를 의미한다.
stateful
- 상태유지란 한 클라이언트에 대해서 특정 서버가 해당 클라이언트의 상태를 유지함을 의미한다.
- 데이터 A의 1번글을 원한다 쳤을 때, 데이터 A를 달라는 요청 이후엔 1번글만 요청해도 서버는 클라이언트가 A 데이터를 원한다는 상태를 유지하고 있기 때문에 A의 1번글을 전달한다.
- 항상 같은 서버가 유지되어야 하는 불편함이 있다.
- 중간에 서버가 장애가 났을 때 새로운 서버를 사용함에 따라 기존의 상태는 무용지물이 된다.
stateless
- 무상태란 서버가 클라이언트에 대한 상태를 보관하지 않고 각각의 요청에 맞는 응답만 해주는 것을 의미한다.
- 스케일 아웃(수평확장) 에 매우 유리하다.
- 서비스의 트래픽이 몰렸을 때 복잡한 로직 없이 단순히 서버를 늘리는 것만으로 해결이 가능하다.
- 비용적으로나 유지보수 측면에서 stateful 보다 우수하다고 할 수 있다.
- 하지만 모든 것을 stateless로 설계 할 순 없다.
- 최소한의 stateful 안에서 최대한 stateless로 설계한다.
- 로그인등은 쿠키와 세션등을 사용하여 처리
비연결성
- 만약 모든 클라이언트와 서버의 연결이 계속 유지된다면 서버의 자원이 낭비되게 된다. 그렇기에 HTTP는 기본적으로 연결을 유지하지 않는 비연결성을 갖는다.
특징과 장점
- 일반적으로 초 단위 이하의 빠른 속도로 응답한다.
- 수천명이 서비스를 사용해도 동시에 처리하는 요청은 수십개 이하이다.
- 서버 자원을 효율적으로 사용 가능하다.
한계점
- 연결이 유지되지 않는 만큼 클라이언트의 요청에 따라 TCP/IP 매번 새로 해야한다.
- 3 way handshake 시간 소모
- 연결 할 때마다 페이지의 수 많은 리소스들이 함께 다운로드 됨
- HTTP 지속연결 (Persistent Connections)로 문제 해결
- HTTP/2 , HTTP/3 에서 더욱 최적화됨
HTTP 메시지
기본 구조는 다음과 같다.
출처:https://deepwelloper.tistory.com/98
요청메시지
HTTP 요청 메시지의 구조는 다음 예시를 통해 살펴보자.
HTTP 요청메시지 | HTTP 메시지 구조 |
---|---|
GET/search?q=jungho&hl=ko HTTP/1.1 | start-line |
Host:www.google.com | header |
공백 | empty-line |
<요청메시지에선 body가="" 있을="" 수도="" 없을="" 있음="">요청메시지에선> | message body |
- start-line
- HTTP 메소드 (GET,POST…)
- 요청대상
- (‘/’) 로 시작하는 절대경로
- 쿼리
- HTTP 버전
- Header
- 전송에 필요한 모든 부가정보 포함
응답 메시지
타입에 따라 내용은 달라 질 수 있지만 대략적인 구조는 다음의 예와 같다.
HTTP 응답메시지 | HTTP 메시지 구조 |
---|---|
HTTP/1.1 200 OK | start-line |
Content-Type:text/html;charset=UTF-8 Content-Length:3423 |
header |
공백 | empty-line |
html 태그~(Content-Type:text/html 이기 때문에) | message body |
- start-line
- HTTP 버전
- HTTP 상태코드 (성공 실패 여부 등)
- 이유 문구 : 사람이 이해할 수 있는 짧은 코드 설명
- Header
- 전송에 필요한 모든 부가정보 포함
- 많은 표준 헤더 존재
- Body
- 실제 전송할 데이터가 저장됨
- HTML, 문서, 이미지, json 등 byte로 표현할 수 있는 모든 데이터 전송 가능
댓글남기기