사전 도메인 이름
포맷

도메인 이름

gabury1고친 사람 github-actions[bot]

도메인 이름은 인터넷에 놓인 기계를 사람이 읽는 이름으로 부르게 해 줍니다. www.example.com 이 그런 이름입니다. 이름과 숫자 주소를 잇는 일은 따로 맡는 체계가 합니다. 그래서 서버를 옮겨 주소가 바뀌어도 부르는 이름은 그대로 둘 수 있습니다.

쉽고 빠른 이해

무슨 일을 하는 물건인가 — 기계를 사람이 외울 수 있는 이름으로 부르게 합니다. www.example.com 처럼 점으로 나눈 이름이 그것입니다.

왜 이렇게 하나 — 숫자 주소는 외우기 어렵습니다. 서버를 옮기면 바뀌기도 합니다. 이름을 앞에 세워 두면 주소가 바뀌어도 이름을 쓰는 프로그램은 아무것도 안 고쳐도 됩니다.

어떻게 도나

  1. 이름을 점으로 나눠 오른쪽부터 읽습니다. 오른쪽이 넓은 범위입니다
  2. 넓은 쪽이 「그 아래는 누가 맡는다」를 알려 줍니다
  3. 마지막으로 그 이름을 맡은 서버에서 주소 같은 값을 받습니다

대가 — 이름과 주소를 잇는 표를 누군가 관리해야 합니다. 접속 앞에 그 표를 찾는 왕복이 하나 붙습니다. 이름은 사서 가지는 것이 아니라 기간을 두고 빌리는 것입니다. 갱신을 놓치면 남이 가져갈 수 있습니다.

상세

이름을 나눠 맡는 방식이 이 이름의 모양을 거의 다 정합니다. 아래에서는 그 모양과, 이름을 짓고 다룰 때 걸리는 규칙을 차례로 봅니다.

레이블과 위임의 방향

도메인 이름은 점으로 나눈 조각을 이어 붙인 것입니다. 조각 하나를 레이블이라고 부릅니다. www.example.com 은 레이블 셋으로 이루어집니다.

레이블 셋 위에는 이름이 없는 레이블이 하나 더 있습니다. 이것을 루트라고 부르고 점 하나로 적습니다. 모든 이름이 이 루트 아래에 놓입니다.

www.example.com. 처럼 끝에 점을 찍은 꼴이 루트까지 다 갖춰 적은 이름입니다. 이것을 FQDN(Fully Qualified Domain Name, 완전히 갖춰 적은 도메인 이름)이라고 부릅니다. 평소에 끝점을 빼고 쓰는 것은 사람이 편하려고 줄여 적는 것입니다.

읽는 방향은 오른쪽에서 왼쪽입니다. 오른쪽이 넓고 왼쪽으로 갈수록 좁아집니다. com 이 제일 넓은 레이블이고 example 은 그 안의 한 레이블, www 는 다시 그 안의 한 레이블입니다.

넓은 레이블을 맡은 곳은 그 아래를 직접 관리하지 않습니다. 대신 「이 아래는 저쪽이 맡는다」고 알려 줍니다. 이것을 위임이라고 합니다.

그래서 example.com 을 맡은 곳이 그 아래의 www 와 mail 을 스스로 정합니다. 위쪽에 허락을 받을 필요가 없습니다.

아래 그림은 이 위임이 어느 방향으로 뻗는지를 보인 것입니다. 노드에 적은 것은 레이블 하나가 아니라 거기까지 이어 붙인 전체 이름입니다.

flowchart TD
    R["루트 · 점 하나"] --> C["com"]
    C --> E["example.com"]
    E --> W["www.example.com"]
    E --> M["mail.example.com"]

제일 오른쪽 레이블은 TLD(Top-Level Domain, 최상위 도메인)라는 이름으로 따로 부릅니다. com · org · kr 이 그것입니다.

적을 수 있는 글자와 길이

무엇을 담을 수 있느냐보다 무엇을 못 담느냐가 이 이름을 다루는 데 더 자주 걸립니다. 쓸 수 있는 글자와 길이가 좁게 정해져 있습니다.

무엇 규칙
쓸 수 있는 글자 영문자 · 숫자 · 하이픈
레이블의 처음과 끝 영문자로 시작하고, 영문자나 숫자로 끝납니다
레이블 하나의 길이 63바이트까지
이름 전체의 길이 255바이트까지
대문자와 소문자 같은 글자로 봅니다

마지막 줄이 실무에서 자주 부딪힙니다. Example.COM 과 example.com 은 견줄 때 같은 이름입니다. 이름을 키로 삼아 캐시를 만들 때는 한쪽으로 모양을 맞춰 두어야 같은 이름이 두 항목을 차지하지 않습니다.

밑줄과 공백은 위 표에 없습니다. 한글과 한자도 없습니다. 이 셋이 안 되는 것이 이름 짓기에서 제일 먼저 걸리는 벽입니다.

메시지 안의 바이트 모양

이름과 주소를 잇는 일을 맡는 체계는 DNS(Domain Name System, 도메인 이름 체계)입니다. 이름이 기계 사이를 오가는 곳은 DNS 가 주고받는 메시지 안입니다.

