본문 바로가기
Old Posts/Linux

[Linux] DNS에서 'CNAME'과 'A 레코드(A Record)'의 차이

by A6K 2021. 2. 16.

블로그의 2차 주소를 관리할 때, 가비아나 후이즈 같은 DNS를 이용한다. DNS에서 커스텀 도메인을 사용할 때, 서브 도메인을 등록하기 위해서 CNAME과 A 레코드 같은 정보를 관리 페이지에서 등록하게 된다. CNAME과 A 레코드 모두 서브 도메인을 등록하기 위해 필요한 정보인데 정확히 어떤 차이가 있는지 알아 둘 필요가 있다.

DNS (Domain Name System)

우선 DNS(Domain Name System)부터 알아야한다. 인터넷을 구성하고 있는 서버들은 IP 주소가 할당되어 있다. IPv4의 경우 192.168.0.1 같은 숫자로 구성되어 있다. 이 IP 주소를 알면 특정 서버에 접속할 수 있다.

하지만 IP 주소는 의미가 없는 유니크 값에 불과하다. 때문에 사용자들이 외우기 힘들다. 대신 naver.com 같은 문자열로 서버 주소를 표현하면 외우기 쉽다. 이를 위해서는 중간에 naver.com이라는 문자열을 ip 주소로 변환해주는 서비스가 필요하다. 이런 서비스를 DNS 서비스라고 한다.

DNS 서비스를 제공하는 DNS 서버에는 도메인 주소와 IP 주소의 쌍(Pair)이 저장된다.

예를 들어,

이런 형태의 데이터들이 DNS 서버에 저장된다. 사용자가 "naver.com"이라는 주소를 입력하면 DNS 서버에서 "naver.com"의 IP 주소를 찾아 "192.168.0.1"이라는 IP 주소를 리턴한다. 사용자의 웹 브라우저는 이 IP 주소로 찾아가 HTML 문서를 받아오게 된다.

DNS 서비스가 저장하고 있는 위와 같은 테이블에서 하나의 행(Row) 정보를 '레코드(Record)'라고 부르며, 저장되는 타입에 따라 'A 레코드(A Record)'와 'CNAME'으로 구분할 수 있다.

A 레코드 (A Record)

'A 레코드'는 도메인 주소 문자열과 서버의 IP 주소를 직접 매핑시키는 방법이다. 위 테이블에서 볼 수 있는 레코드들은 도메인 주소들을 직접 IP 주소와 매핑시키므로 모두 A 레코드에 해당된다.

사용자가 A 레코드에 해당하는 도메인 주소에 대한 해석을 요청하면 DNS 서버는 IP 주소를 리턴해준다.

CNAME (Canonical Name)

CNAME은 Canonical Name의 약자로 도메인 주소를 또 다른 도메인 주소로 매핑 시키는 형태의 DNS 레코드 타입이다.

DNS 서버에 이런 테이블이 저장되어 있다고 생각해보자. "dev.myhome.com"이라는 주소의 해석을 요청하면 DNS 서버는 172.17.0.3이라는 값을 응답으로 준다. A 레코드에 대한 해석 방법이다.

만약 "develop.myhome.com"을 요청한다면 DNS 서버는 "dev.myhome.com"이라는 주소를 리턴한다. 그런 다음 사용자는 다시 "dev.myhome.com"이라는 주소에 대한 해석을 요청하고, 172.17.0.3이라는 값을 리턴해준다.

develop.myhome.com과 dev.myhome.com 정보가 매핑되어 있는 행(Row)을 CNAME 타입이라고 한다. 즉, 도메인 주소에 대한 심볼릭 링크를 붙여주는 정보라고 할 수 있다.

출처 : pixabay

A 레코드 vs. CNAME 장단점

A 레코드 타입과 CNAME 타입의 장단점은 명확하다.

A 레코드의 장점은 한번의 요청으로 찾아갈 서버의 IP 주소를 한번에 알 수 있다는 점이다. 반면 단점은 IP 주소가 자주 바뀌는 환경에서는 조금 번거로울 수 있다는 점이다. 예를 들어, 172.17.0.3 서버에서 myhome.com, dev.myhome.com, news.myhome.com 등 여러개의 서브 도메인들을 처리하고 있다고하자. 각 서브 도메인들을 A 레코드로만 매핑시켰다면, 172.17.0.3라는 IP 주소가 172.17.0.4라는 주소로 변경되었다면 모든 A 레코드를 찾아서 변경해야 한다.

CNAME 레코드의 장점은 IP 주소가 자주 변경되는 환경에서 유연하게 대응할 수 있다는 점이다. 예를 들어, dev.myhome.com, news.myhome.com 도메인 정보를 myhome.com이라는 주소로 매핑시키는 CNAME 레코드로 저장하고, myhome.com이라는 주소를 172.17.0.3 이라는 IP 주소로 매핑시키는 A 레코드로 저장해 놨다면, 서버의 IP 주소가 바뀌었을 때 myhome.com의 A 레코드 정보만 변경시키면 된다.

CNAME 레코드의 단점은 실제 IP 주소를 얻을 때까지 여러번 DNS 정보를 요청해야 한다는 점이다. DNS 정보를 해석하는데 여러번 요청이 필요하다는 점은 경우에 따라서 성능저하를 유발할 수 있다.

댓글