본문 바로가기
네트워크

HTTP 웹 기본 지식 - HTTP 기본

by SICDev 2021. 8. 27.
반응형

HTTP❓❓

HTTP는 HyperText Transfer Protocol 이다. HTTP는 초기에 문서를 전달하기 위해 고안된 프로토콜이었다.

하지만 요즘엔 거의 모든 것을 HTTP프로토콜에 담아서 보내고있다.

( HTML, TEXT, IMAGE, FILE, JSON, XML 등등 )

 

HTTP/1.1 버전이 가장 많이 사용되고, 가장 중요한 버전이다. 기능의 대부분은 1.1버전에서 만들어졌고,

이후에 나오는 HTTP/2, HTTP/3버전은 거의 성능개선에 초점이 맞춰져있다.

 

TCP : HTTP/1.1, HTTP/2

(HTTP/1.1 과 HTTP/2 는 TCP프로토콜 위에서 동작을 한다.

UDP : HTTP/3

(HTTP/3는 UDP프로토콜을 기반으로 개발되었다.)

 

HTTP의 4가지 특징

  1. 클라이언트 - 서버 구조로 동작한다.
  2. 무상태 프로토콜, 비연결성
  3. HTTP 메세지를 통해서 통신한다.
  4. 단순하고, 확장 가능하다.

클라이언트 - 서버 구조로 동작한다❓

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

하지만 요즘에는 프론트엔트, 백엔드로 나누는것처럼 클라이언트 - 서버 구조로 나누어서 개발한다.

  • 클라이언트는 서버에 요청을 보내고, 서버에서 응답을 주기만을 기다린다.
  • 서버는 클라이언트가 보낸 요청을 분석해서, 응답을 보낸다.

무상태 프로토콜❓

이전에 HTTP Session의 간단한 동작 방식을 블로그에 썼던게 있지만, 간단하게 또 정리해보자👏

 

Stateful vs Stateless 

Stateful - 상태를 유지한다.

- 서버가 클라이언트의 이전 요청을 모두 알고 있다.

- 서버가 여러대라고 가정(스케일아웃)을 했을때 항상 같은 서버와 통신이 유지되어야 한다.

- 한 대의 서버가 죽어버리면 대응이 어렵다.

 

Stateless - 상태를 유지하지 않는다.

- 서버가 클라이언트의 이전 요청을 전혀 알지 못한다.

- 서버가 여러대라고 가정했을때, 아무 서버와 통신을 해도 무방하다.

( 클라이언트의 요청에 모든 정보가 다 담겨져 있다.(오버헤드 발생할 수 있음) )

- 한 대의 서버가 죽더라도 다른 서버로 대응이 쉽게 가능하다.


비 연결성(connectionless)❓

소켓 통신은 기본적으로 연결을 유지해서 사용한다.

- 연결을 항상 유지하고 있기 때문에 빠른 데이터 통신이 가능하다.

- 클라이언트가 늘어날 수록 서버의 과부하가 커진다. ( 데이터를 주고 받지 않아도 연결은 계속 유지되어야 하기 때문이다. )

 

HTTP 통신은 클라이언트와 서버간의 데이터 통신이 끝나면 연결을 끊어버린다.

- 요청에 있을때만 서버와 연결을 맺고, 끊어 버리기 때문에 서버의 과부하가 줄어든다.

- 서버의 자원을 효율적으로 사용 가능하다.

- TCP/IP 연결을 계속해서 새로 맺어야한다 ( 3-way handshake 시간이 추가 된다. )

- 요청을하면 HTML 뿐만아니라 이미지, js파일, css파일 등 엄청 많은 자원을 다운로드 받아야하는데, 이때마다 연결을 새로 맺어야 한다.

- HTTP는 지속 연결(Persistent Connections)로 위의 문제를 해결했다.

( 지속 연결이란? 한 번 연결을 하고 그 연결을 유지한다🤔

HTML, js, 이미지 등 자원들의 요청과 응답을 받고 연결을 종료시킨다.

내부 메커니즘에 따라 다르긴하지만 HTML페이지 하나를 다 받을때까지는 유지한다. )


HTTP 메시지❓

HTTP의 요청메시지와 응답메시지의 기본 구조이다.

시작 라인

 - 요청 메시지에는 HTTP 메서드(GET, POST, PUT, DELETE 등)와 요청대상(path), HTTP 버전이 들어가있다.

 - 응답 메시지에는 HTTP 버전과 HTTP 상태 코드(200, 404, 501 등등), 코드 설명 글이 들어가져있다.

 

헤더

 - field-name(필드명): field-value(필드 값) 을 적는다.EX) HOST: www.naver.com

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

 

바디

 - 실제 전송할 데이터가 들어가져있다.

 - HTML, JSON, XML, 이미지, 파일 등등 거읨 모든 데이터를 넣을수 있다.

 

 

 

 

출처

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 설계 방법을 학습합니다., 웹 기술을 사용하는 개발자라면 누구나 OK!꼭 필요한 HTTP의 핵심을 알려드립니다. 📣 확인해주세요!본 강의는 자바 스

www.inflearn.com

 

반응형