본문 바로가기
Web/공부

[Web/CS] HTTP 통신에 대한 모든 것

by 소똥 2023. 8. 28.

 

HTTP (Hyper Text Transport Protocol) 란, Application Layer 에서 사용되는 HTML과 같은 hypermedia 문서를 전송하는 프로토콜 이다.

 

위와 같이 정의되어 있지만, 쉽게 말하면 Web사이트에서 서버와 클라이언트(브라우저) 간에 정보를 주고받는 기반이 되는 프로토콜 이다. 


HTTP 특징

1) Client - Server 구조

클라이언트가 서버에 요청을 하면 서버가 응답을 하는 구조이다.

 


2) Stateless 

HTTP의 자체적인 특징은 stateless하여 클라이언트의 정보를 저장할 수 없다. 이러한 특정은 서버를 확장하기에 용이하지만, 매번 클라이언트가 데이터를 전송해야 한다는 단점이 있다.

이러한 특징을 보완하는 것이 쿠키세션 이다.


3) TCP/IP 모델

OSI 모델은 네트워크 통신과정을 개념적으로 설명하는 용도로 주로 사용되고, 실제 통신을 위해 사용하는 모델은 TCP/IP 모델이다. 그 이유는 TCP/IP 모델이 실제 네트워크 동작에서 프로토콜을 빠르게 구현하는 것을 중시한 모델이기 때문이다. 

 

따라서 HTTP는 TCP/IP 모델을 사용하고 있다.

 

HTTP는 Applicaiotn Layer의 프로토콜이며, Transport Layer와 Internet Layer를 거쳐 실제 통신을 주고받게 된다.  그 아래단을 한번 살펴보자.

 

* IP 프로토콜 (Internet Layer)

서버/클라이언트는 IP주소에 패킷 단위로 데이터를 던진다. 그러면 아래 노드들을 거쳐 목적지에 데이터를 전달한다.
하지만 이 방식을 사용하면, 비연결성(서비스 불능 상태여도 패킷 전송), 비신뢰성(패킷 소실문제) 의 문제가 발생한다.

* TCP 프로토콜 (Transport Layer)

위에서 말하는 TCP 프로토콜은 TCP / UDP 두개를 포괄하는 의미이다. 이 Layer에서 중요하게 등장하는 개념은 PORT이다. PORT를 통해 정확한 목적지를 구분하여 어떤 어플리케이션에서 보낸 데이터인지 구분 할 수 있다. 

TCP 의 경우, 3-Way handshaking 과정을 통해 SYN, ACK를 주고받음으로써 서로 준비가 되어있는지 확인을 하고 통신을 시작한다. UDP의 경우, 신호절차 과정을 주고받지 않고 통신을 시작한다

따라서 transport protocol 중에서도 TCP 연결을 주로 사용한다. 하지만 HTTP 3.0부터는 UDP 방식을 사용한다고 한다.


HTTP 역사

1) HTTP/1.0

한 연결당 하나의 요청을 처리하도록 설계

 

단점) RTT 증가

대책) 코드 압축, 이미지 인코딩 등 데이터를 줄이는 작업을 많이 수행

 

 

2) HTTP/1.1

keep-alive 옵션을 두어 여러개의 파일을 송수신 할 수 있도록 개선

 

단점) 리소스가 많을때 대기가 길어지며 이는 성능 저하로 이어짐 -> HOL Blocking (Head Of Line Blocking)

 

 

3) HTTP/2

헤더 압축, 요청의 우선순위 처리, 멀티플렉싱을 지원

 

멀티플렉싱 이란?

여거개의 스트림을 사용하여 송수신하는 것 -> 특정 스트림의 패킷이 손실되어도 해당 스트림에만 영향을 미치고 나머지는 멀쩡 동작

 

 

4) HTTP/3

UDP로 통신 연결하는 흐름


HTTP 구조

 


출처)
https://better-together.tistory.com/65?category=887984  
https://www.ibm.com/docs/en/cics-ts/5.3?topic=concepts-tcpip-protocols  
https://developer.mozilla.org/en-US/docs/Web/HTTP 
https://velog.io/@wngud4950/HTTP%EC%99%80-HTTP-Header 

 

'Web > 공부' 카테고리의 다른 글

[Spring] MVC 패턴과 Service, Domain, Repository  (1) 2023.09.06
[Java/Spring] JSON 파싱하기  (0) 2023.09.01