Seapy's Blog


zone apex / root domain / naked domain / bare domain?

"zone apex", "root domain", "naked domain", "bare domain"(이하 루트도메인으로 언급)은 모두 동일한 의미로 seapy.com 같이 도메인 앞에 www.seapy.com, blog.seapy.com 와 달리 서브도메인이 없는 것을 말합니다. 문제는 DNS RFC(RFC1033) 정의에 루트 도메인은 A 레코드 타입으로만 지정이 가능하다고 명시 되어 있다는것에서 시작됩니다.

CNAME 레코드 문제

DNS 에는 많은 레코드 타입이 있는데 이중 A 레코드는 IP 주소만 가능하며, CNAME 레코드에는 다른 웹사이트 주소나 A 레코드를 지정할수 있습니다. heroku의 경우 서버의 IP가 아닌 자체로 제공하는 URL을 할당해주는데 이와 같은 서비스에 도메인을 연결하려면 CNAME 레코드를 사용해서 연결합니다.(대부분의 PaaS의 경우 이런식으로 IP대신 URL을 제공)

heroku에 웹 어플리케이션을 실행한경우 appname.herokuapp.com 이라는 주소로 접근하게 되는데 이를 seapy.com 도메인으로 연결하려면 DNS RFC정의에 의해 불가능합니다.(blog.seapy.com으로는 CNAME 레코드를 이용해 가능)

# 지정 가능. www.seapy.com 으로 접속하면 appname.herokuapp.com 서버로 요청
www.seapy.com CNAME appname.herokuapp.com
# 지정 불가능. DNS RFC 정의상 정상
seapy.com CNAME appname.herokuapp.com

루트 도메인에 CNAME 비슷한 기능 적용

루트 도메인의 CNAME 문제를 해결하는 방법은 대략 다음과 같습니다.

  1. www.seapy.com 으로 들어오는 URL을 seapy.com 으로 리다이렉트
  2. 루트 도메인에도 CNAME과 같은 기능을 해주는 DNS 서비스 사용

1번 방법은 도메인의 URL이 변경되서 마음에 들지 않는 방법이고 2번이 현실적으로 가능 좋은 대안이라고 생각되지만 DNS RFC정의에서 불가능 하다고 한부분으로 Godaddy, AWS Route53 등 유명한 DNS 서비스들에서도 불가능합니다.(AWS Route53의 경우 외부 서버들에는 불가능하지만 EC2 서버에 대해서는 가능)

하지만 일부 DNS 서비스들에서는 이를 가능하게 해주는 기능을 제공해주는데 제가 파악한 바로는 다음과 같습니다.

  • DNSimple - ALIAS 기능 - 무료 플랜 X, 최저 $8/월
  • DNS Made Easy - ANAME 기능 - 무료 플랜 X, 최저 $29.95/년
  • easyDNS - ANAME 기능 - 무료 플랜 X, 최저 $15/년
  • CloudFlare - CNAME 기능 - 잘모르겠음
  • PointDNS - ALIAS 기능 - 무료 플랜 O(도메인 1개)

무료로 가능한곳은 PointDNS로 heroku 애드온으로도 제공해주며 사이트도 깔끔해 추천합니다. seapy.com역시 PointDNS를 이용하고 있습니다.

루트도메인을 사용해야되나?

보기 좋다는것때문에 저는 주로 루트도메인을 사용하는 편입니다. 그런데 정의상 CNAME도 불가능하고 안쓰는게 맞는다는것 같기도 하고 그래서 궁금해서 글로벌 서비스들의 도메인을 살펴봤습니다.

몇개 생각나는곳들 위주로 살펴봤는데 다들 다르지만 한가지 확실한거는 섞어서 사용하지 않고 한쪽으로 리다이렉트 한다는것입니다.

WWW or bare domain? 이글까지 읽고 보니 루트 도메인보다는 www를 붙여주는게 좋겠네요. seapy.com은 어차피 블로그로만 사용할거라서 그냥 계속 이대로 가려고 합니다.

참고 정보