인프런 강의 中
김영한 강사님의 '모든 개발자를 위한 HTTP 웹 기본 지식' 내용을 정리했습니다.
안녕하십니까, 웅쓰입니다. 오늘은 지난 시간에 이어서 HTTP 특징인 비 연결성과 HTTP 메시지 구조에 대해서 김영한 강사님의 강의를 통해 정리해보겠습니다. JYP Entertainment 사장님인 박진영님께서 이런 말을 했죠. '지겨운 거 이겨내는 사람이 성공하는거야." 성공을 위해서 블로그 포스팅을 하는 건 아니지만 한 걸음이라도 성장하기 위해서 저는 이 지겨운 활동을 열심히 이어나가 보겠습니다. 화이팅!!
목차
- HTTP 개념
- 클라이언트 서버 구조
- Stateful, Stateless
- 비 연결성(connectionless)
- HTTP 메시지 구조
1. 비 연결성(connectionless)
비 연결성은 클라이언트와 서버가 연결을 맺은 후 요청과 응답이 끝나면 연결을 끊어버리는 성질이다. 기본적으로 HTTP는 연결을 유지하지 않는 프로토콜이다.
위 이미지와 같이 비 연결성은 TCP/IP 연결 => 클라이언트 요청 => 서버 응답 => TCP/IP 연결 종료되는 순서를 가진다.
그럼 왜 비 연결성을 사용하는가?
연결성을 사용하게 되면 서버를 이용하는 클라이언트가 많아지면 많아질수록 클라이언트 연결을 유지하는 리소스가 많아지기 때문에 리소스 낭비가 심하기 때문이다. 따라서 리소스를 효율적으로 사용하기 위해 비 연결성을 사용한다.
※비 연결성을 사용해도 다수의 클라이언트가 동시에 서버 접속을 하게 되면 리소스 자원이 낭비되는건 똑같지 않은가? 라고 생각할 수 있지만 1시간 동안 수천명이 서비스를 사용해도 실제 서버에서 동시에 처리하는 요청은 수십개 이하로 매우 작기 때문에 큰 문제가 되지 않는다.(다만 타임 이벤트 같은 경우에는 동시 요청이 많을 수 있음)
비 연결성의 한계는?
- 이전에 서버와 TCP/IP 연결을 통해 데이터를 주고 받았던 클라이언트도 새로운 요청을 서버에 하게되면 TCP/IP 연결을 새로 맺어야 한다.(3 way handshake 시간 추가)
- 웹 브라우저로 사이트를 요청하면 HTML, CSS, JS 등 수많은 리소스들이 함께 다운로드 되는데 하나 다운로드 될 때마다다 TCP/IP 연결을 새로 하게되면 시간이 너무 오래 걸림(HTTP 지속 연결로 극복)
지속 연결이 없었던 HTTP
HTTP 지속 연결(Persistant Connections)
서버가 클라이언트의 요청에 응답한 이후 TCP/IP 연결을 유지했다가 일정 시간동안 사용하지 않으면 TCP/IP 연결을 해제하는 방법이다. 다수의 객체를 한꺼번에 요청하고 응답하는 파이프라이닝을 적용할 수 있다. 그래서 웹 페이지에 필요한 수많은 리소스들을 한 번의 TCP/IP 연결로 다운로드 받을 수 있다.
위 이미지처럼 HTTP 지속 연결을 사용했을 때 불필요한 시간을 줄일 수 있다.
결론
HTTP는 기본적으로 비 연결성이지만 일정 시간 동안은 연결이 가능하다.(마지막 데이터를 전송하고 10초 동안 연결 유지)
2. HTTP 메시지 구조
HTTP는 위 메시지 구조를 베이스로 request(요청) / response(응답) 구조로 세분화된다. 두 구조에서 시작 라인 빼고는 형태가 동일하기 때문에 묶어서 정리해보겠다.
HTTP 요청 메시지 구조
HTTP 응답 메시지 구조
start-line(request 구조)
HTTP 요청 메시지에서 시작 라인은 HTTP 메서드, 요청 대상, HTTP 버전으로 구성된다.
표준 샘플: method SP(공백) request-tartget SP HTTP-version CRLF(엔터)
EX)GET /search?q=hello&hl=ko HTTP/1.1
HTTP 메서드
서버에서 수행해야 할 동작을 지정해주는 역할을 하며 종류는 GET, POST, PUT, DELETE 등을 해준다. 예를 들어 GET 요청이면 리소스를 조회하라는 동작을 지정해준다.
요청대상
absolute-path[?query] (절대경로[?쿼리])의 구조를 가지며 쉽게 생각해 경로와 요청 데이터를 위한 쿼리를 지정해주는 역할을 한다.
HTTP 버전
HTTP 버전 명시(버전에 따라 메시지 구조가 다를 수 있음)
start-line(response구조)
HTTP 응답 메시지에서 시작 라인(상태 라인)은 HTTP 버전, HTTP 상태 코드, 이유문구로 구성된다.
표준 샘플: HTTP-version SP status-code SP reason-phrase CRLF
EX)HTTP/1.1 200 OK
HTTP 버전
HTTP 버전 명시(버전에 따라 메시지 구조가 다를 수 있음)
HTTP 상태 코드
요청 성공, 실패를 나타낸다.
- 200: 성공
- 400: 클라이언트 오청 오류
- 500: 서버 내부 오류
이유 문구
사람이 이해할 수 있는 짧은 상태 코드를 설명하는 글
headers
요청 및 응답에 대한 추가적인 정보(ex, 메시지 body의 총 길이, body 내용, 요청 클라이언트 정보 등)를 제공하는 부분이다. 요청과 응답 헤더의 형태는 동일하지만 요청 헤더에서만 사용되는 값들이 있다.
표준 샘플: header-field-name ":" OWS field-value OWS (OWS: 띄어쓰기 허용)
EX)Content-Type: text/html;charset=UTF-8
body
실제 전송할 데이터가 담기는 곳이다. HTML 문서, 이미지, 영상, JSON 등 byte로 표현할 수 있는 모든 데이터가 전송이 가능하다.
김영한 강사님 강의!!
https://www.inflearn.com/course/http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC
모든 개발자를 위한 HTTP 웹 기본 지식 | 김영한 - 인프런
김영한 | 실무에 꼭 필요한 HTTP 핵심 기능과 올바른 HTTP API 설계 방법을 학습합니다., [사진] 📣 확인해주세요!본 강의는 자바 스프링 완전 정복 시리즈의 세 번째 강의입니다. 우아한형제들 최연
www.inflearn.com
'HTTP 웹 기본 지식' 카테고리의 다른 글
HTTP 메서드(PUT, PATCH) & 메서드 속성 (0) | 2024.05.19 |
---|---|
HTTP 메서드(GET,POST) (1) | 2024.05.17 |
HTTP(클라이언트 서버 & Stateless) (0) | 2024.05.13 |
웹 브라우저(URI, URL, URN, 흐름) (0) | 2024.04.23 |
인터넷 네트워크(PORT, DNS) (3) | 2024.04.03 |