도메인과 DNS 알아보기
인터넷과 호스트
인터넷에는 수많은 컴퓨터들이 서로 연결되어 있고, 우리가 방문하는 웹 페이지나 우리가 사용하는 웹 서비스들은 모두 어딘가에 있는 컴퓨터가 제공(서빙)해주고 있는 것이다
이렇게 서비스를 제공해주는 컴퓨터와 그걸 사용하는 우리의 컴퓨터(또는 스마트폰, 태블릿 등)를 가리지 않고, 인터넷과 연결되어 있는 각각의 컴퓨터를 모두 호스트 (Host)라고 부른다
IP 주소
이렇게 인터넷에 연결되어 있는 수많은 호스트 컴퓨터들 중, 정확히 내가 원하는 호스트와 정보를 주고받기 위해서는 각각의 호스트를 인터넷 상에서 유일하게 식별할 수 있도록 도와주는 인터넷 상의 주소가 필요하다. 이렇게 "인터넷 프로토콜에서 사용하는 주소"를 IP 주소 (Internet Protocol Address)라 부른다
IPv4 주소는 142.250.72.14 처럼 숫자만으로 구성되어 있는데, 문제는 이런 IP 주소가 사람들에게는 전~혀 와닿지 않는 주소라는 것이다. 일반적으로 사람의 단기기억 용량은 숫자 5개에서 9개 사이라고 하는데, 의미 없는 숫자의 나열일 뿐인 IPv4 주소 여러개를 외우고 다닐 수 있을까?
숫자와 문자를 함께 사용하는 IPv6도 상황이 크게 다르지 않은데, 이게 nice2meetyou 처럼 기억하기 쉬운 문자와 숫자의 조합이 아니라 2404:6800:400b:c00e::8a 처럼 나열된 16진수이기 때문에 사람에게 와닿지 않는 주소라는 점은 IPv4와 다를 게 없다
"주소창에 저희 142.250.72.14를 검색해보세요~" 같은 광고 카피를 한번 상상해보자. 도대체 이걸 어떻게 발음하면 좋을지, 막막하기만 하다..
도메인
그래서 사람들이 읽고 기억하기 쉬운 문자열 형태의 주소인 도메인 (Domain) 이란 개념이 등장했고, google.com 처럼 훨씬 인간 친화적인 문자열 주소를 통해 인터넷 상의 호스트들을 식별할 수 있게 되었다
도메인 이름은 점.을 기준으로 여러 단계로 나뉘는 계층 구조다:
최상위 도메인, TLD
www.google.com을 예로 들면, 가장 오른쪽의 com이 최상위 도메인(TLD, Top-Level Domain), 그 왼쪽의 google이 2차 도메인(SLD, Second-Level Domain), 또 그 왼쪽의 www는 서브도메인이다
최상위 도메인은 다시 .com, .net 처럼 용도나 성격에 따라 만들어진 일반 최상위 도메인(gTLD, Generic TLD)과 .kr, .us, .jp 처럼 각각의 국가마다 배정된 국가 코드 최상위 도메인(ccTLD, Country Code TLD)으로 나뉜다. .co.kr 처럼 ccTLD 아래에 용도별로 단계가 하나 더 나눠지는 경우도 있는데, 이런 경우에는 실제로 사용할 수 있는 도메인 이름이 3번째 자리에 오게 된다
이런 TLD 목록은 ICANN이라는 국제 기관이 관리하고 있기 때문에, 임의로 결정할 수 있는게 아니라 정해진 목록 중에서 선택해야 한다 ("discord.gg", "op.gg" 등의 사이트에서 사용하는 ".gg"는 사실 건지(Guernsey) 섬의 국가 코드 최상위 도메인이다)
2차 도메인, SLD
우리가 일반적으로 "도메인을 산다"라고 할 때 실제로 고르게 되는 이름은 2차 도메인(SLD, Second-Level Domain)이다. .com 처럼 같은 TLD 안에서는 2차 도메인 이름이 겹칠 수 없기 때문에 google.com이라는 도메인 조합은 유일하지만, google.net 처럼 TLD가 다르면 별개의 도메인으로 취급된다.
루트 도메인
이렇게 google.com 처럼 "사람들이 고를 수 있는 부분" + TLD의 조합을 루트 도메인(Root Domain) 또는 APEX 도메인이라고 부른다
서브도메인
루트 도메인 왼쪽으로 www, mail, api 처럼 이름을 하나 더 덧붙여서 만든 하위 주소를 서브도메인(Subdomain)이라 부른다. dev.api.google.com 처럼 서브도메인 앞에 다시 이름을 덧붙여서 단계를 계속 늘릴 수도 있다
서브도메인은 2차 도메인과 달리 따로 구매할 필요가 없다!
루트 도메인(TLD + 2차 도메인)을 가진 사람이 그 도메인의 DNS 설정에서 자유롭게 추가할 수 있고, 개수 제한도 사실상 무제한에 가깝다. 그래서 하나의 루트 도메인 아래에 mail, blog, api 처럼 용도별 서브도메인을 나눠 붙이고, 각각의 서브도메인을 별도의 호스트 IP 주소와 연결해두는 경우를 어렵지 않게 찾아볼 수 있다 (www.google.com, docs.google.com, mail.google.com, drive.google.com, ...)
우리에게 익숙한 www도 특별한 무언가가 아니라, 사람들이 관례적으로 웹 서버에 붙여온 서브도메인 중 하나일 뿐이다
도메인 네임 시스템, DNS
도메인 개념의 등장 이후, 이제 사람들은 google.com 같은 문자열을 통해 호스트를 구분할 수 있게 됐지만, 컴퓨터는 인터넷 상의 호스트를 식별하기 위해 여전히 142.250.72.14와 같은 IP 주소를 사용한다. 사람들이 브라우저의 주소창에 google.com과 같은 도메인을 입력하면 사실 컴퓨터 입장에서는 이게 뭘 가리키는지 알 방법이 없는 것이다
그렇기 때문에 누군가는 이런 도메인과 IP 주소간의 매핑 정보를 가지고 있다가, "google.com이 대체 뭔데?" 라고 묻는 컴퓨터에게 "142.250.72.14"라는 IP 주소를 알려줄 수 있어야 한다. 이런 역할을 해 주는 시스템이 바로 DNS, Domain Name System이다
DNS 레코드
DNS 레코드란, 특정 도메인에 대한 질문이 들어왔을 때 DNS가 어떤 응답을 내려줘야 하는지 적어둔 텍스트 형태의 매핑 정보다. 간단히 말하자면 각각의 DNS 레코드는 "google.com을 물어보면 142.250.72.14 라고 답해줘" 같은 내용이 적힌 텍스트 한 줄이고, 이런 레코드들이 여러 개 모여서 한 도메인에 대한 DNS 설정을 구성하는 것이다
도메인 하나에 왜 DNS 레코드가 여러 개 있냐면, 도메인 하나에 들어오는 질문이 한 종류가 아니기 때문이다. google.com 하나만 놓고 보더라도 www.google.com, mail.google.com 등의 서브도메인마다 각각의 DNS 응답이 필요하고, 같은 도메인이라도 IPv4 주소를 묻는 질문과 IPv6 주소를 묻는 질문에 대한 답이 달라져야 하며, "이 도메인 진짜로 니가 관리하는 도메인이야?" 처럼 소유권 확인을 위한 텍스트를 물어보는 경우도 있다. 그래서 실제로 운영되고 있는 도메인의 DNS 설정 화면을 열어보면 레코드가 한 줄만 있는게 아니라 여러 줄이 표 형태로 나열되어 있는 것을 확인해볼 볼 수 있다
일반적으로 DNS 레코드에는 다음 항목들이 들어있다:
- Name
- 호스트 또는 도메인 이름
- 해당 DNS 레코드가 적용되는 범위!
www,api,@(DNS 레코드에서 루트 도메인을 나타내는 기호) 등등
- Type
- DNS 레코드의 종류
- A, AAAA, CNAME, NS, TXT 등등
- Value 또는 Data
- 해당 레코드가 가리키고 있는 값, 실제 목적지
IP 주소(A, AAAA) 또는다른 도메인(CNAME)
- TTL (Time To Live)
- 해당 DNS 레코드의 응답 결과를 얼마나 오래 캐싱(유지)해도 되는지 표시
- 초 단위!
A 레코드
Address Mapping Record
A 레코드는 가장 일반적인 DNS 레코드로, 도메인 이름을 32자리 IPv4 주소로 매핑해주는 레코드다
AAAA 레코드
Quad-A Record
AAAA 레코드는 A 레코드와 비슷하지만 도메인 이름을 IPv4 주소가 아니라 IPv6 주소로 매핑해주는 레코드다
왜 A가 4개냐면, IPv6의 경우 IPv4보다 주소의 길이가 4배 더 길기 때문에 AAAA라는 이름이 붙었다고 한다 (IPv4는 32비트, IPv6은 128비트)
CNAME 레코드
Canonical NAME Record
CNAME 레코드는 한 도메인 이름을 다른 도메인 이름으로 매핑해주는 레코드다
즉, Value에 IP 주소가 아니라 다른 도메인 이름이 들어가는 레코드!
예전에는 사용할 일이 많지 않았지만, 최근 들어 AWS, Vercel, Cloudflare, GitHub Pages 등의 클라우드 서비스나 CDN(Content Distribution Network) 환경에서 많이 사용되고 있는 레코드다
내 도메인을 가지려면..?
WIP
+ DNS 계층 구조, ICANN, REGISTRAR, NS 레코드, namecheap beast mode TLD search, 도메인 구입 후 Cloudflare로 이전(NS레코드 설정), DNS 레코드 설정 예시