CNAME 레코드

차분한열정·2021년 1월 24일
2

CNAME에 관한 내용이 가물가물하여 다시 정리..

A 레코드

우리가 도메인 주소만으로 특정 서버와 통신할 수 있는 이유는
네임 서버(Name Server)의 존 파일(Zone file)에 존재하는 'A 레코드(record)'덕분이다.

A 레코드는 특정 도메인 네임에 대응되는 IP 주소를 나타내는 정보이다. 예를 들어,

...
example.com.        A      192.0.2.23
...

이런 식의 레코드는 example.com.이라는 도메인 네임에 해당하는 서버의 IP 주소가 192.0.2.23에 해당한다는 것을 나타낸다.

CNAME 레코드

그런데 이런 존 파일에 아래와 같은 CNAME 레코드를 추가할 수도 있다.

...
example.com.        A      192.0.2.23
www.example.com.    CNAME  example.com
...

이렇게 CNAME 레코드를 추가하면 어떻게 될까?
만약 도메인 네임 리졸버(Domain Name Resolver, 그 의미가 경우에 따라 다양하지만, 여기서는 '클라이언트 대신 Domain Name에 해당하는 IP 주소 값을 구해서 클라이언트에게 주려고 하는 서버'라고 생각합시다)가 www.example.com의 IP 주소를 알기 위해 최초로 DNS 쿼리를 보낸다고 가정하면,

  1. 네임 서버로부터 www.example.com의 Canonical Name이 example.com이라는 응답을 받게 되고
  2. 도메인 네임 리졸버는 다시 example.com에 대한 Domain Name Resolution 작업을 수행하고
  3. 192.0.2.23이라는 IP 주소를 구하게 된다.
    (*첫 DNS 쿼리인 경우 이렇고, 네임 서버의 캐시가 유지되는 기간에는 당연히 이런 작업을 반복할 필요가 없음)

이렇게 네임 서버에 CNAME 필드를 두게 되면, 이제 이 서비스는

(1) example.com으로도 접속할 수 있고
(2) www.example.com으로도 접속할 수 있게 된다.

원한다면 더 다양한 CNAME 레코드를 추가해서 원하는 도메인 네임을 연결할 수 있다. 그리고 CNAME 레코드를 사용하면 서버의 IP 주소가 바뀌어도 편하게 대응할 수 있다는 장점이 있다.

예를 들어, 이렇게 A 레코드만을 사용했다고 해보자.

...
example.com.   A   192.0.2.23
www.example.com.   IN   A   192.0.2.23
a.example.com.   IN   A   192.0.2.23
b.example.com.   IN   A   192.0.2.23
c.example.com.   IN   A   192.0.2.23
...

나중에 실제 서버의 아이피 주소를 바꿔야한다고 하면 모든 A 레코드에 있는 192.0.2.23를 바꿔주어야 한다. 하지만 CNAME을 사용했다면

...
example.com.   IN   A   192.0.2.23
www.example.com.   IN   CNAME   example.com
a.example.com.   IN   CNAME   example.com
b.example.com.   IN   CNAME   example.com
c.example.com.   IN   CNAME   example.com
...

A 레코드의 IP 주소 하나만 변경해주면 된다.

CNAME 레코드에서, Canonical이라는 단어는 '표준이 되는, 기준이 되는'이라는 뜻을 가진다. 따라서 www.example.com이 별명(alias)이고 example.com이 기준 이름이라는 점을 생각한다면 이해하기 쉽다.

profile
성장의 기쁨

0개의 댓글