HTTP 기본

LeeKyoungChang·2021년 12월 30일
0
post-thumbnail

'모든 개발자를 위한 HTTP 웹 기본 지식' 수업을 듣고 정리한 내용입니다.

 

📚 1. HTTP 기본

HTTP(HyperText Transfer Protocol)

  • 초기에는 문서를 전달하기 위해 고안된 프로토콜이었다.
  • 현재는 거의 모든 것을 HTTP 프로토콜에 담아서 보내고 있다.
  • HTML, TEXT, IMAGE, 음성, 영상, 파일, JSON, XML
  • 거의 모든 형태의 데이터 전송 가능
  • 서버간에 데이터를 주고 받을 때도 대부분 HTTP를 사용

 

HTTP 역사

  • HTTP/1.1 1997년 : 가장 많이 사용, 가장 중요한 버전 (RFC2068 -> RFC2616 -> RFC7230 ~ 7235)
  • HTTP/2 2015년 : 성능 개선
  • HTTP/3 진행중 : TCP 대신에 UDP 사용, 성능 개선

 

기반 프로토콜

  • TCP : HTTP/1.1, HTTP/2 (HTTP/1.1과 HTTP/2는 TCP 프로토콜 위에서 동작을 한다.)
  • UDP : HTTP/3 (HTTP/3는 UDP 프로토콜을 기반으로 개발되었다.)
  • 현재 HTTP/1.1 주로 사용 (HTTP/2, HTTP/3도 점점 증가하고 있다.)

 

HTTP 특징

  • 클라이언트 - 서버 구조로 동작한다.
  • 무상태 프로토콜(스테이스리스), 비연결성
  • HTTP 메시지
  • 단순함, 확장 가능

 

 

📚 2. 클라이언트 서버 구조

사진10

과거에는 클라이언트와 서버가 따로 나누어져 있지 않았다.

최근에는 프론트엔드, 백엔드를 나누는 것처럼 클라이언트 - 서버 구조로 나누어서 개발한다.

 

클라이언트 서버 구조

  • Request Response 구조
  • 클라이언트는 서버에 요청을 보내고, 응답을 대기
    서버가 요청에 대한 결과를 만들어서 응답 (클라이언트가 보낸 요청을 분석해서, 응답을 보낸다.)

 

📚 3. 무상태 프로토콜, 스테이스리스(Stateless)

Stateful vs Stateless 차이점
(1) Stateful - 상태를 유지한다.

  • 서버가 클라이언트의 이전 요청을 모두 알고 있다.
  • 서버가 여러 대일 때 항상 같은 서버와 통신이 유지되어야 한다.
  • 한 대의 서버가 죽어버리면 대응이 어렵다.
  • 하나의 서버에서 바뀌는 정보가 있다면 다른 모든 서버에게 미리 알려줘야 한다.
    스크린샷 2021-12-31 오후 2 16 54

(2) Stateless : 상태를 유지하지 않는다.

  • 서버가 클라이언트의 이전 요청을 알지 못한다.
  • 서버가 여러 대라고 가정했을 때, 아무 서버와 통신을 해도 무방하다.
  • 한 대의 서버가 죽더라도 다른 서버로 대응이 쉽게 가능하다.
    스크린샷 2021-12-31 오후 2 17 49
    스크린샷 2021-12-31 오후 2 33 17

 

Stateless 실무 한계
: 모든 것을 무상태로 설계 할 수 있는 경우도 있고 없는 경우도 있다.
(1) 무상태의 예시 : 로그인이 필요 없는 단순한 서비스 소개 화면
(2) 상태 유지 예시 : 로그인한 사용자의 경우 로그인 했다는 상태를 서버에 유지
상태 유지는 최소한으로 사용해야 한다.
무상태 유지를 최대한으로 사용해야 한다.
무상태는 데이터를 너무 많이 사용한다는 단점이 있다.

 

📚 4. 비연결성(connectionless)

  • 소켓 통신은 기본적으로 연결을 유지해서 사용한다.
  • 연결을 항상 유지하고 있기 때문에 빠른 데이터 통신이 가능하다.
  • 클라이언트가 늘어날 수록 서버의 과부하가 커진다. (데이터를 주고 받지 않아도 연결은 계속 유지되어야 하기 때문이다.)

 

HTTP : 기본이 연결을 유지하지 않는 모델

  • 일반적으로 초 단위 이하의 빠른 속도로 응답

 

비 연결성 한계와 극복

  • TCP/IP 연결을 새로 맺어야 한다. (3 way handshake 시간 추가된다.)
  • 웹 브라우저로 사이트를 요청하면 HTML 뿐만 아니라 이미지, js파일, css파일 등 엄청 많은 자원을 다운로드 받아야 한다. (이때, 연결을 새로 맺어야 한다.)
  • 지금은, HTTP 지속 연결을 통해 문제를 해결하였다. (지속 연결 : 한 번 연결을 하고 그 연결을 유지한다.)

 

스크린샷 2021-12-31 오후 5 26 11 스크린샷 2021-12-31 오후 5 26 18

 

스테이스리스를 기억하자

  • 서버 개발자들이 어려워하는 업무
  • 정말 같은 시간에 딱 맞추어 발생하는 대용량 트래픽
  • ex) 선착순 이벤트, 명절 KTX 예약, 학과 수업 등록
  • ex) 저녁 6:00 선착순 1000명 치킨 할인 이벤트 -> 수만명 동시 요청

 

📚 5. HTTP 메시지

이전 내용 복습

  • HTTP 메시지에 모든 것을 전송
  • HTML, TEXT, IMAGE, 음성, 영상, 파일
  • JSON, XML, 거의 모든 형태의 데이터 전송 가능
  • 서버간에 데이터를 주고 받을 때도 대부분 HTTP 사용

 

스크린샷 2021-12-31 오후 5 27 24

 

시작 라인
스크린샷 2021-12-31 오후 5 30 35
요청 대상 : /search?q=hello&hl=ko

(1) 요청 메세지 - HTTP 메서드 : GET : 리소스 조회, POST : 요청 내역 처리, PUT, DELETE
(2) 요청대상 : 절대경로 = "/"로 시작하는 경로
(3) HTTP/1.1 : HTTP 버전

스크린샷 2021-12-31 오후 5 44 25 (4) HTTP 상태 코드 : 요청 성공, 실패를 나타냄
  • 200 : 성공
  • 400 : 클라이언트 요청 오류
  • 500 : 서버 내부 오류
  • 이유 문구 : 사람이 이해할 수 있는 짧은 상태 코드 설명 글

 

HTTP 헤더
스크린샷 2021-12-31 오후 5 46 18
field-name(필드명): field-value(필드 값)

  • field-name : 대소문자 구분 하지 않는다.
  • field-value : 대소문자 구분

ex) HOST: www.google.com

  • HTTP 전송에 필요한 모든 부가정보가 다들어가 있다.

 

HTTP 메시지 바디
스크린샷 2021-12-31 오후 5 53 03

  • 실제 전송할 데이터가 들어가 있다.
  • HTML, JSON, XML, 이미지, 파일 등등 byte 로 표현할 수 있는 모든 데이터 전송 가능하다.

 

🔔 HTTP 정리

  • HTTP 메세지에 모든 것을 전송
  • HTTP 역사 HTTP/1.1을 기준으로 학습하면된다.
  • 클라이언트 서버 구조
  • 무상태 프로토콜(스테이스리스)
  • HTTP 메시지
  • 단숨함, 확장 가능
  • 지금은 HTTP 시대

 

profile
"야, (오류 만났어?) 너두 (해결) 할 수 있어"

0개의 댓글