브라우저에 URL 을 입력하면 무슨 일이 발생할까?
예를 들어 브라우저 주소 창에 프로그래머스 URL 을 입력하면 잠깐의 로딩 뒤에 프로그래머스 웹 사이트가 보이게 된다. 잠깐의 로딩 사이에 도대체 어떤 일이 발생하길래 웹 사이트가 보이게 되는 걸까?
지금부터 그 과정을 단계별로 확인해보자.
scheme://user:password@host:port/url-path
여기서 scheme 는 프로토콜이 들어가는 영역이다. 그리고 인증이 요구 되는 경우 id 와 password 를 입력하면 접속 허가를 받을 수 있다. 참고로 이 URL 은 // 두개를 생략해도 괜찮다.
예시
- http://example.com:8761/members
- ftp://admin:1q2w3e4r@example.com/image.png
- kciter@naver.com
- http:programmers.co.kr
DNS 는 Domain Name System 의 약자로, 도메인과 IP 주소를 서로 변환해주는 시스템이다.
브라우저는 DNS 를 요청을 보내기 전에 몇가지 체크를 한다.
먼저 해당 도메인을 알고 있는지 찾아보고 없다면 로컬 컴퓨터의 hosts 파일을 참조한다.
만약 정의가 되어 있다면 내부적으로 IP 를 반환한다.
둘다 해당이 안된다면 DNS 를 호출한다.
DNS 서버는 Root Server -> TLD Server -> Authoritative Server 순으로 탐색한다.
참고로 도메인과 호스트를 착각할 때가 많다.
present.do, www.present.do, gateway.dev.present.do 전부 도메인은 present.do 이고
나머지 서브 도메인이 붙은 경우는 host 라고 부른다.
정확히는 해당 IP가 할당된 서버가 존재하는 대역으로 이동한다.
예를 들어, 한국에서 미국에 있는 서버를 요청 했다면 네트워크 장비인 라우터를 통해
여러번 거친 후, 해당 서버가 존재하는 대역으로 접근하게 된다.
ARP 는 Address Resolution Protocol 의 약자이다.
논리 주소인 IP 주소를 물리 주소인 MAC 주소로 변환하는 프로토콜이다.
네트워크 망 내에 ARP 를 Broadcasting 하면 해당 IP 주소를 가지고 있는 기기가 MAC 주소를 반환한다.
Step4-1. IP 주소와 MAC 주소
IP 는 논리적인 주소이고 MAC 은 물리적인 주소이다.
기계의 실제 위치를 알기 위해선 MAC 주소가 필요하다.
여기서 IP 주소로만 하면 되는 것을 왜 논리적 주소와 물리적 주소로 나눈걸까?
왜냐하면 사용 용도가 달라서 그렇다.
Step4-2. 경북궁의 주소는?
예시를 통해 알아보자. 경북궁의 주소는 도로명 주소로 “서울 종로구 사직로 161”, 지번 주소로는 “서울 종로구 세종로 1-91” 이다. 그런데 우리가 이것만 보고 어디에 있는지 알 수 있을까? 만약 도로명, 지번 주소 체계가 변경 된다면 어떻게 될까? 답은 실제 위치를 알 수 없다. 따라서 실제 위치를 알기 위해서는 정확한 GPS 좌표가 필요하다. 비유하자면 도로명 주소나 지번 주소는 논리적 주소인 IP 주소에 비유할 수 있다.
GPS 좌표는 물리적 좌표인 MAC 주소에 비유 할 수 있다.
Step4-3. 경북궁으로 택배를 보낸다면?
여기서 끝이 아니다. 만약 경북궁으로 택배를 보낸다면 어떻게 해야 할까?
우리가 배달을 한다 생각하면 먼저 논리적 주소를 보고 범위를 좁혀 나갈 것이다.
경북궁 같은 경우 먼저 서울로 접근하고 다음 종로구, 세종로를 탐색한다.
그럼 탐색 순서가 서울의 진짜 위치를 찾게 되고 종로구의 진짜 위치, 세종로의 진짜 위치를 찾게 될 것이다.
마치 ARP 를 이용 했던 것과 비슷하다. 이처럼 IP 는 대역을 통해 범위를 좁혀 나가는 용도로 사용이 된다.
따라서 경북궁으로 택배를 보낸다면 중간 거점을 거칠 수 있다. 아래의 그림을 보면 옥천 Hub 나 군포 Hub 같은 것을 라우터라고 비유 한다면 비슷하게 각 Hub 의 진짜 위치를 찾아내어 이동 한다. 그리고 마지막으로 도착지에 배달을 하게 된다.
실제 Socket 을 열어서 허락을 받아야만 데이터를 전달할 수 있다. 이때, TCP 연결을 허락 받기 위해 3 way handshake 가 실행된다. 다시 택배에 비유하자면 우리가 물건을 전달하기 위해 초인종을 눌러 허락을 받는 것이라 볼 수 있다. 만약 거절 당한다면 물건을 전달 할 수 없다. 여기서 요청이 수락되면 데이터를 서버로 전달하게 된다.
HTTP 프로토콜로 들어온 패킷을 읽고 처리한다. 요청에 따른 적절한 응답 값을 반환한다.
HTML 을 읽어 DOM Tree 를 구축한다. 만들어진 DOM Tree 를 이용하여 화면에 그린다.
만약 여기서 스크립트가 있다면 스크립트까지 실행하게 된다.
여기까지 진행 했다면 우리는 최종적으로 페이지를 볼 수 있게 된다. 이렇게 복잡한 과정이지만 이 과정이 아무리 길어봐야 초 단위를 벗어나지 않는다.