CNAME 레코드란?
CNAME 레코드 (정규 이름 레코드)는 도메인 이름을 다른 도메인 이름으로 라우팅합니다. CNAME을 사용하면 서브도메인이 다른 도메인을 가리킬 수 있으므로 서버 관리를 단순화하고 여러 도메인에서 같은 콘텐츠를 공유할 수 있습니다.
CNAME 레코드 구조
blog.example.com. 3600 IN CNAME blogplatform.example.com.
│ │ │ │ │
│ │ │ └── 레코드 유형 └── 대상 (별칭)
│ │ └── 클래스
│ └── TTL
└── 도메인 이름
CNAME 작동 방식
CNAME은 "별칭" 또는 "리다이렉션"처럼 작동합니다:
1. 사용자가 blog.example.com 방문
2. DNS가 CNAME 레코드 조회
3. CNAME이 blogplatform.example.com을 가리킴
4. DNS가 blogplatform.example.com의 A 레코드 조회
5. A 레코드가 IP 주소 반환 (예: 192.0.2.5)
6. 브라우저가 그 IP에 연결
실제 CNAME 예제
CDN 설정
# 주 도메인
example.com. A 192.0.2.1
# CDN을 통해 라우팅
www.example.com. CNAME d111111abcdef8.cloudfront.net.
블로그 플랫폼
example.com. A 192.0.2.1 (메인 사이트)
blog.example.com. CNAME myblog.platform.com. (Medium, Substack 등)
서브서비스
api.example.com. CNAME api-prod.internal.example.com.
webhooks.example.com. CNAME webhook-handler.internal.example.com.
mobile.example.com. CNAME mobile-app.example.com.
CNAME 제약 조건
CNAME이 루트에서 작동하지 않음
# 작동 안 함
@ CNAME other-domain.com.
example.com. CNAME other-domain.com. (허용 안 됨)
# 작동함
www.example.com. CNAME other-domain.com. (okay)
blog.example.com. CNAME other-domain.com. (okay)
이것은 DNS 사양의 기술적 제약입니다. 루트 도메인은 A 또는 AAAA 레코드와 NS, MX, TXT 같은 다른 레코드를 가져야 합니다.
단일 레코드당 하나의 CNAME
# 불가능
subdomain.example.com. CNAME target1.com.
subdomain.example.com. CNAME target2.com. (두 번째 CNAME 허용 안 됨)
CNAME 체인 피하기
# 작동하지만 느림
subdomain.example.com. CNAME alias1.com.
alias1.com. CNAME alias2.com.
alias2.com. CNAME actual.com.
actual.com. A 192.0.2.1
# 더 나음 - 직접 가리킴
subdomain.example.com. CNAME actual.com.
일반적인 CNAME 사용
| 사용 사례 | 예제 |
|---|---|
| CDN | www CNAME cdn.example.com |
| 클라우드 호스팅 | blog CNAME myapp.heroku.com |
| 이메일 서비스 | email CNAME sendgrid.example.com |
| 분석 | analytics CNAME go.analytics.com |
| 호스팅 | api CNAME api-host.example.com |
CNAME과 다른 레코드
CNAME vs A 레코드
# A 레코드: 직접 IP 주소
www.example.com. A 192.0.2.1
# CNAME: 다른 도메인을 가리킴
www.example.com. CNAME webhost.example.com.
# 그러면 webhost를 A 레코드로 해석
webhost.example.com. A 192.0.2.1
CNAME과 MX 레코드
MX 레코드가 있는 도메인에는 CNAME을 추가할 수 없습니다:
# 불가능
example.com. MX 10 mail.example.com.
example.com. CNAME other.com. (허용 안 됨 - MX와 충돌)
CNAME 설정
호스팅 제어판
1. DNS 관리 대시보드 열기
2. "레코드 추가" 클릭
3. 입력:
- 이름: blog (또는 www)
- 유형: CNAME
- 값: myblog.platform.com.
- TTL: 3600
4. 저장
명령줄 (BIND)
blog IN CNAME myblog.platform.com.
www IN CNAME cdn.example.com.
api IN CNAME api-server.example.com.
CNAME 조회
# dig 사용
dig www.example.com CNAME
# nslookup 사용
nslookup -type=CNAME www.example.com
# 따라가기
dig +trace www.example.com
CNAME과 HTTPS
CNAME으로 라우팅할 때 SSL 인증서가 대상 도메인과 일치해야 합니다:
www.example.com -> CNAME -> cdn.provider.com
└─ SSL: www.example.com
└─ SSL: *.provider.com (또는 cdn.provider.com)
모범 사례
1. CNAME 체인 피하기: 직접 가리키기 선호
2. 루트에 A 레코드 사용: www와 @ 일치 시키기
3. 명확한 명명: 대상이 명백한 CNAME 이름
4. TTL 고려: CDN의 경우 더 낮은 TTL 사용
5. 테스트: CNAME 추가 후 모든 서비스 확인
CNAME은 복잡한 DNS 설정을 관리하기 위한 강력한 도구이지만 제약 조건을 이해하는 것이 중요합니다.