SY 개발일지

HTTP는 HTML 문서와 같은 리소스들을 가져올 수 있도록 해주는 프로토콜이다. HTTP는 웹에서 이루어지는 모든 데이터 교환의 기초이며, 클라이언트-서버 프로토콜이기도 한다. 클라이언트-서버 프로토콜이란 (보통 웹브라우저인) 수신자 측에 의해 요청이 초기화되는 프로토콜을 의미한다.

 

HTTP Protocol에는 큰 특징 2가지가 있는데, 바로 비연결성과 무결성이다.

 

비연결성(Connectionless)

 

HTTP는 비연결 지향형 통신 프로토콜이다. 클라이언트와 서버가 있다고 했을 때, 클라이언트가 서버에 요청을 날리면, 서버는 그 요청에 맞는 응답을 돌려주고 연결을 종료한다. 우리가 인터넷을 사용하고 있다는 것은 그 서버에 우리가 계속해서 연결이 되어있다고 생각을 할 수 있는데, 사실 그게 아니라는 것이다.(페이지를 넘기고 연결을 끊음) 만약에 연결을 끊지 않았다면 서버가 과부하가 걸릴 수 있다.

즉 비연결성을 지향하는 이유는 리소스때문이다. 계속해서 연결되어 있다는 것은 계속해서 리소스가 들어간다는 것을 의미한다. 그래서 클라이언트가 서버에 요청을 하고 응답을 받으면 바로 TCP/IP 연결을 끊어 연결을 유지하지 않음으로써 서버의 자원을 효율적으로 관리하고 수많은 클라이언트의 요청에 대응할 수 있게 된다.

하지만 새로 연결을 맺을 때 마다 TCP Handshake가 발생한다는 문제점이 있다. 예를 들어 웹 브라우저로 사이트를 요청하면 HTML 뿐만 아니라 자바스크립트, css, 이미지 등 수많은 자원이 함께 다운로드가 되는데, 자원을 하나하나 받을 때마다 연결을 맺고 끊어야 하여 비효율적이다. 이러한 문제를 HTTP 지속 연결(Persisent Connections)로 해결한다. 이것은 연결이 되면 요청에 대한 응답을 다 받았을 때 연결이 종료되는 것이다.

 

무상태(Stateless)

무상태라는 것은 응답한 후에 연결을 종료함으로써 지속적인 연결 유지로 인한 자원 낭비 방지를 위해 연결을 해제하는 것이다. 이러한 연결이 해제됨으로써 서버는 클라이언트 정보를 알 수 없게 된다. 따라서 상태를 보관하지 않으므로 클라이언트 요청에 어느 서버가 응답해도 상관이 없어 클라이언트의 요청이 대폭 증가해도 서버를 증설해 해결할 수 있다. 즉 무상태로 인해 서버 확장성이 높지만, 서버가 클라이언트를 기억하고 있지 않으므로 동일한 클라이언트의 모든 요청에 대해 매번 새로운 연결을 시도하고, 해제하는 과정을 통해 연결 및 해제에 대한 오버헤드가 발생한다는 단점이 있다.

'CS 정리 > 개발 상식' 카테고리의 다른 글

GoF(Gang of Four) 디자인패턴  (0) 2023.05.06
쓰레드(Thread)란?  (0) 2023.05.02
동기와 비동기, 블록과 논블록  (0) 2023.04.27
쿠키(Cookie)와 세션(Session)  (1) 2023.04.20
GIT과 GITHUB  (0) 2023.04.16
profile

SY 개발일지

@SY 키키

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