웹 브라우저에 URL을 입력하면 어떤 일이 생기나요? - AWS 한국 블로그
브라우저에 URL을 입력하여 Enter
를 치면 어떤 과정을 통하여 우리 브라우저로 웹 페이지가 오는 것일까?
웹 브라우저에 URL을 입력하고 Enter 키를 누릅니다.
웹 브라우저가 도메인의 IP 주소를 조회합니다. (먼저 캐시를 찾고, 그다음 DNS를 검색합니다.)
웹 브라우저가 찾은 IP 주소를 기반으로 서버와의 TCP 연결을 시작합니다.
웹 브라우저가 HTTP 요청을 서버로 전송합니다. (필요한 경우, HTTPS 보안 통신이 진행됩니다.)
웹 서버가 요청을 처리하고 응답을 다시 웹 브라우저로 전송합니다.
웹 브라우저가 전송 받은 콘텐츠를 렌더링합니다.
https://sample.com/something/path/resource
을 입력했다고 하자.
https://
는 프로토콜이다. file://
, ftp://
과 같은 것도 본적 있을 것이다. 전부 프로토콜이다.
sample.com
은 웹 사이트의 도메인 이름이다. 사람이 기억하기 쉬운 주소이며 특정 서버의 IP주소를 가리킨다.
https://sample.com/**something/path/target**
에서 something/path
가 리소스로 이어지는 path고 target
은 웹 사이트의 리소스 이름이다. .html 확장자가 있을 때도 있는 데, 서버에서 정적파일을 내려줬다는 이야기이다. 확장자가 없다면 일반적으로 서버가 이 응답 콘텐츠를 생성했음을 의미한다.
URL은 단순히 사람이 보기 좋게 만든 이름이다. 핸드폰에서 이름 자체로는 전화를 걸 수 없다. 이름을 통하여 전화 번호를 찾아서 전화를 한다.
웹도 동일하다. URL에서 도메인부분을 사용하여 웹 사이트를 호스팅하는 서버의 IP 주소를 조회해야 한다.
도메인 이름 시스템(Domain Name System, DNS)를 사용하여 도메인 이름을 기반으로 서버 IP주소를 조회한다.
DNS는 빨라야한다. 따라서 DNS 데이터는 웹 브라우저 사이의 서로 다른 계층과 인터넷의 다양한 위치에 임시로 저장된다. 이를 Cache라고 한다. 웹 브라우저는 고유한 캐시, 운영 체제 캐시, 라우터의 로컬 네트워크 캐시, 인터넷 서비스 제공업체(ISP)의 DNS 서버 캐시를 확인한다.
캐시에서 IP를 못찾을 경우 ISP의 DNS 서버가 재귀적 DNS 조회를 수행한다. 재귀적 DNS 조회는 인터넷에 있는 여러 DNS 서버를 요청하여, 검색될 때까지 DNS 레코드에 대해 더 많은 DNS 서버에 요청한다. 웹 브라우저가 IP 주소로 DNS 레코드를 가져오면 인터넷에서 서버를 찾아 연결을 설정해야 한다.
IP를 알아냈으니 웹 브라우저와 서버 사이의 TCP 연결은 시작한다. 연결이 완료되면 통신할 준비가 끝난 것이다.
추가로 웹 서버에 직접 도달하는 것을 비효율적일 수 있다. 따라서 웹 브라우저와 지역적으로 가까운 곳에 CDN을 위치하여 콘텐츠를 제공한다. 예를 들어, Netfilx와 같은 영상 스트리밍 서비스가 전부 미국에 있으면 한국에서는 버퍼링 지옥을 맛보게 될 것이다. 따라서 CDN을 한국에 두고 영상 스트리밍 서비스를 제공하는 것이다.
TCP 연결이 이루어진 후에 HTTPS를 사용하는 경우 주고 받는 데이터의 암호화를 위한 TLS (Transport Layer Security) 핸드셰이크라는 추가 과정을 수행한다. 이는 암호화를 할 상호 대상을 확인하는 것으로 TLS 핸드셰이크는 데이터 보안 통신에 있어 매우 중요한 주제다.
TLS 핸드셰이크는 TCP 연결이 TCP 핸드셰이크를 통해 열린 후에 발생한다.
웹 브라우저가 서버에 연결되면, HTTP 요청을 전송을 통하여 페이지의 콘텐츠를 요청한다.
HTTP 요청에는
이 포함된다.
요청 라인에는 GET
과 같은 메소드와 요청 리소스 경로, HTTP 버전이 포함된다.
요청 헤더에는 여러 추가 정보들이 키-값 페어로 담긴다. 예를 들어 Content-Type
을 기반으로 본문의 형식을 이해한다.
본문에는 생성하거나 업데이트할 클라이언트의 데이터가 포함된다.
HTTP 요청을 기반으로 서버는 HTTP 응답을 준비한다.
HTTP 응답에는
가 포함된다.
상태 라인에는 HTTP 버전, 요청 상태 숫자, 상태 텍스트 표현이 포함된다.
브라우저가 응답받은 HTML 파일을 화면에 보여준다. HTML 파일 안에 CSS나 JS, 이미지가 포함되어 추가 요청을 보내기도 한다.