과거의 내가 미래의 나에게
HTTP 학습 (2) - 동작 과정과 특징 본문
HTTP 동작 과정
클라이언트가 서버에 리소스를 요청하고 서버가 해당 요청을 처리한 후 클라이언트에 응답을 보내는 과정을 정리해본다.
1. 클라이언트의 요청 준비
사용자가 원하는 페이지를 받기 위해 웹 브라우저에 URL을 입력할 것이다. 웹 브라우저는 URL을 입력받으면 DNS 서버로부터 URL에 해당하는 IP 주소를 받아오는 등 사용자가 원한 웹 페이지를 특정하기 위한 정보를 준비한다.
2. TCP 연결 설정
정보를 다 모았다면 이제 해당 웹페이지가 들어있는 웹 서버를 찾아나서야 할 것이다. 전 세계에는 수많은 웹서버가 있으므로 이를 찾기 위해서는 먼저 전 세계의 웹 서버를 찾을 수 있는 인터넷에 접속해야할 것이다. 이를 TCP 연결 설정이라 하며, TCP 연결 설정을 통해 원하는 웹 서버를 찾은 후 해당 웹서버와 통신을 시작하게 된다.
3. HTTP 요청 보내기
연결된 웹 서버로 준비했던 웹 페이지의 정보를 알려준다. 이 때 보내는 것이 HTTP 요청 메시지이다.
4. 서버의 요청 처리
웹 서버는 클라이언트로부터 받은 요청을 해석하고 클라이언트가 원했던 웹 페이지를 찾은 후 연결되어있던 TCP 연결을 통해 완성된 HTTP 응답을 클라이언트로 전송한다.
5. 화면 표출
웹 서버로부터 원하는 웹 페이지를 받은 웹 브라우저는 해당 페이지를 띄워서 사용자에게 보여준다.
HTTP의 특징
1. 클라이언트-서버 모델
HTTP는 리소스를 요청하는 클라이언트와 리소스를 제공하는 서버 간에 통신 환경으로 이루어져있다. 통신은 반드시 클라이언트 쪽에서 요청, 즉 request를 줌으로 인해 시작되고, 서버는 클라이언트로부터 리퀘스트를 송신받아야만 결과, 즉 response를 줄 수 있다.
2. 무상태(stateless) 프로토콜
클라이언트와 서버 간의 각 요청과 응답 사이에 상태를 가지고 있지 않는다. 그 뜻은 각 요청은 모두 별개의 것이고 이전 요청과 현재 요청 간에 어떠한 정보도 공유되지 않는다는 것이다.
예를 들어, 클라이언트가 서버에게 "A의 키에 대해 알려줘" 물어보면 서버는 답한다. 후에 클라이언트가 다시 서버에게 "몸무게에 대해서도 알려줘" 라고 물어보면 서버는 누구의 몸무게를 물어보는 지 모른다는 것이다.
이러한 HTTP의 특징은 HTTP를 간단하고 효율적으로 만든다. 서버가 클라이언트의 상태를 추적하지도 관리하지도 않고 또 요청 사항에 대해서 따로 분석하거나 할 것 없이 그대로 받아들이기만 하면 된다. 이는 HTTP가 많은 데이터를 빠르고 확실하게 처리하기 위해 이와 같이 설계된 것이다.
하지만 웹이 더 많은 역할을 담당하게 되면서 stateless 특성에 의해 불편함을 야기하는 경우가 생긴다. 대표적인 예로는 로그인이다. 페이지를 이동했을 때 로그인 정보가 매 페이지마다 해제되는 일은 없어야 할 것이다. 이러한 한계를 극복하기 위해 cookie라는 기술이 도입되었는데 이는 나중에 HTTP의 성능을 향상시키는 여러 방법을 알아볼 때 상술하겠다.
3. 비연결성(connectionless)
HTTP는 비연결성 프로토콜이다. 클라이언트와 서버가 한 번 연결되면 쭉 이어나가지 않고 클라이언트의 요청에 대한 응답이 끝나면 바로 연결을 끊어버린다는 것이다.
이로 인해 HTTP는 간단하고 가볍다는 장점이 있다. 이전 요청 상태를 추적하지 않아도 되고 연결을 유지하는데 힘을 쏟지 않아도 됨으로써 효율적이다. 다만 이는 매 요청마다 연결 설정과 해제 과정을 거쳐야함으로 일부가 지연되거나 혹은 쓸데없는 데 힘을 많이 뺄 수도 있게 된다.
이를 극복하기 위해 HTTP 1.1에서는 지속 연결이나 파이프라인화 같은 기술이 도입되었고 또 HTTP 2.0, 3.0이 개발되면서 계속해서 비연결성의 단점은 없애고 더 효율적인 방법을 세우기 위한 노력은 계속 되고 있다. 이는 나중에 HTTP 성능을 향상시키는 여러 방법을 알아볼 때 상술하겠다.
참고 문서
- HTTP의 특징 - https://velog.io/@wlwl99/HTTP%EC%9D%98-%ED%8A%B9%EC%A7%95
- HTTP 동작 과정 - https://jess-m.tistory.com/17
- [Network] HTTP의 특징에 대해 알아보기(feat. 비연결성, 무상태) - https://fomaios.tistory.com/entry/Network-HTTP%EC%9D%98-%ED%8A%B9%EC%A7%95%EC%97%90-%EB%8C%80%ED%95%B4-%EC%95%8C%EC%95%84%EB%B3%B4%EA%B8%B0feat-%EB%B9%84%EC%97%B0%EA%B2%B0%EC%84%B1-%EB%AC%B4%EC%83%81%ED%83%9C
'CS' 카테고리의 다른 글
HTTP 학습 (3-1) - 일반 헤더 필드 (0) | 2023.11.01 |
---|---|
HTTP 학습 (3) - HTTP 메시지 (0) | 2023.10.27 |
HTTP 학습(1) (0) | 2023.10.15 |
Domain Name System 학습(3) (0) | 2023.08.12 |
Domain Name System 학습(2) (0) | 2023.08.02 |