CNAME 레코드
CNAME 레코드는 한 이름을 다른 이름의 별칭으로 두는 DNS 레코드입니다. 같은 이름에 다른 레코드를 함께 둘 수 없고 에이펙스 도메인에는 쓸 수 없습니다.
작성
CNAME 레코드(Canonical Name record)는 한 이름을 다른 이름의 별칭으로 두는 DNS 레코드입니다. www.example.com에 shop.example-host.net 같은 값을 CNAME으로 넣으면, 리졸버는 www의 주소를 묻는 질의를 받았을 때 "실제 이름은 저쪽"이라는 답을 받고 그 이름을 다시 조회합니다. 값이 IP 주소인 A 레코드와 달리 값이 항상 도메인 이름입니다.
같은 이름에 다른 레코드를 둘 수 없다
CNAME에는 강한 제약이 하나 있습니다. 어떤 이름에 CNAME이 있으면 그 이름에는 다른 타입의 레코드가 존재할 수 없습니다. 별칭이라는 뜻 자체가 "이 이름에 대한 모든 정보는 다른 이름에 있다"이기 때문입니다.
| 설정 | 가능 여부 |
|---|---|
blog CNAME + blog A | 불가 |
blog CNAME + blog TXT | 불가 |
blog CNAME + blog MX | 불가 |
blog CNAME + shop A | 가능(이름이 다름) |
blog CNAME 하나만 | 가능 |
외부 서비스가 CNAME을 요구하는데 같은 이름에 소유권 확인용 TXT를 넣어야 하는 상황이 자주 생깁니다. 이때는 TXT를 _확인용.blog 처럼 한 단계 아래 이름에 두거나, CNAME 대신 A 레코드 방식을 쓰는 쪽으로 우회합니다. 외부 서비스 연결 사례는 외부 서비스 연결하기에 정리되어 있습니다.
에이펙스 도메인에 쓸 수 없는 이유
에이펙스 도메인(example.com 자체)에는 반드시 존재해야 하는 레코드가 있습니다. 어느 네임서버가 답하는지 알려 주는 NS 레코드와 존의 기준 정보를 담은 SOA 레코드입니다. 앞에서 본 규칙에 따라 CNAME이 있는 이름에는 다른 레코드가 올 수 없으므로, apex에 CNAME을 두면 NS와 SOA가 설 자리가 없어집니다. 그래서 apex에는 CNAME을 쓸 수 없습니다.
대신 일부 DNS 서비스가 ALIAS, ANAME, CNAME flattening 같은 이름으로 대체 기능을 제공합니다. 네임서버가 대상 이름을 미리 조회해 IP를 알아낸 뒤 apex에 대해 A 레코드처럼 응답하는 방식입니다. 표준 레코드 타입이 아니라 서비스별 구현이므로, 쓰는 DNS 서비스가 지원하는지 확인해야 합니다. 자세한 내용은 와일드카드와 ALIAS를 참고하세요.
조회가 한 단계 더 돈다
CNAME은 이름을 한 번 더 찾게 만듭니다. www.example.com 조회가 shop.example-host.net를 받으면, 리졸버는 그 이름의 A 레코드를 또 조회합니다. 캐시가 비어 있는 첫 접속에서는 왕복이 한 번 늘어나고, CNAME을 여러 단계로 이으면 그만큼 더 늘어납니다.
각 단계의 TTL이 따로 적용되는 것도 주의할 점입니다. 내 CNAME의 TTL을 짧게 두어도 대상 쪽 레코드의 TTL이 길면 전환이 빨라지지 않습니다.
MX가 CNAME을 가리키면 안 되는 이유
MX, NS, SRV 같은 레코드의 값에는 CNAME이 아닌 실제 이름이 와야 합니다. 메일 서버는 MX가 가리키는 이름을 그대로 쓰도록 정해져 있어서, 그 이름이 별칭이면 규격을 따르는 구현이 배달을 포기하거나 예측하기 어렵게 동작합니다. 메일 서비스가 안내하는 MX 값을 그대로 넣고, 그 값을 다시 CNAME으로 감싸지 않는 것이 원칙입니다. MX 레코드 설정은 MX 레코드 설정하기에서 다룹니다.
자주 묻는 질문
표준에 맞지 않는 설정이어서 DNS 콘솔이 거부하거나, 받아들여지더라도 메일과 SPF 같은 다른 레코드가 무시되어 장애가 납니다. apex에는 A 레코드를 쓰거나 ALIAS 같은 대체 기능을 사용해야 합니다.
CNAME은 DNS 단계에서 이름을 바꿔 주기만 하므로 브라우저 주소창의 주소는 그대로 유지됩니다. 도메인 전달은 웹서버가 HTTP 응답으로 다른 주소로 보내는 것이어서 주소창의 주소가 바뀝니다.
동작은 하지만 단계마다 조회가 한 번 더 늘어나 첫 접속이 느려집니다. 중간 단계가 사라지면 전체가 끊기기도 하므로 한 단계로 끝내는 편이 안전합니다.
관련 가이드
- DNS 레코드 설정 (A, AAAA, CNAME, MX, TXT, SRV)A, AAAA, CNAME, MX, TXT, SRV 레코드가 각각 무엇을 하고 어떤 값을 넣어야 하는지 예시로 정리했습니다. 루트 도메인에 CNAME을 걸 수 없는 이유와 TTL 기준도 함께 다룹니다.
- 외부 서비스에 도메인 연결하기Vercel, Netlify, GitHub Pages, Cloudflare, AWS 같은 외부 서비스에 회사 도메인을 연결하는 방법입니다. A와 CNAME 중 무엇을 쓸지, apex와 www를 어떻게 나눌지, 값을 어디서 복사해 어떻게 확인하는지 정리했습니다.
- 와일드카드 레코드와 ALIAS/ANAME와일드카드 레코드가 어떤 이름을 잡고 어떤 이름을 놓치는지, 명시적 레코드가 우선하는 규칙과 와일드카드의 위험을 정리했습니다. apex에 CNAME을 쓸 수 없는 제약을 ALIAS, ANAME, CNAME 플래트닝이 어떻게 우회하는지도 함께 다룹니다.