반응형
HTTP에 대하여
HTTP 메시지는 웹 통신 환경의 모든 것을 전송한다.
- HTML, TEXT와 같은 문자열
- IMAGE, 음성, 영상, 파일과 같은 바이너리 데이터
- JSON, XML과 같은 API 통신을 통해 전송하는 데이터
- 등 다양한 데이터
기반 프로토콜
- TCP: HTTP/1.1, HTTP/2
- 현재는 HTTP/1.1을 주로 사용한다.
- UDP: HTTP/3
HTTP의 특징
클라이언트 서버 구조
- HTTP는 Request(클라이언트)와 Response(서버) 구조로 이루어져있다.
- 클라이언트는 서버에 요청을 보내고, 응답을 대기하고
- 서버는 클라이언트의 요청에 대한 결과를 응답한다.
무상태 프로토콜(Stateless)과 비연결성(Connectionless)
무상태 프로토콜(Stateless)
- 서버가 클라이언트의
상태를 보존하지 않는다
.- A라는 요청을 하고, 이후 B라는 요청을 하였을 때 서버는 A요청에 대한 정보는 고려하지 않는다.
서버 확장성이 높아진다
는 장점이 있지만클라이언트가 데이터를 추가적으로 더 전송해야 한다
는 단점이 있다.- B요청에 A요청과 관련된 정보가 필요하다면,
B요청에 A요청에 대한 정보를 함께 포함
해 전송해야 한다. - 하지만 요청이 너무 많아 서버를 증설하더라도 사용자의 요청은 달라지지 않기 때문에
서버 확장성
이 높아진다.
- B요청에 A요청과 관련된 정보가 필요하다면,
- 모든 것을
Stateless
하게 설계할수는 없다.- 로그인을 예로 들어 한번 로그인한 사용자는 다시 로그인 할 필요가 없어야 한다.
- 때문에
Stateless
한 설계를 위해브라우저 쿠키
,서버 세션
등을 사용해서 상태를 유지한다.
비연결성(Connectionless)
- 연결성을 유지하는 모델이라면?
- 한번
TCP/IP
통신을 하고, 응답을 마친 상태이더라도 서버와 클라이언트는 연결되어 있기 때문에 불필요한 서버 자원을 사용해 유지해야 한다.
- 한번
- HTTP는 기본이 연결을 유지하지 않는 모델(비연결성)이다.
- 연결을 유지하지 않기 때문에 서버 자원을 효율적으로 사용할 수 있다.
- 매번 요청마다 TCP/IP 연결을 새로 맺어야 한다.
3 way handshake
시간이 추가된다.
- 웹 브라우저로 사이트를 요청하면 HTML, Javascript, css, 등의 많은 자원을 함께 다운로드한다.
- 하지만 HTTP
지속 연결(Persistent Connections)
로 문제를 해결했다.지속 연결
이란?
HTML, Javascript, css 등 여러 정보를 요청해야 할 때, 한번의 연결에 받아야 하는 모든 응답을 받고 연결을 종료하는 것.
무상태 프로토콜과 비연결성을 이용하면?
동시성 문제
의 해결 방법중에 하나가 된다.- 정말 많은 요청이 하나의 서버에 집중된다면? 하나의 서버에서 응답할 수 있는 한계는 있다.
- 때문에 무상태 프로토콜을 이용하면 응답하 서버를 늘리더라도 하나의 요청에 필요한 정보가 모두 담겨있기 때문에 응답이 가능하다.
- 예) A서버에서 응답, 다음 요청은 B서버에서 응답이 가능
HTTP 메시지
- HTTP 메시지의 구조
- start-line 시작 라인
- header 헤더
- empty line 공백 라인 (CRLF)
- message body
start-line 시작 라인
- 요청
- HTTP 메서드
- GET, POST, PUT, PATCH, DELETE
- 요청 대상
- /search?a=aaa&b=bbb
- HTTP Version
- HTTP/1.1, HTTP/2, HTTP/3
- 응답
- HTTP 메서드
- GET, POST, PUT, PATCH, DELETE
- HTTP 상태 코드
- 200, 400, 500
- 이유 문구
HTTP 헤더
- HTTP 전송에 필요한 모든 부가정보를 담는다.
- 메시지 바디의 내용, 메시지 바디의 크기, 압축, 인증, 요청 클라이언트 정보, 서버 애플리케이션 정보, 캐시 관련 정보 등
- 필요시에 임의의 헤더를 추가할 수 있다.
HTTP 메시지 바디
- 실제 전송할 데이터를 담는다.
- HTML 문서, 이미지, 영상, JSON 등등 byte로 표현할 수 있는 모든 데이터를 전송 가능하다.
반응형
'Devops' 카테고리의 다른 글
[HTTP] HTTP 헤더 (1) (0) | 2022.05.09 |
---|---|
[HTTP] http status 상태코드의 종류 (0) | 2022.05.08 |
[HTTP] HTTP 메서드의 종류 (0) | 2022.05.07 |
[Raspberry Pi]라즈베리파이4 Ubuntu Server 시작하기 (0) | 2022.04.19 |
SpringBoot Jenkins 배포 자동화 2 (0) | 2022.04.02 |
SpringBoot Jenkins 배포 자동화 1 (0) | 2022.03.23 |