CNAME 레코드란?
CNAME(Canonical Name, 정식 이름) 레코드는 한 도메인 이름을 다른 도메인 이름의 별칭으로 만드는 DNS 레코드 유형입니다. A 레코드처럼 IP 주소를 직접 가리키는 대신 다른 도메인 이름을 가리키며, 그 이름이 다시 IP 주소로 해석됩니다.
CNAME 레코드의 작동 방식
CNAME을 설정하면:
www.example.com. IN CNAME example.com.
해석 과정:
1. 사용자가 www.example.com을 요청
2. DNS가 example.com을 가리키는 CNAME을 찾음
3. DNS가 example.com의 A 레코드를 다시 해석
4. 최종 IP 주소를 반환
이런 연쇄 해석 때문에 CNAME 대상은 최종적으로 A 또는 AAAA 레코드로 해석되어야 합니다.
CNAME의 일반적인 사용 사례
WWW 하위 도메인
www를 루트 도메인으로 연결합니다.
www IN CNAME example.com.
CDN 통합
도메인을 CDN 엔드포인트로 연결합니다.
cdn.example.com IN CNAME d111111abcdef8.cloudfront.net.
플랫폼 호스팅
호스팅 제공업체를 가리킵니다.
blog.example.com IN CNAME yoursite.wordpress.com.
shop.example.com IN CNAME shops.myshopify.com.
SaaS 애플리케이션
하위 도메인을 SaaS 플랫폼에 연결합니다.
docs.example.com IN CNAME example.gitbook.io.
status.example.com IN CNAME stats.uptimerobot.com.
CNAME과 A 레코드 비교
| 상황 | CNAME 사용 | A 레코드 사용 |
|---|---|---|
| 루트 도메인(@) | ❌ 허용되지 않음 | ✅ 필요 |
| 하위 도메인에서 고정 IP로 연결 | 둘 다 가능 | ✅ 직접 지정 |
| 하위 도메인에서 제공업체로 연결 | ✅ 권장 | ❌ IP가 바뀔 수 있음 |
| CDN 구성 | ✅ 일반적 | 경우에 따라 다름 |
| 로드 밸런싱 | ❌ 여러 개 사용 불가 | ✅ 여러 IP 가능 |
루트 도메인에서 CNAME을 사용할 수 없는 이유
DNS 사양(RFC 1034)은 같은 이름에 CNAME과 다른 레코드 유형이 함께 존재하는 것을 금지합니다. 루트 도메인에는 SOA와 NS 레코드가 필요하므로 CNAME을 사용할 수 없습니다.
루트 도메인 별칭을 위한 해결책:- ALIAS/ANAME 레코드: DNS 제공업체별 의사 레코드
- CNAME 플래트닝: Cloudflare 등에서 CNAME을 A 레코드로 해석
- www를 루트로 리디렉션: www에는 CNAME을 사용하고 애플리케이션에서 @로 리디렉션
CNAME 체인
CNAME은 다른 CNAME을 가리킬 수 있습니다.
blog.example.com → myblog.host.com
myblog.host.com → lb-1234.hosting.com
lb-1234.hosting.com → 203.0.113.50 (A record)
유효한 구성이지만 체인이 길어지면 지연이 늘어납니다. 대부분의 DNS 제공업체는 무한 루프를 막기 위해 체인 길이를 제한합니다.
CNAME 레코드 구성
기본 구문
subdomain IN CNAME target.domain.com.
중요: 대상 도메인 끝에 점(.)을 붙여 완전한 도메인 이름임을 표시합니다. 점이 없으면 일부 DNS 서버가 원본 도메인을 뒤에 덧붙입니다.
TTL 고려 사항
CNAME의 TTL은 변경 사항이 전파되는 속도에 영향을 줍니다.
www 300 IN CNAME example.com.
TTL이 낮으면(300초) 업데이트가 빠르고, 높으면 DNS 질의가 줄어듭니다.
CNAME 레코드 확인
dig 사용:dig www.example.com CNAME
; ANSWER SECTION:
www.example.com. 300 IN CNAME example.com.
전체 해석 추적:
dig +trace www.example.com
일반적인 CNAME 문제
루트 도메인의 CNAME
example.com IN CNAME other.com. ; INVALID
이는 이메일(MX 레코드)과 다른 서비스를 중단시킵니다.
다른 레코드와 CNAME 병용
blog.example.com IN CNAME host.com.
blog.example.com IN MX mail.host.com. ; INVALID
CNAME이 있는 이름에는 다른 레코드 유형을 둘 수 없습니다.
대상 레코드 누락
CNAME 대상이 해석되지 않으면 하위 도메인도 작동하지 않습니다. CNAME을 구성하기 전에 대상이 유효한지 확인하세요.
모범 사례
1. 타사 서비스에는 CNAME 사용: IP 변경을 제공업체가 관리하게 함
2. 깊은 체인 피하기: 홉마다 지연이 추가됨
3. 루트에 CNAME을 사용하지 않기: A 레코드 또는 ALIAS 사용
4. 끝의 점 포함: 완전한 대상 이름 보장
5. CNAME 대상 모니터링: 외부 변경이 사이트에 영향을 줄 수 있음