본문으로 바로가기

[HTTP] HTTP란? | HTTP 특징

category Server/HTTP 2022. 2. 4. 00:48
반응형

 

 

 

● HTTP 란?

 

 

HTTP는 HyperText Transfer Protocol 약자로

해석하면 문서를 전송하기 위한 약속으로 해석된다

 

하이퍼텍스트를 빠르게 교환하기 위한 프로토콜의 일종으로 

즉, HTTP는 서버와 클라이언트의 사이에서 어떻게 메시지를 교환할지를 정해놓은 규칙이다.

 

 

 

HTML, TEXT, IMAGE, 음성, 영상, 파일, JSON, XML (API)

거의 모든 형태의 데이터 전송이 가능하다.

 

심지어 서버간에 데이터를 주고 받을 때도 대부분 HTTP를 사용한다.

 

 

 

 

 

● HTTP 역사

 

 

 

HTTP 역사는 이렇다.

 

 

• HTTP/0.9 1991년: GET 메서드만 지원, HTTP 헤더X

• HTTP/1.0 1996년: 메서드, 헤더 추가

• HTTP/1.1 1997년: 가장 많이 사용, 우리에게 가장 중요한 버전

• HTTP/2 2015년: 성능 개선

• HTTP/3 진행중: TCP 대신에 UDP 사용, 성능 개선

 

 

현재에는 HTTP/1.1 버전이 가장 많이 사용되고 있다.

 

 

 

○ 기반 프로토콜

 

HTTP/1.1, HTTP/2 버전에서는 TCP 프로토콜

HTTP/3 버전에서는 UDP 프로토콜을 사용하여 성능을 개선하였다.

 

현재는 HTTP/1.1을 주로 사용하지만, HTTP/2와 HTTP/3 도 점점 증가하는 추세이다.

 

 

 

 

 


● HTTP 특징

 

 

 

HTTP 특징은 크게 아래와 같이 분류할 수 있다.

 

 

 

• 클라이언트 서버 구조

• 무상태 프로토콜(스테이스리스), 비연결성

• HTTP 메시지

• 단순함, 확장 가능

 

 

 

 

 

 

 

1. 클라이언트 서버 구조

 

 

 

클라이언트 서버 구조는 Request Response 구조로 이루어져있다.

 

클라이언트는 서버에 요청을 보내고, 응답을 대기한다.(Request)

서버가 요청에 대한 결과를 만들어서 응답한다(Response)

 

 

클라이언트와 서버의 역할을 분리하면서 

클라이언트는 화면에 관련된 것들만 신경을 쓰면되고,

서버는 비즈니스 로직, 데이터 처리와 같은 백엔드에만 신경을 쓰면된다.

 

 

 

 

 

 

 

 

2. 무상태 프로토콜(Stateless)

 

 

HTTP 특징에는 무상태 프로토콜(Stateless)이 있다.

 

무상태 프로토콜을 단순하게 설명하자면 서버가 클라이언트의 상태를 보존하지 않는다는 것이다.

 

 


예를들어 쇼핑몰의 장바구니를 생각해보자.

 

사용자(클라이언트)가 맘에 드는 물건을 장바구니에 담고있다.

이제 구매하고자 결제 페이지로 이동한 후, 장바구니에 있는 물건들을 모두 결제하고자 한다.

 

여기서 무상태(Stateless)란 사용자의 장바구니에 있는 물건들을 한번에 서버로 넘겨주는 것과 같다.

 

상태유지(Stateful)을 예로 들면 사용자가 장바구니에 물건을 하나씩 담을때마다

서버가 그것을 기억하고 있어야 한다는 것이다.

 

여기서 무상태와 상태유지의 차이점은 중간에 서버가 바꼈을 때이다.

 

무상태는 사용자가 물건을 담았다가 한꺼번에 서버에 보낸다.

상태유지는 하나씩 물건을 담다가 중간에 서버가 바뀔경우 이전 장바구니에 들어있던

물건들은 바뀐 서버가 기억하지 못한다.


 

 

 

 

 

○ 무상태(Stateless) 프로토콜의 장단점

 

 

무상태 프로토콜의 장점은 서버 확장성이 높다.(스케일 아웃)

갑자기 클라이언트 요청이 증가해도 서버를 대거 투입할 수 있다

무상태는 응답 서버를 쉽게 바꿀 수 있다. 즉, 무한한 서버 증설이 가능하다.

 

단점은 클라이언트가 추가 데이터를 전송해야 한다는 점이다.

 

 

 

 

 

 

 

 

3. 비 연결성(connectionless)

 

 

 

비 연결성은 예시를 통해 바로 알아보자.

 


100명의 사용자(클라이언트)가 있고 그들과 통신하는 1개의 서버가 있다고 하자.

 

연결을 유지하는 모델의 경우,

클라이언트1이 서버에 요청을 보내면 서버는 응답을 해주고 연결을 유지한다.

 

이때 클라이언트2가 서버에 요청을 보내면 서버는 응답을 해주고 연결을 유지한다.

 

이렇게 된다면 서버는 클라이언트1,2와 연결을 계속해서 유지하게되고, 

이 말은 즉 서버의 자원이 계속 소모된다는 것이다.

 

 

반면 연결을 유지하지 않는 경우(비 연결성)

클라이언트1이 서버에 요청을 보내면 서버는 응답을 해주고 연결을 끊는다.

 

마친가지로 클라이언트2가 서버에 요청을 보내면 서버는 응답을 해주고 연결을 끊는다.

 

이로써 서버는 연결을 유지하지 않게되고, 최소한의 자원을 사용할 수 있다.


 

 

 

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

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

 

비연결성을 통해 서버 자원을 매우 효율적으로 사용할 수 있게 된다.

 

 

 

 

 

○ 비 연결성의 한계와 극복

 

 

클라이언트와 서버가 연결을 유지하지 않게되면 몇가지 문제짐이 발생한다.

 

요청 응답을 하고 연결을 끊기에, 클라이언트가 다시 요청을 보내면 TCP/IP 연결을 새로 맺어야 한다.

즉, 3 way handshake 시간이 추가된다.

 

뿐만 아니라 웹 브라우저로 사이트를 다시 요청하면 HTML 뿐만 아니라

자바스크립트, css, 추가 이미지 등등 수 많은 자원이 함께 다운로드되는데 

이것들 또한 다시 다운로드를 받아야한다.

 

 

이러한 문제는 HTTP 지속 연결(Persistent Connections)로 문제로 해결하였고,

HTTP/2, HTTP/3에서 더 많은 최적화가 일어남으로써 해결하고 있다.

 

 

반응형