[그림으로 쉽게 이해하는 웹/HTTP/네트워크를 읽고 정리합니다.]
URL
URL은 프로토콜과 도메인 등 여러 요소를 합친 결과물이다.
URL이란 유저가 원하는 웹 자원을 정확히 찾아가기 위해 특정 웹 자원을 구별할 수 있는 고유한 주소다. URL은 웹 사이트 뿐만 아니라 HTML 문서, 이미지, 동영상 등 인터넷에 존재하는 모든 자원을 나타낸다.
주소를 쓸 때 시, 군, 구를 쓰듯이 URL도 순서가 있다.
가장 먼저 URL의 맨 앞 부분은 해당 자원을 얻기 위한 통신 규약, 어떤 프로토콜을 사용하는지를 나타낸다. 웹 통신에 사용하는 프로토콜은 HTTP로, 대부분의 URL이 HTTP로 시작하는 것이 바로 이 이유 때문이다. 요즘에는 HTTP보다 보안이 강화된 HTTPS를 사용하고 있다.
위에서 말한 것처럼 URL은 웹 사이트 뿐만 아니라 인터넷의 다른 자원에도 접근할 수 있어 웹 통신에 사용하는 프로토콜 HTTP 외의 다른 프로토콜도 사용할 수 있다.
다음 부분은 호스트 주소(hostname)로, 우리가 접근할 서버 컴퓨터의 주소를 말한다. 원래는 컴퓨터마다 가진 고유한 번호, IP 주소가 들어가야 하는데 www.naver.com, www.google.com 과 같은 도메인을 사용한다. 왜냐하면 예컨대 google의 IP 주소는 74.125.24.101인데, 이걸로는 google 주소인지 알 수 없고 외우기도 어려우니 문자 형태의 주소인 도메인을 사용하는 것이다. 그래서 저 부분에 IP 주소를 넣어도 동일하게 웹 사이트에 갈 수 있다.
포트(port)는 우리가 웹 서버 안에서 특정 자원에 접근하기 위해 사용하는 관문으로, 이 포트를 통해서만 통신을 할 수 있다. 우리나라에 입국하기 위해 사용하는 공항으로 김포 공항, 인천 공항 등이 있는 것처럼 서버 컴퓨터 안에도 여러 포트가 있는데 각 포트는 고유한 번호를 가지고 있다. 물론 우리가 쓰는 일반적인 URL을 보면 별도의 포트 번호가 보이지 않는다. 그 이유는 포트 번호를 입력하지 않으면 기본적으로 프로토콜이 가진 기본 포트 번호가 적용되기 때문이다. 예컨대 HTTP를 사용하는 URL은 80번, HTTPS를 사용하는 URL은 443번의 번호가 적용된다. 그래서 실제 google의 주소는 https://www.google.com:443 이라고 쓸 수 있다.
경로(path)는 해당 자원에 대한 구체적인 위치를 가리킨다. 컴퓨터 파일의 경로처럼 URL에 어떤 폴더, 그 폴더 안에 있는 어떤 파일을 찾는 느낌이다. 다만 이렇게 하면 유저가 자원 경로를 예측해서 접근이 허용되지 않는 자원에 접근하려는 문제가 발생할 수 있어, 오늘날에는 직접적으로 경로를 나타내기 보다 가상의 경로를 만들어 사용자가 특정 경로까지 오면 파일을 전달하고 있다.
파라미터(parameter)는 웹 서버에 전달해야 할 문구를 의미한다. 서버가 자원을 보여주기 전, 추가 작업이 필요할 때 이 파라미터를 확인해 적절하게 표현할 수 있다. 보통 파라미터는 URL 상에서 물음표(?) 다음에 오며, [파라미터명]=[파라미터값]이 한 세트로 작동하고, 파라미터가 여러 개 일 경우 앰퍼샌드(&)로 이어준다.
현재 글을 쓰고 있는 내 티스토리의 URL에서 파라미터는 type부터 끝까지로, type은 post, returnURL은 %2F... %2F라는 걸 알 수 있다.
URL에 영문자와 숫자를 제외한 대부분의 문자는 허용되지 않는다. 그래서 띄어쓰기의 경우 더하기(+)로 표시가 되곤 한다. 이처럼 URL에 허용되지 않는 문자를 더하기(+)와 같이 적절한 기호로 변환하는 일을 인코딩(encoding)이라고 하는데, 한글 역시 허용되지 않아 한글이 URL에 들어갈 경우에는 백분율 기호(%)와 16진수로 인코딩을 한다. 그래서 복사한 URL이 엄청 길다고 느꼈을 경우가 있다면 그 URL에 허용되지 않은 문자가 들어갔기 때문이라는 걸 알 수 있다.
URL, URN 그리고 URI
URI(Uniform Resource Identifier)는 자원을 구분할 수 있는 유일한 식별자라는 뜻이다.
인터넷의 자원을 식별할 수 있는 문자열을 뜻하며 URI의 하위 개념으로 URL과 URN이 있다.
지금까지 이야기한 URL은 Location, 위치에 초점을 맞춰 웹 자원이 위치한 정보를 나타낸다.
URN(Uniform Resource Name)은 URI의 표준 포맷 중 하나로, 웹 자원을 이름으로 특정하는 URI를 말한다. http 같은 프로토콜을 제외하고 웹 자원의 고유하고 영구적인 이름을 가리키는데 사용되는데, 리소스 접근 방식이 표기되지 않기도 하고 URL 표기 방식이 대중화 되어 있어 지금은 잘 사용하지 않는다.
DNS(Domain Name System)
위에서 호스트 주소를 말할 때, 복잡하고 사용자 친화적이지 않은 IP 주소 대신 사람이 쉽게 기억할 수 있도록 문자열로 구성된 도메인을 사용한다고 했다. IP 주소인 74.125.24.101 대신 www.google.com을 사용하는 것인데, 이 도메인도 사실 여러 도메인을 묶은 형태다.
바로 위 그림에서 www.google.co.kr을 서브도메인+도메인+ccTLD+TLD라고 써놓았다.
도메인은 점을 기준으로 나누며, 가장 오른쪽에 있는 호스트 이름을 최상위 도메인(TLD : Top Level Domain) 또는 1차 도메인이라고 한다. 최상위 도메인은 kr, us, uk 등 각국을 대표하는 국가 코드 최상위 도메인(ccTLD : Country Code Top Level Domain)과 com, net처럼 국가 코드는 아니지만 일반적으로 많이 사용하는 일반 최상위 도메인(gTLD : General Top Level Domain)으로 구분한다. google이나 naver처럼 세계적으로 서비스를 제공하기 때문에 ccTLD, gTLD 모두로 접근할 수 있다. 2차 도메인(SLD : Second Level Domain)은 google, 3차 도메인(TLD : Third Level Domain - 서브 도메인)은 www으로 나눌 수 있다.
그런데 우리가 어떤 웹 사이트에 접근하기 위해서는 해당 웹 페이지를 관리하는 웹 서버의 IP 주소가 필요하다. 유저들은 도메인만 알고 있는데 어떻게 도메인이 IP 주소가 되어 유저가 접근하고 싶은 웹 페이지에 접근할 수 있을까?
옛날에는 컴퓨터를 사용하는 사람이 많지 않아 각 컴퓨터 안에 IP 주소와 호스트의 이름을 연결한 hosts.txt 파일을 넣어두고 사용했다고 한다. 하지만 점점 사람이 많아지고 호스트의 숫자도 늘어나면서 호스트 정보를 각 컴퓨터가 아닌 특정 서버에 모아서 관리해야 했고, 그래서 DNS가 탄생하게 되었다.
DNS는 도메인과 IP 주소를 서로 변환해주는 역할을 하는 시스템으로, 이러한 변환 시스템을 운영하는 서버를 DNS 서버 또는 네임 서버라고 한다. 이 DNS 서버에 요청이 들어오면 도메인 주소와 연결된 IP 주소를 찾아 응답한다. 이를 통해 사용자는 도메인 이름을 입력해서 웹 사이트나 서비스에 접속할 수 있게 된다.
DNS 서버는 보통 여러 대 있는데, 서버별로 담고 있는 도메인 정보와 역할이 조금씩 다르다.
케빈 베이커의 6단계 법칙처럼 내가 google에 접속하기 위해서 서버들은 다른 서버에게 물어 물어 IP 주소를 찾게 된다.
www.google.com을 검색할 경우 가장 가까운 DNS 서버, 로컬 DNS 서버(일반적으로 ISP가 제공하는 DNS 서버를 기본 서버로 사용한다.)에 도착한다. 로컬 DNS 서버에 google IP 주소가 있다면 바로 브라우저에 IP 주소를 전달하고, 없다면 DNS 계층의 최상위에 위치한 루트 DNS 서버로 간다. 루트 DNS 서버는 전세계적으로 13대만 있는 특수한 서버로, 최상위 도메인(TLD)을 관리하는 DNS 서버의 주소를 알려준다. 최상위 도메인을 관리하는 DNS 서버에 도착하면, 이 서버는 자기가 알고 있는 다른 도메인 서버 중에 google.com 도메인을 관리하는 DNS 서버의 주소를 전달한다. 로컬 DNS 서버가 그 서버에 또 도착하면, google 도메인을 관리하는 서버는 로컬 DNS 서버로 google IP 주소를 응답해준다. 로컬 DNS 서버는 google IP 주소를 받아 사용자의 장치에 전달하고, 사용자의 장치는 google에 연결된다.
즉 로컬 DNS 서버 -> 루트 DNS 서버 -> 최상위 DNS 서버 -> google 도메인을 관리하는 서버를 거쳐 사용자의 장치로 IP 주소가 전달된다는 것이다. 우리가 주소창에 naver를 검색하면 순식간에 접속하는 동안 서버들은 이런 작업을 거치고 있다는 것이다.
하지만 google에 접속했다가 끄고 다시 들어간다면 그 때도 동일한 과정을 반복해야 할까? 다행히 그렇지 않다. DNS 조회 결과는 TTL(Time-to-Live)라는 시간 값과 함께 반환된다. TTL은 DNS 정보의 유효 기간을 나타내는 값으로, 한 번 IP 주소를 찾고 나면 로컬 DNS 서버는 이 기간동안 저장된 주소를 사용해 다시 google에 접속할 수 있다. 즉 캐시된 정보를 활용해 빠르게 접속할 수 있으며 이는 DNS의 성능과 효율성을 향상시키는데 도움을 준다고 한다.
'🖥️ CS & Network & Web > 🕸️ Network' 카테고리의 다른 글
[Network] 6. HTTP (1) | 2023.12.20 |
---|---|
[Network] 5. TCP (0) | 2023.12.19 |
[Network] 4. IP (2) | 2023.12.19 |
[Network] 2. 네트워크 개념 (0) | 2023.07.02 |
[Network] 1. 웹 (0) | 2023.06.30 |