URL
이번 건 직접 읽고 이해하고 정리하는 게 목표니까 좀 자유롭게 글을 써보도록 하자.
URL, Uniform Resource Locator는 자원이 사용하는 프로토콜, 주소, 포트, 위치를 명시하는 웹 주소다.
이 친구를 브라우저 주소 표시줄에 입력하기만 하면 그와 연관된 리소스를 데려올 수 있는 것이다!
그럼 url의 예시를 들어보자.
가령 express-generator로 hello express를 띄우는 사이트를 허겁지겁 만든다고 하면 기본 주소는 다음과 같다.
<http://localhost:3000>
좀 더 복잡해질 수도 있다. 이건 mozilla에 나온 복잡한 것의 예시다!
<http://www.example.com:80/path/to/myfile.html?key1=value1&key2=value2#SomewhereInTheDocument>
여기까지만 일단 보고 이 친구들을 나눠보는 시간을 갖자. 이 친구들도 기능들이 오밀조밀 모인 거니까...
다 떼어내서 보려면 정말 한도 끝도 없다.
Scheme or Protocol
http://
이건 스킴, 혹은 프로토콜이라고 부른다. 프로토콜은 통신 규약이라는 뜻이다. 이건 조금 더 뒤에 다뤄보도록 하자. 일반적으로 http 혹은 https가 쓰인다. https는 http에 보안 계층이 추가된 프로토콜이다.
스킴과 프로토콜의 차이가 있어서 저렇게 부르는 건가? 싶었는데 대개 url에서 프로토콜이 있는 위치를(그러니까 url의 맨앞에서부터 더블 슬래쉬까지의 영역을) 스킴이라고 부르는 듯 하다.
메일 클라이언트를 위한 mailto: 혹은 파일 전송을 위한 ftp도 쓰일 수 있다. ssh, tel, urn, view-source도 포함된다.
잠깐 멍청한 생각을 했는데 내 오해인 것으로 밝혀졌다.
만약 우리가 https://naver.com 을 //naver.com ← 요런 식으로 접근하려고 들면 앞의 슬래쉬 하나가 생략되고 브라우저는 이를 파일로 인식해버린다. 그러니까, 이걸 file:///naver.com 으로 읽게 되는 것이다. 그 때문에 접근이 불가능해진다. 일반적으로 슬래쉬가 의미하는 바도 디렉토리니까!
Domain
www.example.com
이건 도메인 이름이라고 한다. IP 주소가 들어갈 수도 있지만~ 우리가 DNS를 쓰게 된 이유가 따로 있으므로 IP 주소는 자주 사용되지는 않는다. 이건 뒤에서 이야기하기로 하고 마저 이야기를 해보자.
가령
<http://localhost>
는 루프백 호스트 네임이다. 도메인은 네트워크상에서 승인을 받은 것이고 호스트 네임은 우리가 이걸 입력하는 건 127.0.0.1로 루프백하겠다는 뜻이다.
사실상
<http://127.0.0.1>
과 다를 바 없다. localhost가 일종의 도메인으로 작용하는 셈이다. 물론 localhost는 내 컴퓨터에 내가 요청을 보내고 응답을 받는 기능이므로 DNS 서버와의 연결이 사용되지 않는다. 때문에 OS가 이를 조정하는데, OS hosts 파일의 redirect rules이 이에 해당한다.
만약 우리가 여기서 문서를 변경하면 127.0.0.1로 루프백 되지 않을 수 있다.
# Copyright (c) 1993-2009 Microsoft Corp.
#
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
#
# This file contains the mappings of IP addresses to host names. Each
# entry should be kept on an individual line. The IP address should
# be placed in the first column followed by the corresponding host name.
# The IP address and the host name should be separated by at least one
# space.
#
# Additionally, comments (such as these) may be inserted on individual
# lines or following the machine name denoted by a '#' symbol.
#
# For example:
#
# 102.54.94.97 rhino.acme.com # source server
# 38.25.63.10 x.acme.com # x client host
# localhost name resolution is handled within DNS itself.
# 127.0.0.1 localhost
# ::1 localhost
그럼 우리가 도메인은 왜 쓰는 것인지에 물을 수 있겠다. 일단 기존 일련 숫자보다 훨씬 인상에 깊게 남기 때문이다.
만약 우리가
<https://102.031.002.01> //대충 지어봤다.
라는 걸 매번 입력해야 한다면 이건 상당히 복잡한 문제가 된다. 물론 하나만 있다면 상관이 없지만, 우리는 하나의 주소만 가지고 살 수 없다. naver, twitter, instagram...하루에도 수많은 페이지를 오고가는데 매번 3자리*4의 일련 숫자들을 기억하고 살 수는 없는 노릇이다.
하지만 도메인 네임이 생긴다면 다르다. 도메인 네임은 대개 사이트의 이름과 깊은 연관을 가지고 있기 때문이다.
www.naver.com 이나 www.google.com 은 각자의 회사명을 따왔다. 이는 기억하기에 아주 좋다. 적어도 백 어쩌구 하는 숫자들보다야 말이다. 우리는 연관을 시키기 위해 전화번호도 010-8282-8282 등을 쓰고 있다. 그만큼 기억을 쉽게 할 수 있는 방법은 없기 때문이다.
근데 왜 naver.com만 치면 바로 https로 가주는거지? octavesop.net 도 바로 https로 이동해준다. 이건 이 호스트네임 자체가 도메인이기 때문이다. 앞의 프로토콜과 관계없이 DNS는 이것이 도메인임을 알고 있기 때문이다.
기왕 도메인 이야기가 나온 김에 바로 포트로 넘어갈 게 아니라 도메인에 대해 얘길 좀 해보자. 도메인은 누가 만드는 걸까? 왜 돈 주고 사야하는 걸까? 도메인은 누가 관리하는 걸까? DNS라는 건 대체 어떻게 구성된 걸까?
일단 이런 질문을 하려면 또 도메인의 구성에 대해 짚고 넘어가지 아니할 수 없겠다.
도메인은 "."을 기준으로 갈리는데, 맨 뒤의 .com 이나 .org, .net 같은 것들을 root domain이라고 한다.
그리고 도메인은 일반적으로 뒤에서부터 search하기 시작한다. www.naver.com 이 있으면, com으로 끝나는 domain 중에서 1단계 도메인이 naver인 것으로, 개중에서도 마지막으로 www. 로 끝나는 친구를 찾아내는 것이다.
그럼 왜 도메인은 거꾸로 서치(이걸 Inverted Tree, 역트리 구조라고 한다)를 하는걸까?
DNS를 일종의 전화번호부라고 생각해보자. 나는 내 동생의 번호를 찾고 싶다.
그리고 전화번호부에는 내 친구와 회사 동료와 가족친척들과 데면데면한 semi 제3자들 그리고 이제는 누구인지 모르겠는 사람들과 어쩌다 보니 저장된 외국인들까지 해서 총 12842102명의 전화번호를 가지고 있는 어마어마한 인싸력이 있다.
DNS를 디렉토리라는 느낌으로 이해해야 한다. 모든 도메인의 중심은 루트 도메인이고, 이것이 사라질 수 있다는 전제를 두고 아마 root domain에서 서치를 진행해야 한다.
루트 도메인은 com, net, org, edu, gov, mil이 초창기부터 사용되다가 점점 확장되었다. 이걸 일반 최상 도메인(gTLD, general Top-Level Domain)이라고 부른다.
이건 KISA에 올라온 gTLD이다. 최근엔 new gTLD라는 것도 나온 모양이다.
이번에 알았는데 .com은 commercial의 약자라서 상업성을 띠는 매체에 사용한다고 한다.
ASK 1. DNS라는 건 어떻게 구성된걸까?
앞서 말했듯이 DNS는 계층화되어있다. "."을 기준으로 말이다. 계층적으로 검색하기 때문에 루트 도메인에서 검색하여 차근차근 주소를 검색한다. 때문에 DNS는 분리되어 있으며, 이는 검색 성능의 향상을 일으킨다.
우분투나 윈도우에서도 사설 DNS Server를 만들어볼 수 있다. 인트라넷에서도 사설 IP 서버를 사용한다. 이 경우 동일 도메인이 있을 때 DNS 측에서 강제할 수도 있지만 대개 사용자가 지정 IP를 통해 이동할 수 있다. 이는 DLCP 정책을 근간으로 한다고...하시는데 DLCP는 또 레퍼런스가 별로 없다. ㅋㅋ 주님..
ASK 2. 도메인은 누가 만드는 걸까?
도메인은 '레지스트리'라는 곳에서 만든다. 도메인의 빅브라더(흠)는 ICANN이고, 각각의 도메인은 관리하는 기관이 따로 있다. 이 기관이 국가인 경우 ccTLD, 영리 단체인 경우 gTLD에 해당하게 되는 것이다.
예를 들어 .com과 .net을 관리하는 기관인 VeriSign, .kr을 관리하는 KISA 등이 gTLD와 ccTLD의 예시가 될 수 있겠다.
이 도메인을 관리하는 레지스트리는 데이터베이스 내의 유일성을 보존하는 것과 도메인 네임 서버를 운영해 등록된 도메인명이 인터넷 상에서 접속될 수 있게 하는 것이 관건이다.
ASK 3. 왜 돈 주고 사야하는 걸까?
수요가 있으면 자연히 가치가 붙는 것이다. 초기에는 gTLD만 있었다. 명확한 용도를 지닌 도메인들이 시간이 갈 수록 점유율이 높아지게 된 것이다. 이 때문에 ccTLD를 만들어 국가 단위에서 도메인을 관리할 수 있도록 하였으나 이 또한 점유율이 높아졌다. 이것이 new gTLD의 발생 사유이다.
이런 레지스트리에서 제공하는 도메인은 가비아나 Route53 등에서 보고, 또 구매할 수 있는데 이를 "레지스트라" 라고 부른다. 이러한 서비스는 레지스트리와의 계약 및 ICANN의 심사를 거쳐 선정된다. 각 도메인의 판매는 그 레지스트라에 의존적이기 때문에 비용에 편차가 발생할 수 있다.
ASK 4. 그럼 유일하기만 하면 내가 레지스트리에 신청해서 쓸 수도 있다는 건가?
맞다!
ASK 5. CNAME? RECORD A
Port
:80
포트는 대체 왜 쓰는걸까?
보통 포트를 예시로 들 때 공항 입수속 절차, 문과 같은 예시를 많이들 든다. 나는 전자가 조금 더 마음에 드는 것 같다.
포트를 막는 건 왜 하는걸까? 포트포워딩은 왜 하는걸까?
네트워크로 전파되는 바이러스나 악성코드도 포트를 통해 전파되기 때문이다. 인트라넷이 있는 것도 이런 이유다.
방화벽이 있는 이유도 여기에 있다.
포트의 영역은 TCP header에서도 볼 수 있겠지만 최대 16bit로 구성된다. 이 말은...포트 번호는 최대 65535까지 가능하다는 것이다. 이 값은 2의 16승이다.
Path
/path/to/myfile.html
path는 말 그대로 경로다.
HTML 페이지를 작업하면 작업한 절대 경로가 고스란히 노출되는 것을 볼 수 있다.
오늘날에는 물리적인 위치를 나타내는 대신 웹 서버에 의한 추상화를 사용한다.
The Anatomy of a Full Path URL: Hostname, Protocol, Path, and More...
근데 이 글을 보면 단순히 file path를 숨기기로 한 이유가 미관적인 사유로 보인다.
정적 자원인 html 파일과는 달리 동적 자원을 활용한 모던 웹에 맞춰 형식이 변할 필요가 있다는 주장도 있다.
갑자기 path 하니까 또 REST api를 빼고 가기 쉽지 않은데, CTO님은 REST는 단순히 통일성을 위한 개념이고 REST가 표현하지 못하는 것에 관해서도 어느 정도 단점이 있다고 하심.
Query
?key1=value1&key2=value2
쿼리는 url에 parameter를 보낼 때 사용한다. 일반적으로 key&value 한 쌍을 이용하고, 복수 값을 보낼 때는 &를 사용한다.
우리가 www.octavesop.net에 접속했을 때 일어나는 일
이거 내 gmail 계정에 적었는데 왜 이전이...안 되지?ㅋㅋ
아무래도 이미지가 들어가있는데 거기에 authentication 로직이 내 거랑 충돌이 난 모양이다.
내일 들어가서 수정해봐야지...
URI, URL, URN
'KNOWLEDGE > WEB' 카테고리의 다른 글
Content Security Policy (0) | 2023.12.04 |
---|