웹 브라우저의 동작 순서 포스팅을 하면서 나왔던 개념인, DNS가 무엇인지 학습한다. 학부생 시절 네트워크 수업을 수강하지 않았기 때문에, DNS나 도메인 등의 용어를 들어만 봤지 정확하게 무엇인지 모르고 있었다. 이번 포스팅을 하면서 웹 동작의 이해에 필요한 네트워크 지식을 쌓아야겠다.
Domain Name System의 약자이다. DNS가 무엇인지 알려면 도메인이 무엇인지 먼저 알아야겠다.
우리가 접속하는 URL은 여러 구성요소로 이루어져 있다.
HTTP(Hyper Text Transfer Protocol)
은 프로토콜(규약)으로,웹에서 서버와 클라이언트 간에 어떤 방식으로 자원을 교환할지 알려주는 역할이다. 익숙하게 본 Http
와 Https
이외에도 ftp
(파일을 주고받는 프로토콜), mailto
(이메일 주소를 지정하는 프로토콜) 등 여러가지가 있다고 한다.
HTTP
프로토콜은 무상태(stateless)
라는 특징을 가지고 있는데, 간단히 말하면 서버가 여러 클라이언트들을 구분할 수 없다는 것이다. 이 방식의 장점으로는 불특정 다수에게 서비스를 할 때 적합하고, 훨씬 많은 요청과 응답을 처리할 수 있다는 것이다. 단점으로는 연결이 끊어진 후에는 클라이언트가 이전에 어떤 작업을 했는지 알 수 없다는 것인데, 이 단점을 보완하고자 쿠키라는 기술이 등장했다.
www 뒤에 나오는 녀석이 도메인이다. 웹서버의 위치를 지정해 주는 역할을 한다. 우리가 브라우저에 도메인을 입력하면, 브라우저가 도메인을 타고 해당 웹서버에 찾아가 IP주소를 알려달라고 요청할 수 있다. IP 주소는 누군가에게 전화를 하려면 전화번호를 알아야 하듯이, 데이터를 받아오려면 알아야 하는 주소이다. 컴퓨터 네트워크 상에서 각 장치의 고유 번호라고 보면 되는데, 이 IP는 길고 외우거나 구별하기 어렵기 때문에 DNS를 통해 알기 쉬운 도메인 주소로 변환되는 것이다. 이를테면 네이버의 IP 주소는 223.130.195.200
인데, 이걸 접속하기 쉬운 naver.com
이라는 도메인 주소로 바꾼 것이다.
이 IP주소를 알고 있다면 도메인 대신 직접 IP주소를 사용하는 것도 가능하다. 로컬에서 개발을 할 때 127.0.0.1
으로 접속하는 것과 같이 말이다.
포트는 말 그대로 항구와 같은 역할을 한다. 바다 너머의 세상과 육지를 연결해주는 관문과 같다. 웹에서도 마찬가지로, 인터넷 상에 있는 서버에 접속할 때 브라우저와 서버 간을 연결해주는 역할을 한다. URL 또는 IP를 토대로 찾아간 서버 컴퓨터 상에는 대부분 여러개의 프로그램이 실행되고 있어서, 이 여러개의 프로그램 중 어떤 프로그램에 접속할 것인지 알려주는 역할이다.
&
기호로 구분되는 key-value 형식의 리스트로, key와 value는 =
문자로 구분한다.
#
뒤에 나오는 녀석으로, 책갈피 역할을 한다. 특정 스크롤 위치로 이동하려고 할 때 생기며, 요청이 서버로 보내지지 않는다.
앞에서, IP주소는 복잡하고 외우기 쉽지 않기 때문에 이를 쉬운 도메인으로 변경한 것이라고 했다.
도메인: www.naver.com
IP: 223.130.195.200
사이트마다 길고 어려운 IP주소를 외울수가 없기 때문에, 이렇게 전화번호부 같은 것을 만들어서 외우기 쉬운 주소들로 접속을 하는 것이다. 이 전화번호부의 정보가 저장되는 곳이 DNS이다.
내 컴퓨터에서 www.naver.com
에 접속하려고 한다고 가정해보자. 그런데, 현재 내 브라우저는 네이버의 IP주소를 모른다. 그래서, 브라우저는 먼저 PC에 설정된 로컬 DNS 서버에 해당 도메인의 호스트명과 IP를 가지고 있는지 물어본다. 이 로컬 DNS 서버는 보통 통신사마다 지정된 곳이 있는데, 사용자가 다른 곳으로 바꿀 수도 있다. 로컬 DNS 서버에는 이 주소가 이미 캐싱되어서 정보를 가지고 있을 수도 있고, 없을 수도 있다. 있다면 바로 접속이 가능할 것이고, 없다면 로컬 DNS 서버가 Root 서버에게 이 주소에 해당하는 IP를 어디 찾을 수 있는지 물어본다. 이 루트 DNS 서버는 전세계에 13개가 있다고 한다.
이 루트 DNS 서버는 응답으로, .com
으로 끝나는 도메인들을 담당하는 서버의 IP 주소를 반환한다. 로컬 DNS 서버는 이 주소를 받아들고 .com
담당 서버를 찾아간다. 그러면 .com
서버는 naver.com
의 도메인 정보를 가진 DNS 서버의 IP 주소를 알려준다. 그 주소를 보고, naver.com
의 여러 호스트네임 별 IP 주소들 중에서 www
라는 호스트네임을 가진 IP 주소를 얻어낸다. 이 IP주소를 브라우저에 반환하면, 드디어 www.naver.com
에 접속하게 되는 것이다.