점은 사람이 적을 때 쓰는 기호입니다. 메시지 안에서는 점이 사라집니다. 레이블마다 앞에 길이를 적은 한 바이트가 붙습니다. 이름이 끝나는 곳에는 길이가 0 인 바이트를 놓습니다.

03 w w w              // 레이블 www
07 e x a m p l e      // 레이블 example
03 c o m              // 레이블 com
00                    // 이름 끝

이렇게 적어 두면 읽는 기계가 점을 찾아 훑지 않아도 됩니다. 길이를 먼저 읽고 그만큼 건너뛰면 다음 레이블이 나옵니다. 0 을 만나면 이름이 끝난 것입니다.

앞 절의 63바이트 한계가 여기서 나옵니다. 길이를 적는 바이트는 하나입니다. 그중 위 두 비트를 다른 쓰임에 남겨 두어 길이로 쓸 수 있는 값이 63까지입니다.

아래는 그 한 바이트를 비트로 펼친 것입니다. 남은 여섯 비트가 63 이라는 수를 만듭니다.

packet-beta
0-1: "다른 쓰임으로 남긴 두 비트"
2-7: "레이블 길이 · 0~63"

남겨 둔 두 비트가 둘 다 1 이면 그 바이트는 길이가 아닙니다. 같은 메시지 안에서 앞에 이미 나온 이름을 가리키는 표시가 되어, 되풀이되는 이름을 두 번 적지 않게 해 줍니다.

이름 전체의 255바이트는 따로 정해 둔 한계입니다. 레이블의 글자만 세는 것이 아니라 길이 바이트와 끝의 0 까지 합쳐 셉니다.

한글 이름과 퓨니코드

영문자와 숫자는 ASCII(American Standard Code for Information Interchange, 미국 표준 정보 교환 부호)라는 부호 체계에 들어 있는 글자입니다. 도메인 이름에 쓸 수 있는 글자는 이 범위로 묶여 있어서 한글 이름을 그대로 적을 수 없습니다.

그렇다고 이름 체계를 통째로 뜯어고치면 이미 도는 기계가 전부 못 알아듣습니다. 그래서 유니코드 글자를 위 표에 들어가는 글자로 바꿔 적는 규칙을 따로 두었습니다. 이것이 퓨니코드입니다.

바꾼 결과는 되돌릴 수 있습니다. 바뀐 레이블은 xn-- 로 시작해서 한눈에 구별됩니다. 사람에게는 한글로 보여 주고, 오가는 것은 xn-- 로 시작하는 꼴입니다.

같은 이름이 두 꼴로 있는 셈입니다. 아래 그림은 어느 구간에서 어느 꼴이 쓰이는지를 보입니다.

flowchart TD
    U["사람이 적은 이름 · 한글"] --> P["퓨니코드로 바꿈"]
    P --> W["오가는 이름 · xn-- 로 시작"]
    W --> B["되돌려 한글로 보여 줌"]
    B --> U

여기서 딸려 오는 위험이 하나 있습니다. 한글과 라틴 문자처럼 문자 체계가 달라도 눈에 똑같아 보이는 글자가 있습니다. 그래서 남의 이름과 구별이 안 되는 이름을 지을 수 있습니다.

브라우저가 한글 이름을 그대로 보여 주지 않고 xn-- 로 시작하는 꼴을 주소창에 드러낼 때가 있는 것은 이 때문입니다.

빌려 쓰는 이름

도메인 이름은 사는 것이 아니라 기간을 정해 빌리는 것입니다. 빌려 주는 일은 도메인 등록기관이 맡습니다. 기간이 끝나기 전에 갱신해야 계속 쓸 수 있습니다.

갱신을 놓치면 이름이 풀려 남이 가져갑니다. 그 이름으로 오던 메일과 접속이 통째로 남의 손에 들어갑니다.

빌린 이름 아래는 마음대로 나눌 수 있습니다. example.com 하나를 빌렸다면 그 아래 api.example.com 이나 staging.example.com 은 등록 없이 스스로 만듭니다. 위임의 방향이 그렇기 때문입니다.

사내에서만 쓸 이름을 아무거나 지어 쓰는 것은 나중에 부딪힙니다. .internal 처럼 내부용으로 비워 둔 이름을 쓰지 않고 남이 쓸 수 있는 이름을 골라 두면, 그 이름이 실제로 등록되는 날 내부 요청이 바깥으로 나갑니다.

관련 항목

도메인 이름을 이루는 구성 요소

레이블 · FQDN · TLD · 서브도메인 · 루트 레이블 · 호스트 이름 · 도메인 이름 공간

이 이름을 주소로 바꾸는 체계

DNS · 리졸버 · 네임서버 · 존 · 리소스 레코드 · A 레코드 · CNAME · 재귀 질의 · TTL

이 이름과 나란히 쓰이는 다른 식별자

IP 주소 · URL · URI · 포트 번호 · 식별자 · SNI

이 이름을 정의하는 표준·문서

RFC 1034 · RFC 1035 · 국제화 도메인 이름 · 퓨니코드 · 공개 접미사 목록

이 이름을 등록·관리하는 주체와 도구

도메인 등록기관 · 도메인 등록 · ICANN · WHOIS · dig

이 이름을 노린 공격

도메인 하이재킹 · 타이포스쿼팅 · 호모그래프 공격 · DNS 스푸핑 · 서브도메인 탈취

다른 이름: domain name · 도메인명 · 도메인 네임