이 글은 김영한님 ‘모든 개발자를 위한 HTTP 웹 기본 지식’ 강의를 듣고 작성합니다.
[3. http] 강의에 해당된 내용을 정리하며 회고록을 작성합니다.
https://www.inflearn.com/course/http-웹-네트워크
HTTP란 무엇일까?
HyperText Transfer Protocol의 약자로, 하이퍼텍스트 링크를 사용하여 웹 페이지를 로드하는데 사용된다. HTTP를 통한 일반적인 흐름에는 클라이언트 시스템에서 서버에 요청한 다음 서버에서 응답 메시지를 보내는 작업이 포함된다.
HTTP 메시지에 모든 것을 전송한다.
HTTP 특징
클라이언트와 서버를 개념적으로 분리. → 비즈니스 로직이랑 데이터같은 것들은 다 서버에, 클라이언트는 UI와 사용성에 집중
클라이언트와 서버를 각각 독립적으로 진화할 수 있음 ⇒ 역할 분리
클라이언트는 복잡한 데이터를 다룰 필요가 없고 단순하게 UI를 어떻게 그릴지에 집중할 수 있게 된다.
우선, 무상태 프로토콜(Stateless)을 지향한다.
stateless는 클라이언트가 다시 말한다.(상태를 보존하고 있다)
Stateful, Stateless 차이
Stateless 실무 한계
TCP/IP는 보통 연결을 유지한다.
클라이언트1과 서버 연결을 한후, 클라이언트2와 서버와 연결을 한후, 이젠 클라이언트3과 서버와 연결을 하는 중이다. 클라이언트3과 서버가 연결되어 있는 동안에도 클라이언트1과 클라이언트2는 서버와 계속 연결 유지 중이다.
클라이언트 1과 2가 놀고 있어도 계속 서버가 연결을 유지해야하는 단점이 있다.
비 연결성
비연결성 한계와 극복
지속 연결(Persistent Connections)
로 문제 해결이와 같이 연결을 할 때마다 이 전에 받았던 응답을 다시 받고, 수 많은 자원이 함께 다운로드 된다. 이를 아래와 같은 지속연결로 요청을 보내고 응답을 기다리는 시간을 정해 불필요한 자원 사용을 줄인다.
HTTP 메시지에 모든 것을 전송한다!
HTTP 메시지 구조는 시작라인, 헤더, 공백라인, 메시지 바디로 이루어져 있다.
요청 메시지
start-line = request-line / status-line
request-line = method SP(공백) request-target SP HTTP-version CRLF(엔터)
HTTP 메서드 (GET: 조회)
요청 대상(/search?q=hello&hl=ko)
HTTP Version
http메서드
요청 대상
응답 메시지
start-line = request-line / status-line
status-line = HTTP-version SP status-code SP reason-phrase CRLF
HTTP 버전
HTTP 상태 코드: 요청 성공, 실패를 나타냄
- 200: 성공
- 400: 클라이언트 요청 오류
이유 문구:사람이 이해 할 수 있는 짧은 상태 코드 설명글
💡 정리 💡
HTTP 메시지에 모든 것을 전송한다. 시작라인, 헤더, http 메시지..
HTTP는 클라이언트 서버 구조로 클라이언트는 서버에 요청을 보내고 응답을 대기하고, 서버는 요청에 대한 결과를 만들어서 응답한다. 이런 구조로 클라이언트와 서버를 개념적으로 분리하여 각각 독립적으로 진화할 수 있다.
무상태 프로토콜, 서버가 클라이언트의 상태를 보존하지 않아 응답 서버를 쉽게 바꿀 수 있다.