Developing Myself Everyday
article thumbnail

HTTP(HyperText Transfer Protocol) 이란?


 기본적으로 HTTP는 애플리케이션 계층에서 인터넷에서 웹 페이지를 전송하기 위해 사용되는 프로토콜이다. HTTP는 클라이언트와 서버 간에 데이터를 주고받을 수 있는 규칙을 정의하고 있다. 클라이언트는 웹 브라우저를 통해 서버에 HTTP 요청을 보내면, 서버는 이 요청에 대한 응답을 다시 클라이언트에게 전송한다. 이 과정에서 요청과 응답은 HTTP 메시지 형태로 전송된다.

 HTTP는 일반적으로 TCP/IP 프로토콜을 사용한다. 클라이언트가 요청을 보내면 서버는 이에 대한 응답을 전송하고 연결을 종료한다. 이러한 방식을 '요청 / 응답' 모델이라고 한다.

 

☞ 상태가 존재하지 않는 Stateless 프로토콜

 HTTP의 요청 및 응답방식은 인터넷이라는 환경하에서 많은 클라이언트에게 서비스할 수 있도록 다음과 같이 설계되어 있다.

HTTP 요청 / 응답 과정

 위 그림을 보면 서버는 클라이언트의 요청에 응답을 하고 나서, 연결을 바로 끊음을 알 수 있다. 즉, 서버는 클라이언트의 상태정보를 유지하지 않는다. 앞서 요청했던 클라이언트가 다시 요청을 해 와도 이 클라이언트가 조금 전에 한 차례 한 요청을 했던 클라이언트임을 인식하지 못한다. 다만 새로운 요청에 대해서 동일한 형태로 응답만 해 줄 뿐이다. 때문에 HTTP를 가리켜 상태가 존재하지 않는, Stateless 프로토콜이라 한다.

 

 

 

1️⃣ HTTP / 1.0

HTTP / 1.0 버전은 기본적으로 한 연결당 하나의 요청을 처리하도록 설계되었다. 서버로부터 파일을 가져올 때마다 TCP 3-way handshake를 해야 했기 때문에 당연하게도 이는 RTT가 증가하는 단점을 야기하였다.

 


❓RTT (Round Trip Time)

요청이 네트워크를 통해 전달되어 응답이 되돌아오는 데까지 걸리는 총 시간

 

 

 

2️⃣ HTTP / 1.1

그래서 이 단점을 해결하기 위해 나온것이 바로 HTTP / 1.1 버전이다. 서버로부터 파일을 가져올 때마다 TCP 3-way handshake를 하는것이 아니라 한번 연결을 한 후에 keep-alive 라는 옵션을 추가해 여러개의 파일을 송수신 할 수 있도록 하였다. 다만 이 방식은 HOL Blocking을 발생시키는 문제가 있었다.

 


HOL Blocking (Head Of Line Blocking)

HTTP / 1.1의 요청 - 응답은 항상 순서를 유지하고 동기적으로 수행된다. 이는 만약 A의 요청이 처리되는 시간이 길어진다면 B나 C의 요청은 처리될 수 없다는 것을 의미한다. 무조건 A가 처리될 때까지 기다려야 한다. 이렇게 뒤에 있는 요청들의 작업이 지연되어 전체적인 작업의 속도 또한 지연되는 것을 HOL Blocking이라고 한다.

 

 

 

3️⃣ HTTP / 2

HTTP / 2는 HOP Blocking을 멀티플렉싱을 이용해 해결한 방식이다. 요청은 하나의 연결에서 병렬적으로 보내질 수 있다. 각 요청은 우선순위를 가지고 있기 때문에 세세한 제어 또한 가능하다.

 

 

 하지만 HTTP는 보안성이 떨어진다는 가장 큰 단점이 존재한다. 그래서 개발된게 HTTPS 프로토콜이다.

 

HTTPS(HyperText Transfer Protocol Secure)


 HTTPS는 HTTP 프로토콜의 보안 버전으로, SSL 또는 TLS 프로토콜을 사용하여 데이터를 암호화하는 방식이다. HTTPS는 웹 사이트에서 민감한 정보를 주고받을 때, 예를 들어 로그인 정보, 결제 정보 등을 처리할 때 필수적으로 사용되어야 한다.

 

 다음은 HTTPS 통신의 간략한 흐름이다.

  1. 클라이언트가 HTTPS 프로토콜을 사용하여 서버에 접속한다. 이때 클라이언트는 브라우저를 통해 HTTPS로 접속한 것을 알리기 위해 'HTTPS://'로 시작하는 URL을 입력한다.
  2. 서버는 클라이언트의 요청에 응답하고, 클라이언트와 SSL/TLS 암호화 프로토콜을 사용하여 안전한 연결을 수립한다. 이때 SSL/TLS 프로토콜은 데이터를 암호화하고, 인증서를 통해 서버의 신원을 확인한다.
  3. 클라이언트와 서버는 SSL/TLS 프로토콜을 사용하여 데이터를 주고받는다. 이때 데이터는 암호화되어 전송되기 때문에 중간에 누군가가 데이터를 가로채어 내용을 엿볼 수 없다.
  4. 클라이언트가 서버로부터 받은 데이터를 브라우저에 표시한다. 이때 브라우저는 데이터를 복호화하여 사용자에게 제공한다.
  5. 통신이 끝나면, 클라이언트와 서버는 SSL/TLS 연결을 종료한다.

 

 

'개발자의 기본 소양 > NETWORK' 카테고리의 다른 글

HTTP와 TCP/IP 그리고 소켓과 웹소켓  (0) 2023.11.06
TCP / IP 계층에서 데이터 전달에 따른 프로토콜 동작  (0) 2023.04.06
FTP & FTPS  (0) 2023.03.31
SSH & SCP & SFTP  (0) 2023.03.31
SSL & TLS  (0) 2023.03.31
profile

Developing Myself Everyday

@배준형

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!