1. HTTP란?
HTTP란 Hyper Text Transfer Protocol 의 약자이다. 즉 HTTP는 프로토콜의 일종이다.
인터넷에서 우리는 웹 페이지(HTML), text, 이미지, 음성등의 데이터를 주고 받는다.
이때 데이터를 주고 받을 수 있게 해주는 프로토콜이 HTTP이다.
2. HTTP 의 동작
클라이언트와 서버는 request(요청) 와 response(응답) 를 한다.
요청과 응답시에는 각각 자신의 정보를 담은 메세지를 상대에게 보내는데, 이 메세지를 HTTP 메세지라 한다.
HTTP 메세지는 start line / header / body 로 구성이된다.
- start line 은 요청시에는 메소드 버전, 요청이 전송되는 주소(request target), http 버전의 의 정보를 가지고 있다.
메소드의 버전은 여러가지가 있지만 GET, POST, PUT, PATCH ,DELETE, OPTION 등이 있다.
응답시에는 버전과 상태코드, 상태메시지로 구성되어 있다. - header 는 요청시에 대한 정보를 담고 있다. 또 요청을 할 때 함께 보내는 데이터의 정보도 가지고 있다.
응답시에는 응답에 대한 정보를 담고 있다. 정보는 key : value 형식으로 되어 있다.
header 는 종류가 많다. 공통 헤더 / 요청 헤더 / 쿠키와 세션 헤더/ 그 외의 기타 헤더가 있다. - body에는 요청에 대한 데이터를 주로 담고 있다. 크롬의 개발자 도구의 headers 에서 request payload 부분이다.
3.HTTP의 특징
- 무상태(stateless)
HTTP는 무상태(stateless)의 특징을 가지고 있다.
반대의 방식은 stateful이고 클라이언트의 상태를 저장하고 유지하기 위한 형태로 요청과 응답하는 구조이다.
stateful 방식은 더 복잡하고 느리며 많은 자원을 소모하게 된다. 이는 필연적으로 연결을 유지하는 서버에 부담을 주게 된다.
무상태란 서버가 클라이언트의 상태를 보존하지 않는것이다.
stateless 방식은 클라이언트와 서버 사이의 연결을 단순화 시키고 필요한 데이터의 양을 줄일 수 있다.
상태를 보존하지 않음으로서 요청이 증가해도 기존의 연결이 끊어지기 때문에 서버에 부담이 덜 간다.
그래도 유지해야 할 상태는 존재할 텐데 그런 경우에는 쿠키나 세션을 사용하여 상태를 유지한다.
stateless의 경우 서버가 장애가 나도 다른서버가 응답을 해줄 수 있다면 정상적으로 작동한다. 상태를 보관하지 않기에
어떤서버가 응답을 해도 상관이 없기 때문이다.
또 연결에 대한 신경을 쓰지 않아도 되어 서버의 증설이나 상태의 수정 등의 추가적인 작업을 할 수도 있다.
- 비연결(connectionless)
클라이언트와 서버가 한번 연결을 한 후에는 요청에 대해 서버가 응답을 마치면 연결을 끊어버린다.
이를 connection을 유지하지 않는다는 뜻에서 비연결성(connectionless)라고 부른다.
인터넷은 다수의 클라이언트와 통신을 계속해서 해야한다. 그런데 이때 연결을 유지하는게 없는것 보다 자원이 더 크게 소모된다. 연결을 끊음으로서 많은 사람이 서비스를 사용해도 실제 서버에서 동시에 처리하는 요청의 수는 적다.
1시간을 초단위로 나누고 초당 동시에 요청하는 수를 따져보면 그다지 , 생각보다는 많지 않다.
그렇다고 만능은 아닌게 매번 새로운 연결과 해제의 과정이 필요하기 때문에 그에 따른 자원이 소모된다.
즉, 연결/해제에 대한 오버헤드가 발생한다.
이런 오버헤드의 완화의 노력이 HTTP의 keepAlive 속성이다.
KeepAlive 는 지정된 시간동안 서버와 클라이언트의 패킷 교환이 없을 경우, 상대방의 안부를 묻기위해 주기적으로 패킷을 보낸다. 이때 패킷에 반응이 없으면 비로소 접속을 끊는다.
오버헤드를 줄이기 위한 노력이어서 완벽한 해결책은 아니다.
서버에 요청이 많은 환경인 경우 프로세스의 수가 기하급수적으로 늘어나는 건 쉽고
그러면 keepAlive 상태를 유지하기 위한 메모리를 많이 사용하게 된다.
참고자료
http특성
https://victorydntmd.tistory.com/286
zerocho blog
https://www.zerocho.com/category/HTTP/post/5b344f3af94472001b17f2da
인터넷 네트워크
https://velog.io/@syleemk/HTTP-%EC%9D%B8%ED%84%B0%EB%84%B7-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC
stateless인 이유
'웹 > 네트워크 기본' 카테고리의 다른 글
HTTPS 란 무엇일까 (0) | 2022.03.03 |
---|---|
http의 메소드 (0) | 2022.02.24 |
이미지가 표시가 안될 때 (0) | 2020.11.09 |
네트워크 기초 (0) | 2020.11.09 |
네트워크 기초 2 - 라우터, tcp,ip (0) | 2020.11.07 |