DNS 레코드 유형: A, CNAME, ALIAS/ANAME
웹사이트에 연결하고 싶은 커스텀(custom) 도메인 네임을 구매해놓고 DNS 설정이 생각처럼 잘 안되서 당혹스러우셨던 경험이 있으신가요? 아무래도 DNS 레코드에 대한 아무런 사전 지식이 없이 호스팅 서비스에서 시키는데로 따라하기가 쉽지 않은 것 같습니다.
그래서 이번 포스팅에서는 커스텀(custom) 도메인을 웹사이트에 연결할 때 알아두면 큰 도움이 되는 DNS 레코드의 기초적인 부분에 대해서 다뤄보려고 합니다.
DNS 레코드란?
커스텀 도메인 추가하려고 웹사이트 호스팅 서비스가 제공하는 문서 페이지를 열어 보면 대게 A 레코드가 어쩌고 CNAME 레코드가 어쩌고 ALIAS 레코드가 어쩌고라고 나오는 경우가 많은데요. 이 게 무슨 말인지 이해하려면 우선 DNS 레코드가 무엇인지에 대해서 간단히 짚고 넘어가야될 것 같습니다.
DNS 레코드(record)는 DNS(도메인 네임 시스템)에서 도메인 네임(domain name)과 IP 주소(IP address) 또는 도메인 네임 간에 맵핑 정보를 담고 있는데요. 사용자가 브라우저 주소창에 어떤 도메인 네임을 입력해서 접속하려고 하면, DNS 서버는 해당 도메인 네임에 대한 DNS 레코드를 찾아서 최종적으로 어떤 IP 주소로 해당 사용자를 접속시켜야하는지를 파악하게 됩니다.
루트 도메인 vs. 서브 도메인
DNS 레코드에는 A
유형, CNAME
유형, ALIAS
유형 등 여러 가지 유형이 있는데요. 각 DNS 레코드 유형의 특징을 이해하려면 우선 루트 도메인 네임과 서브 도메인 네임을 구분할 줄 알아야합니다.
Apex Domain, Base Domain, Bare Domain, Naked Domain과 같이 꽤 여러 가지 이름으로 불리는 루트 도메인은 google.com
, daum.net
과 같은 형태를 띠는데요.
우리가 도메인 등록 서비스(domain registrar)로 부터 도메인 네임을 구매할 때 이 단위로 구매를 하게 되죠.
반면에 서브 도메인은 루트 도메인 앞에 추가로 글자가 더 붙여서 해당 도메인의 일부분을 나타나게 되는데요.
예를 들어, 국내 포털 사이트인 네이버는 news.naver.com
서브 도메인을 통해 제공하는 뉴스 서비스를 제공하고, dict.naver.com
서브 도메인을 통해 사전 서비스를 제공하고 있죠.
또 다른 예로 온라인 백과사전 사이트인 위키피디아의 영문 사이트의 서브 도메인은 en.wikipedia.org
이고 한글 사이트의 서브 도메인은 en.wikipedia.org
입니다.
여기서 햇갈릴 수 있는 부분은 우리가 가장 흔하게 볼 수 있는 www.
로 시작하는 도메인도 엄밀히 얘기해서 서브 도메인으로 분류된다는 것입니다.
따라서 www.google.com
과 www.wikipedia.org
는 모두 서브 도메인입니다.
웹사이트에 도메인 네임을 연결할 때 우리는 루트 도메인을 사용하고 싶은지 아니면 서브 도메인을 사용하고 싶은지, 그리고 서브 도메인을 사용하소 싶다면 그 서브 도메인의 이름이 무엇인지 정확히 알고 있어야합니다. 왜냐하면 이것이 어떤 레코드 유형을 사용할 지에 큰 영향을 주기 때문입니다.
A 레코드 유형
A 레코드는 Address 레코드라고도 하며 가장 기본이 되는 DNS 레코드 유형인데요. A 레코드는 도메인 이름을 특정 IP 주소로 직접적으로 맵핑할 수 있습니다.
예를 들어, A 레코드를 사용하면 example.com
이라는 도메인 네임이 3개의 IP 주소 93.184.215.34
, 93.184.216.34
, 93.184.217.34
를 가리키게 할 수 있습니다.
example.com ---> 93.184.215.34
example.com ---> 93.184.216.34
example.com ---> 93.184.217.34
도메인 이름을 IP 주소에 바로 맵핑한다는 측면에서 A 레코드는 직관적으로 이해하기가 쉽지만 서비스의 IP 주소를 바꾸려면 DNS 설정도 다시 해줘야 한다는 부담이 있습니다. 갱신된 DNS 레코드가 전 세계에 있는 DNS 서버로 모두 전파되는데는 보통 시간이 꽤 걸리며 클라우드 인프라를 사용할 경우 IP가 좀 더 자주 바뀔 수 있기 때문입니다.
A 레코드는 서브 도메인과 루트 도메인에 상대로 모두 사용할 수 있지만 일반적으로 루트 도메인를 IP 주소로 맵핑하기 위해서 더 많이 사용되는 것 같습니다. 서브 도메인을 맵핑할 때는 다음에 소개해드릴 CNAME 레코드가 더 유리한 경우가 많기 때문입니다.
참고로 국내 도메인 등록 서비스에서는 A 레코드 생성하는 작업을 “호스트 관리”라고 하는 경우도 있는데요. 말 그대로 구매한 도메인 네임을 호스트(host) IP를 연결해주는 작업이기 때문입니다.
CNAME 레코드 유형
CNAME 레코드는 Canonical Name 레코드라고도 하는데요. CNAME 레코드는 도메인 이름을 또 다른 도메인 이름으로 맵핑할 수 있습니다.
예를 들어, CNAME 레코드를 사용하면 www.example1.com
이라는 도메인 네임이 www.example2.com
이라는 도메인 네임을 가리키게 할 수 있습니다.
www.example1.com ---> www.example2.com
여기서 중요한 부분은 DNS 서버가 어떤 도메인 네임에 대한 CNAME 레코드로 최종 IP를 알아내려면 중간 도메인 네임에 대한 DNS 레코드를 찾아봐야 한다는 것입니다. 즉, CNAME 레코드는 A 레코드에 의존하게 되어 있습니다.
예를 들어, DNS 서버에 다음과 같이 DNS 레코드가 설정되어 있다고 가정해보겠습니다.
CNAME 레코드: www.example1.com ---> www.example2.com
CNAME 레코드: www.example2.com ---> www.example3.com
A 레코드: www.example3.com ---> 93.184.216.34
DNS 서버는 www.example1.com
이 최종적으로 93.184.216.34
으로 맵핑된다는 것을 알아내기 위해서 www.example2.com
와 www.example3.com
이 어떻게 맵핑이 되는지도 찾아봐야 할 것입니다.
그러므로 CNAME 레코드를 사용하면 DNS 서버에서 IP 주소를 알아내는데 최소한 2번 이상의 검색이 필요하게 됩니다. 대신에 A 레코드 대비 서버 IP 변경에 영향을 덜 받는 유연한 DNS 설정이 가능해질 것입니다.
CNAME 레코드는 커다란 제약사항이 하나 있는데요. 바로 서브 도메인을 상대로만 사용할 수 있으면 루트 도메인을 상대로는 사용할 수 없다는 것입니다.
www.example1.com ---> www.example2.com ✅
example1.com ---> www.example2.com ❌
참고로 국내 도메인 등록 서비스에서는 CNAME 레코드 유형 설정을 “포워딩 관리” 또는 “도메인 별명 관리”라고 많이 부르는 것 같습니다. 구매한 도메인 네임을 또 다른 도메인 네임으로 그대로 포워딩(forwarding)해주는 작업이라고 볼 수 있기 때문입니다.
ALIAS/ANAME 레코드
ALIAS 레코드 혹은 ANAME 레코드는 A 레코드와 CNAME 레코드의 장점만 모아놨다고 볼 수 있는데요. 이 레코드 유형을 사용하면 CNAME 레코드에서는 불가능하던 루트 도메인 이름을 또 다른 도메인 이름으로 맵핑할 수 있습니다.
CNAME: example.com ---> www.example.com ❌
ALIAS: example.com ---> www.example.com ✅
참고로 ALIAS/ANAME 레코드는 Flattened CNAME 레코드라고도 하는데요. 그 이유는 마치 CNAME 레코드와 A 레코드가 묘하게 합쳐진 효과를 내기 때문입니다.
flattening 전: example.com ---> www.example.com ---> 93.184.216.34
flattening 후: example.com ---> 93.184.216.34
이처럼 ALIAS/ANAME 레코드 유형은 매우 강력하지만 모든 도메인 등록 서비스에서 지원하지는 않습니다.
전형적인 DNS 설정
어떤 웹사이트 호스팅 서비스를 쓰시느냐에 따라 약간씩 다르겠지만 사실 많은 호스팅 서비스들이 비슷한 방식으로 커스텀 도메인을 지원하고 있는데요.
바로 CNAME 레코드를 이용하여 www
서브 도메인을 호스팅 서비스의 기본 도메인를 가리키게 하고, ALIAS 레코드로 루트 도메인을 호스팅 서비스에서 리다이렉트를 담당하고 있는 로드 밸런서를 가리키게 하는 것입니다.
CNAME: www.custom-domain.com ---> 호스팅 서비스 기본 도메인
ALIAS: custom-domain.com ---> 호스팅 서비스 로드 밸런서 (리다이렉트 담당)
이렇게 해주면 사용자가 www
서브 도메인으로 접속하면 해당 서비스에 호스팅된 웹사이트로 바로 접속이 될 것이고요.
(해당 호스팅 서비스의 기본 도메인이 최종적으로 어떤 IP로 맵핑되는지 우리가 알 바가 아닙니다. 그 것은 호스팅 서비스가 관리해야하는 DNS 레코드이죠.)
만약에 사용자가 루트 도메인으로 접속하면 해당 호스팅 서비스에 사전에 등록된 커스텀 도메인인지 확인 후에 www
서브 도메인으로 리다이렉트(redirect) 시켜줄 것입니다.
따라서 사용자의 브라우저는 301 Moved Permanently
또는 308 Permanent Redirect
응답을 받고, Location
헤더에 명시된 www
으로 시작하는 URL을 대신 열어주게 됩니다.
규모가 적어서 서브 도메인이 굳이 필요가 없는 웹사이트라도 이런 방식으로 루트 도메인과 www
서브 도메인에 대해서 둘 다 DNS 설정하는 것이 권장되는데요.
왜냐하면 사용자가 브라우저 주소창에 www
를 치지 않았다고 해서 웹사이트에 접속이 안 된다면 많은 사용자를 잃을 수 있기 때문입니다.
뿐만 아니라 루트 도메인을 www
서브 도메인으로 리다이렉트하지 않으면 웹사이트 쿠키(Cookie)가 모든 서브 도메인에 적용되어 다른 서브 도메인도 사용한다면 문제가 될 소지가 있습니다.
Netlify 설정
해외에서 아주 유명한 호스팅 서비스인 Netlify도 위와 같은 DNS 설정 패턴을 따르고 있습니다.
Netlify에서 호스팅하고 있는 웹사이트에 example.com
이라는 도메인 네임에 연결하고 싶다면
다음과 같이 CNAME 레코드를 통해서 Netlify에서 기본적으로 제공하는 도메인 네임을 가리키게하고, ALIAS 레코드를 통해서 루트 도메인 네임은 Netlify에서 리다이렉트를 담당하고 있는 로드밸런서의 도메인 네임을 가리키게 해주면 됩니다.
CNAME: www.example.com ---> example.netlify.app
ALIAS: example.com ---> apex-loadbalancer.netlify.com
이렇게 해주면 브라우저에서 example.com
를 열든 www.example.com
를 열든 Netlify에서 호스팅하고 있는 동일한 웹사이트에 접속되게 될 것입니다.
만약에 도메인 등록 서비스에서 ALIAS/ANAME 레코드를 지원하지 않는다면 차선책으로 A 레코드를 통해서 Netlify에서 리다이렉트를 담당하고 있는 로드밸러서의 IP 이름을 가리키게 해주면 되겠습니다.
CNAME: www.example.com ---> example.netlify.app
A : example.com ---> 75.2.60.5
Vercel 설정
Netlify 못지 않게 유명한 호스팅 서비스인 Vercel은 살짝 다른 방식으로 DNS 설정을 하는데요. ALIAS 레코드 대신에 A 레코드를 사용하여 루트 도메인 네임을 IP 주소에 직접적으로 연결해줘야합니다.
CNAME: www.example.com ---> cname.vercel-dns.com
A : example.com ---> 76.76.21.21
Vercel은 프로젝트와 무관하게 항상 동일하게 DNS 설정을 할 수 있어서 좀 더 쉽게 느껴지는 것 같습니다.
마치면서
이상으로 웹사이트에 도메인 네임을 연결하기 위해서 알아두면 좋은 DNS 레코드 관련 지식을 살펴보았습니다. 구매하신 도메인 네임에 대한 DNS 설정을 하실 때 도움이 되었으면 좋겠습니다.