Route 53에서 CNAME 등록이 안 될 때 - ALIAS 레코드 이해하기
Route 53에서 CNAME 등록 시 UnknownError가 발생하는 경우
Route 53에서 도메인을 구입하고 바로 CNAME 레코드를 등록하려고 하면 다음과 같은 에러가 뜰 때가 있다.
오류 발생
나중에 다시 시도하십시오.
(UnknownError)
이 에러가 발생하는 주된 이유는 호스팅 영역(Hosted Zone) 생성 지연 때문이다.
Route 53에서 도메인을 구입하면 자동으로 호스팅 영역이 생성되는데, 이 과정이 완료되기까지 몇 분에서 최대 몇 시간이 걸릴 수 있다. 도메인 등록과 호스팅 영역 활성화가 비동기로 처리되기 때문에 발생하는 현상이다.
해결 방법
- 15~30분 정도 기다린 후 다시 시도한다 - 대부분 이걸로 해결된다
- Route 53 콘솔에서 Registered domains 메뉴로 가서 도메인 상태가
Domain registration successful인지 확인한다 - Hosted zones에서 해당 도메인의 호스팅 영역이 있는지, NS/SOA 레코드가 생성되어 있는지 확인한다
AWS CLI로 호스팅 영역 상태를 확인하려면 다음 명령어를 사용하면 된다.
aws route53 get-hosted-zone --id <ZONE_ID> --profile <PROFILE_NAME>
루트 도메인에 CNAME을 사용할 수 없는 이유
호스팅 영역이 정상적으로 생성되었는데도 CNAME 등록이 안 되는 경우가 있다. 바로 **루트 도메인(apex domain)**에 CNAME을 설정하려고 할 때다.
DNS 표준에 따르면 루트 도메인에는 반드시 NS(네임서버)와 SOA 레코드가 존재해야 한다. 그런데 CNAME 레코드는 같은 이름의 다른 레코드와 공존할 수 없다는 DNS 규칙이 있다. 따라서 루트 도메인에는 CNAME을 사용할 수 없다.
# 불가능 - 루트 도메인에 CNAME
example.com CNAME some-service.pages.dev
# 가능 - 서브도메인에 CNAME
www.example.com CNAME some-service.pages.dev
ALIAS 레코드란
이 문제를 해결하기 위해 Route 53은 ALIAS 레코드라는 확장 기능을 제공한다. ALIAS 레코드는 내부적으로 A 레코드처럼 동작하지만, 대상 도메인의 IP를 자동으로 조회해서 반환해준다.
example.com ALIAS(A) → 대상 서비스의 IP를 자동으로 반환
ALIAS 레코드의 장점은 NS, SOA 레코드와 공존할 수 있어서 루트 도메인에도 사용할 수 있다는 점이다.
ALIAS 레코드의 제한사항
문제는 Route 53의 ALIAS 레코드가 AWS 리소스만 대상으로 지정할 수 있다는 점이다. CloudFront, ELB, S3, API Gateway 같은 AWS 서비스는 ALIAS로 연결할 수 있지만, Cloudflare Pages나 Vercel 같은 외부 서비스는 ALIAS 대상으로 지정할 수 없다.
외부 서비스를 루트 도메인에 연결하는 방법
Cloudflare Pages 같은 외부 서비스를 루트 도메인에 연결하려면 다음 방법들을 고려해볼 수 있다.
1. DNS를 Cloudflare로 이전
Cloudflare는 CNAME Flattening이라는 기능을 제공한다. 이 기능은 루트 도메인에 설정된 CNAME을 자동으로 A 레코드처럼 변환해서 응답해준다. Cloudflare DNS를 사용하면 루트 도메인에도 CNAME과 유사한 설정이 가능하다.
2. www 서브도메인 사용 + 루트 도메인 리다이렉트
Route 53을 그대로 사용하면서 외부 서비스를 연결하려면 이 방법이 가장 현실적이다.
www.example.com에 CNAME 레코드를 설정해서 외부 서비스를 연결한다example.com(루트 도메인)은 S3 + CloudFront를 이용해www.example.com으로 리다이렉트 설정한다
이 방식은 설정이 좀 복잡하지만, Route 53과 외부 서비스를 함께 사용할 수 있는 방법이다.
정리
| 상황 | 해결 방법 |
|---|---|
| CNAME 등록 시 UnknownError | 호스팅 영역 생성 완료까지 대기 (15~30분) |
| 루트 도메인에 AWS 서비스 연결 | ALIAS 레코드 사용 |
| 루트 도메인에 외부 서비스 연결 | DNS를 Cloudflare로 이전하거나, www로 리다이렉트 설정 |
DNS 설정은 단순해 보이지만 이런 제약사항들 때문에 의외로 삽질하는 경우가 많다. 특히 외부 서비스를 사용할 때는 해당 서비스의 문서에서 권장하는 DNS 설정 방법을 먼저 확인하는 게 좋다.