우리가 매일 접하는 웹페이지들은 어떻게 동작할까요? 그 답은 HTTP(HyperText Transfer Protocol)라는 웹 애플리케이션 프로토콜에 있습니다. 오늘은 이 HTTP의 원리를 쉽게 풀어보겠습니다.
📄 웹의 구조와 HTTP
웹페이지는 다양한 객체(서버, 클라이언트)로 구성됩니다. 기본적으로 HTML 파일이 핵심이며, 이미지나 오디오 파일, Java 애플릿 등 다양한 객체가 포함될 수 있습니다. 이러한 웹페이지는 고유한 URL로 식별됩니다.
🖥️ 클라이언트-서버 모델
웹은 클라이언트-서버 모델을 기반으로 동작합니다. 브라우저(클라이언트)는 서버에 HTTP 요청을 보내고, 서버는 요청에 따라 HTML 파일이나 기타 리소스를 반환합니다. 이 과정에서 브라우저는 서버로부터 받은 데이터를 화면에 표시합니다.
🛠️ HTTP의 동작 방식
HTTP는 TCP 프로토콜을 기반으로 합니다. 클라이언트가 서버에 TCP 연결을 열고, 이후 요청 메시지와 응답 메시지를 주고받습니다. 이러한 통신이 끝나면 TCP 연결은 종료됩니다. 흥미로운 점은 HTTP가 상태를 유지하지 않는 프로토콜이라는 것입니다. 즉, 서버는 클라이언트의 이전 요청에 대해 기억하지 않습니다.
ex) 8천명의 학생이 수강신청을 동시에 한다면, 서버의 사용도는 올라갑니다. 그럼 반대로 열심히 돌아가고 있으니까 서버의 성능은 떨어집니다. 그러면 사용자들은 불편해집니다. 이 문제를 해결하기 위해서 사용자들의 사용정보를 기록하지 않습니다.
🚶 비지속 연결 vs 지속 연결
HTTP에는 비지속 연결과 지속 연결이라는 두 가지 연결 방식이 있습니다.
- 비지속 연결 HTTP: 하나의 객체를 서버에서 클라이언트로 전송한 후 TCP 연결이 끊어집니다. 여러 객체를 다운로드하려면 각각의 TCP 연결이 필요해 비효율적일 수 있습니다.
- 지속 연결 HTTP: 한 번의 TCP 연결로 여러 객체를 주고받을 수 있어 더 효율적입니다.
📊 HTTP 요청과 응답 메시지
HTTP는 요청(request)과 응답(response) 메시지로 구성됩니다. 요청 메시지는 클라이언트가 서버로 보내는 정보로, GET, POST와 같은 메서드로 시작됩니다. 응답 메시지는 요청에 대한 결과를 알려주며, 상태 코드로 성공 여부를 확인할 수 있습니다.
- 200 OK: 요청이 성공적으로 처리되었습니다.
- 404 Not Found: 요청한 페이지를 찾을 수 없습니다.
- 301 Moved Permanently: 요청한 자원이 다른 위치로 이동되었습니다.
- 400 Bad Request: 요청 메시지를 서버가 이해할 수 없음
- 505 HTTP Version Not Supported: 요청된 HTTP 버전을 서버가 지원하지 않음
🧁 쿠키로 사용자 상태 관리
HTTP는 상태를 기억하지 않기 때문에, 웹사이트는 쿠키를 사용해 사용자 상태를 관리합니다. 예를 들어, 특정 웹사이트에서 로그인을 하면 쿠키가 저장되어 다음 접속 시에도 로그인 상태가 유지됩니다. 그러나 쿠키는 개인 정보 보호 문제를 일으킬 수 있어 주의가 필요합니다.
🗄️ 웹 캐시란?
웹 캐시는 원본 서버(오리진 서버)가 너무 멀어서 직접 접속하지 않고도 클라이언트의 요청을 처리하는 중간 저장소 역할을 합니다. 자주 요청되는 웹 리소스를 미리 저장해 두어 서버와의 연결 없이도 빠르게 요청을 처리할 수 있습니다.
- 웹 캐시의 동작 원리
사용자가 웹 페이지에 접속하면 브라우저는 먼저 웹 캐시로 HTTP 요청을 전송합니다. 만약 캐시에 해당 요청에 대한 객체가 저장되어 있다면, 캐시는 즉시 해당 객체를 반환합니다. 만약 저장된 객체가 없다면 캐시는 오리진 서버에 직접 요청하여 응답을 받아 이를 저장하고, 이후에 해당 객체를 반환합니다. - 웹 캐시의 이점
- 응답 시간 감소: 웹 캐시에 요청이 저장되어 있을 경우, 서버와의 통신 없이 빠르게 요청을 처리할 수 있어 웹 페이지 로딩 속도가 빨라집니다.
- 네트워크 트래픽 감소: 자주 사용되는 리소스에 대해 서버와의 통신을 줄여 트래픽을 줄이고 서버 부담을 덜 수 있습니다.
- 사용자 경험 향상: 저속 네트워크 환경에서도 웹 캐시가 미리 저장된 데이터를 사용해 빠르게 페이지를 제공함으로써, 사용자에게 고속 네트워크에 접속한 것과 같은 경험을 제공합니다.
🚀 HTTP/2와 HTTP/3: 더 빠르게, 더 효율적으로
웹 성능을 향상시키기 위한 중요한 발전 중 하나는 HTTP/2입니다. HTTP/2는 다중 HTTP 객체 요청 시의 지연을 줄이기 위해 고안된 프로토콜로, 웹페이지를 더 빠르고 효율적으로 로딩할 수 있도록 도와줍니다.
- HTTP/2의 주요 특징
HTTP/2는 여러 객체를 동시에 요청하고 전송할 수 있도록 하여 서버와 클라이언트 간의 트래픽을 크게 개선했습니다. HTTP/1.1과 달리 단일 TCP 연결에서 여러 요청을 파이프라인 처리할 수 있습니다.- 프레임 단위 전송: HTTP/2에서는 객체를 프레임 단위로 분할하여 전송하며, 이로 인해 트래픽의 유연성을 크게 향상시킵니다.
- 우선 순위 제어: 클라이언트가 요청하는 객체에 대해 우선 순위를 설정하고, 이를 기반으로 서버가 데이터를 전송합니다. 이를 통해 긴 객체에 의해 짧은 객체가 지연되는 문제를 해결할 수 있습니다.
- HTTP/2와 HTTP/1.1의 차이점
HTTP/1.1에서는 클라이언트가 요청한 순서대로 데이터를 처리해야 했기 때문에, 길이가 긴 객체가 먼저 전송되면 뒤에 있는 짧은 객체가 대기해야 했습니다. 이러한 문제가 Head-of-Line(HOL) 블로킹 문제로 알려져 있습니다. 반면, HTTP/2는 우선 순위와 프레임 단위 전송을 통해 이러한 문제를 해결하여 빠른 응답 속도를 제공합니다. - 추가 기능: 서버 푸시
HTTP/2에서는 클라이언트가 요청하지 않은 객체도 서버가 미리 전송하는 서버 푸시 기능을 지원합니다. 이 기능은 웹페이지 로딩에 필요한 리소스를 미리 전송함으로써 성능을 최적화하는 데 도움을 줍니다.
'전공 공부 > 컴퓨터네트워크' 카테고리의 다른 글
P2P 파일 분배와 비디오 스트리밍: 효율적인 데이터 전달의 비밀📁 (4) | 2024.09.24 |
---|---|
DNS: 인터넷의 주소록 (0) | 2024.09.24 |
애플리케이션 계층 쉽게 이해하기: 네트워크 애플리케이션의 기본 원리 (0) | 2024.09.23 |
1.3 네트워크 코어 (0) | 2024.09.03 |
1.2 네트워크 에지 (0) | 2024.09.03 |