이 글은 인프런 강의 "모든 개발자를 위한 HTTP 웹 기본 지식" 을 학습하며 정리한 내용입니다.
저처럼 HTTP를 알고 싶거나, 겉핥기로 알고 있는 분들에게 위 강의를 추천합니다.
정리한 내용 중 틀린 내용이 있으면 지적해주시면 수정하겠습니다.
1. HTTP(HyperText Transfer Protocol)
- 모든 것이 HTTP
HTTP 메시지에 모든 것을 전송합니다.
HTML, TEXT, IMAGE, 음성, 영상, 파일, JSON, XML 등 거의 모든 형태의 데이터 전송 가능
서버 간에 데이터를 주고받을 때도 대부분 HTTP 사용
지금은 HTTP 시대 !
- HTTP 역사
- HTTP/0.9 1991년- HTTP/1.0 1996년
- HTTP/1.1 1997년 : 가장 많이 사용, 우리에게 가장 중요한 버전
- HTTP/2 2015년 : 성능 개선- HTTP/3 진행 중 : TCP 대신 UDP 사용, 성능 개선
- 기반 프로토콜
TCP 기반 : HTTP/1.1, HTTP/2
UDP 기반 : HTTP/3
현재 HTTP/1.1을 주로 사용하고, HTTP/2, HTTP/3 도 점점 증가
- HTTP 특징
- 클라이언트 서버 구조
Request, Response 구조
클라이언트는 서버에 요청을 보내고, 응답을 대기
서버가 요청에 대한 결과를 만들어서 응답
- 무상태 프로토콜(Stateless, 스테이스리스)
서버가 클라이언트의 상태를 보존 X
장점 : 서버 확장성이 높음
단점 : 클라이언트가 추가 데이터 전송(요청 시 보내야 할 데이터가 많음)
- Stateful(상태 유지), Stateless(무상태) 차이
Stateful - 클라이언트의 요청의 상태 정보(문맥)를 유지하여 처리, 중간에 다른 점원으로 바뀌면 안 됨
점원이 바뀌면 상태 정보를 다른 점원에게 미리 알려줘야 함(데이터 전파)
항상 같은 서버가 유지되어야 한다.
Stateless - 상태 정보(문맥) 없이도 처리 가능, 중간에 다른 점원으로 바뀌어도 됨
갑자기 클라이언트의 요청이 증가해도 서버를 대거 투입 가능 > 무한한 서버 증설 가능(스케일 아웃)
스케일 아웃 : 수평 확장 유리, 서버 증설에 유리
아무 서버에서나 호출해도 된다.
Stateless 실무 한계
Stateless(무상태) : 로그인이 필요 없는 단순한 서비스 소개 화면 등
Stateful(상태 유지) : 로그인, 로그인한 사용자는 로그인했다는 상태를 서버에 유지해야 함
일반적으로 쿠키와 세션을 사용해서 상태 유지
상태 유지(Stateful)는 최소한만 사용
- 비 연결성(connectionless)
연결성 모델은 클라이언트와 통신한 후 종료되지 않고 지속적으로 연결이 되는 모델
1번 클라이언트와 통신 후, 2번 클라이언트와 통신할 때도 1번 클라이언트와 서버는 연결 중인 상태를 의미
즉, 서버는 연결을 계속 유지하고 서버의 자원은 비효율적으로 소모
비연결성 모델은 클라이언트와 통신한 후 바로 종료되는 형태의 모델
1번 클라이언트와 통신 후 바로 종료됨, 서버는 연결 유지를 하지 않아도 되고 서버의 자원은 최소한으로 사용
HTTP는 기본적으로 비연결성 모델
이다.일반적으로 초 단위에 빠른 속도로 응답이 가능하고 서버의 자원을 매우 효율적으로 사용할 수 있음
비 연결성의 한계와 극복
통신할 때마다 TCP/IP 연결을 새로 맺어야 하므로 3 way handshake 시간이 추가
웹 브라우저로 사이트를 요청하면 HTML 뿐만 아니라 js, css, image 등 수많은 자원이 함께 다운로드
지금은 HTTP 지속 연결(Perstistent Connection)로 문제 해결
HTTP 초기
1. 연결 - 요청 및 HTML 응답 - 연결 종료
(HTML을 보니 JS파일이 필요)
2. 연결 - 요청 및 JS 응답 - 연결 종료
(이미지도 필요하네..?)
3. 연결 - 요청 및 이미지 응답 - 연결 종료
이런 식으로 연결 종료가 낭비되는 현상, 이를 지속 연결로 해결
HTTP 지속 연결1. 연결 - 요청/HTML응답, 요청/JS응답, 요청/이미지 응답 - 종료
이렇게 한번 요청 시 HTML, JS, 이미지 등 필요한 자원을 모두 요청 후 종료하는 방식
Stateless(무상태)를 기억하자
정말 같은 시간에 딱 맞추어 발생하는 대용량 트래픽(선착순 이벤트, 수강신청 등)
서버를 증설(스케일 아웃)하여 대응 가능
초기 화면에 정적 페이지를 둬서 트래픽을 조금이라도 분산시키기도 함
2. HTTP 메시지
- HTTP 메시지 구조
- HTTP 요청/응답 메시지 설명
1. 시작 라인(start-line), 빨간 테두리
HTTP 요청 메시지 | HTTP 응답 메시지 |
GET /search?q=hello?hl=ko HTTP/1.1 | HTTP/1.1 200 OK |
GET : HTTP 메서드, 서버가 수행해야할 동작 지정 | HTTP/1.1 : HTTP 버전 |
/search?q=hello?hl=ko : 요청 대상 : 절대 경로 | 200 : HTTP 상태 코드, 성공/실패를 나타냄 |
HTTP/1.1 : HTTP 버전 | OK : 이유 문구, 사람이 이해할 수 있는 짧은 상태 코드 설명 |
2. HTTP 헤더, 노란 테두리
HTTP 전송에 필요한 모든 부가 정보
메시지 바디의 내용, 크기, 압축, 인증, 요청 클라이언트(브라우저 정보) 등등
표준 헤더가 너무 많고, 필요시 임의의 헤더 추가 가능( helloworld : hihi )
3. empty Line 공백 라인, 초록 테두리
HTTP 헤더가 끝났다고 알리는 개행
헤더는 위에도 언급했듯이 표준 헤더도 많고 필요시 추가할 수 있기 때문에 empty Line을 이용하여 헤더의 끝을 구분
4. HTTP 메시지 바디, 파랑 테두리
실제 전송할 데이터
HTML 문서, 이미지, JSON 등 byte로 표현할 수 있는 모든 데이터 전송 가능
HTTP는 단순하고 확장 가능한 기술이다 !
'WEB' 카테고리의 다른 글
[WEB/HTTP] 06. HTTP 상태코드 (0) | 2021.08.22 |
---|---|
[WEB/HTTP] 05. HTTP 메서드 활용 (0) | 2021.08.16 |
[WEB/HTTP] 04. HTTP 메서드 (0) | 2021.08.15 |
[WEB/HTTP] 02. URI와 웹 브라우저 요청 흐름 (1) | 2021.08.08 |
[WEB/HTTP] 01. 인터넷 네트워크 (0) | 2021.08.07 |
댓글