DNS 레코드 설정 (A, AAAA, CNAME, MX, TXT, SRV)

A, AAAA, CNAME, MX, TXT, SRV 레코드가 각각 무엇을 하고 어떤 값을 넣어야 하는지 예시로 정리했습니다. 루트 도메인에 CNAME을 걸 수 없는 이유와 TTL 기준도 함께 다룹니다.

작성 최종 수정

DNS 레코드는 도메인 이름을 실제 목적지로 연결하는 항목입니다. 웹 서버로 연결하려면 A(IPv4) 또는 AAAA(IPv6), 다른 도메인 이름을 가리키려면 CNAME, 메일을 받으려면 MX, 소유권 확인과 메일 인증에는 TXT, 특정 프로토콜의 서버와 포트를 알리려면 SRV를 씁니다. 레코드는 네임서버 안에 저장되므로, 도메인을 등록한 곳이 아니라 지금 그 도메인이 위임된 네임서버의 DNS 화면에서 설정합니다.

레토 네임서버(selene.ns.leto.kr, nyx.ns.leto.kr)를 쓰는 도메인이라면 대시보드 도메인 상세의 DNS 및 포워딩 탭에 있는 DNS 레코드 카드에서 추가합니다. 외부 DNS 호스팅을 쓴다면 그 서비스의 콘솔에서 같은 값을 넣습니다. 어느 쪽이든 입력하는 값의 의미는 동일합니다.

레코드의 공통 구조

어느 콘솔이든 레코드 하나는 아래 네 가지로 구성됩니다. 항목 이름만 조금씩 다릅니다.

항목다른 표기의미
이름호스트, Host, Name, 서브도메인어떤 이름에 대한 규칙인가. 루트 도메인은 보통 @, 서브도메인은 www 처럼 앞부분만 입력
종류타입, TypeA, AAAA, CNAME, MX, TXT, SRV 등
값대상, Value, Content, Data실제 목적지. 종류마다 형식이 다름
TTL유효시간리졸버가 이 답을 몇 초 동안 캐시할지

MX와 SRV에는 우선순위 같은 추가 필드가 있습니다. 이름 칸에 전체 도메인을 넣는 콘솔도 있고 앞부분만 넣는 콘솔도 있으니, 저장한 뒤 목록에 표시된 이름이 의도한 이름인지 한 번 확인하세요.

레토 대시보드에서 입력할 때

DNS 레코드 카드에서 레코드를 추가하면 아래 입력 규칙이 적용됩니다.

  • 타입 드롭다운은 A, AAAA, CNAME, MX, NS, SRV, TXT 일곱 가지입니다
  • TTL은 1분, 5분, 30분, 1시간, 24시간 다섯 개 중에서 고릅니다. 기본값은 5분이고 임의의 초를 직접 적을 수는 없습니다
  • 우선순위 칸은 MX와 SRV를 고를 때만 나타납니다
  • CNAME을 고르면 CNAME Flatten 체크박스가 나오고, 이것을 켜면 루트 도메인에도 CNAME을 둘 수 있습니다
  • 이름 칸에는 @(루트), www 같은 일반 이름, _dmarc 처럼 언더스코어로 시작하는 라벨을 넣을 수 있습니다. 와일드카드는 *.이름 형태로만 통과하고 * 하나만 넣으면 저장되지 않습니다
  • 도메인 이전이 진행 중이면 레코드 편집이 막힙니다

추가, 수정, 삭제가 성공하면 "DNS 전파까지 최대 5분이 소요될 수 있습니다" 라는 문구가 저장 직후 알림으로 한 번 지나갑니다. 화면에 계속 떠 있는 안내가 아니므로, 전파를 기다리는 기준으로는 각 레코드의 TTL을 보는 편이 정확합니다. 네임서버 자체를 바꿀 때의 48시간 안내와는 다른 값이고, 두 값이 다른 이유는 레코드 변경은 권한 네임서버 안에서 끝나지만 네임서버 변경은 상위 레지스트리의 위임 정보를 바꾸기 때문입니다.

타입 목록에 CAA는 없습니다. 레토 DNS는 CAA 레코드를 지원하지 않으므로, 인증서를 발급할 수 있는 인증기관을 CAA로 제한해야 한다면 그 도메인의 존을 CAA를 지원하는 외부 DNS 호스팅으로 옮기고 네임서버 변경하기로 위임한 뒤 그쪽 콘솔에서 넣어야 합니다. 레코드의 문법과 점검 순서는 CAA 레코드로 인증서 발급 제한하기에 정리되어 있습니다.

종류별 용도와 예시

A 레코드는 이름을 IPv4 주소로 연결합니다. 웹 서버를 가리키는 가장 기본적인 레코드입니다.

example.co.kr.        3600   IN   A       203.0.113.10
www.example.co.kr.    3600   IN   A       203.0.113.10

같은 이름에 A를 여러 개 두면 리졸버가 번갈아 답을 주므로 간단한 부하 분산이 됩니다. 다만 장애가 난 서버를 자동으로 빼 주지는 않습니다.

AAAA 레코드는 이름을 IPv6 주소로 연결합니다. 형식은 A와 같고 값만 IPv6입니다. A와 AAAA를 함께 두면 클라이언트가 자기 환경에 맞는 쪽을 고릅니다. 서버가 실제로 IPv6로 서비스하지 않는데 AAAA만 남아 있으면 일부 사용자에게만 접속이 실패하므로, 서버를 옮길 때 AAAA를 함께 정리해야 합니다.

example.co.kr.        3600   IN   AAAA    2001:db8::10

CNAME 레코드는 이름을 다른 도메인 이름으로 연결합니다. 외부 서비스가 "이 주소를 가리키세요"라고 이름을 알려 줄 때 씁니다.

shop.example.co.kr.   3600   IN   CNAME   shops.saas-provider.example.
blog.example.co.kr.   3600   IN   CNAME   hosting.blog-provider.example.

CNAME이 걸린 이름에는 다른 레코드를 함께 둘 수 없습니다. 예를 들어 mail.example.co.kr 에 CNAME이 있으면 같은 이름에 TXT를 추가할 수 없습니다.

MX 레코드는 이 도메인 주소로 온 메일을 어느 서버가 받을지 지정합니다. 값 앞의 숫자는 우선순위이고, 숫자가 작을수록 먼저 시도합니다.

example.co.kr.        3600   IN   MX      1  aspmx.l.google.com.
example.co.kr.        3600   IN   MX      5  alt1.aspmx.l.google.com.
example.co.kr.        3600   IN   MX      5  alt2.aspmx.l.google.com.

MX 값에는 IP 주소가 아니라 도메인 이름을 넣어야 하고, 그 이름은 A 또는 AAAA로 풀려야 합니다. 우선순위가 같은 값이 여럿이면 분산됩니다. 메일 서비스가 안내한 값을 그대로 넣는 것이 원칙이고, 옛 MX를 남겨 두면 일부 메일이 옛 서버로 갑니다.

TXT 레코드는 임의의 문자열을 담습니다. 실무에서는 두 가지 용도가 대부분입니다. 외부 서비스의 도메인 소유권 확인, 그리고 메일 인증(SPF, DKIM, DMARC)입니다.

example.co.kr.            3600   IN   TXT   "v=spf1 include:_spf.google.com ~all"
_dmarc.example.co.kr.     3600   IN   TXT   "v=DMARC1; p=none; rua=mailto:dmarc@example.co.kr"
example.co.kr.            3600   IN   TXT   "google-site-verification=abcd1234"

한 이름에 TXT를 여러 개 둘 수 있지만, SPF 용도의 TXT는 반드시 하나여야 합니다. 두 개 이상이면 검증이 실패합니다. 설정 방법은 SPF, DKIM, DMARC 설정에 자세히 정리해 두었습니다.

SRV 레코드는 특정 서비스가 어느 호스트의 어느 포트에서 동작하는지 알립니다. 이름 자체가 _서비스._프로토콜.도메인 형식이라는 점이 특징입니다. 값은 우선순위, 가중치, 포트, 대상 호스트 순서입니다.

_sip._tcp.example.co.kr.       3600   IN   SRV   10  60  5060  sip.example.co.kr.
_autodiscover._tcp.example.co.kr.  3600  IN  SRV  0  0  443  autodiscover.example.co.kr.

대상 호스트도 A 또는 AAAA로 풀려야 하고, IP를 직접 넣을 수 없습니다. 그룹웨어나 통신 서비스가 안내할 때만 쓰면 되고, 일반적인 웹사이트 운영에는 필요 없습니다.

NS 레코드는 특정 서브도메인의 권한을 다른 네임서버에 넘길 때 씁니다. 도메인 전체의 네임서버를 바꾸는 일은 레코드가 아니라 상위 레지스트리의 위임 정보를 고치는 작업이므로 네임서버 변경하기에서 다룹니다.

어느 인증기관이 이 도메인의 SSL 인증서를 발급할 수 있는지 제한하는 CAA 레코드는 인터넷 표준 레코드이지만 레토 DNS에서는 지원하지 않습니다. 인증서 발급이 이유 없이 거부된다면 그 도메인의 존을 실제로 운영하는 네임서버에서 CAA 응답을 먼저 확인하세요. 관련 내용은 SSL 인증서에 있습니다.

루트 도메인에 CNAME을 걸 수 없는 이유

www.example.co.kr 에는 CNAME을 걸 수 있는데 example.co.kr 에는 걸 수 없는 이유는 DNS 표준 때문입니다. CNAME은 "이 이름에 대한 모든 질의를 저쪽으로 넘긴다"는 의미라서, 같은 이름에 다른 레코드가 있으면 모순이 생깁니다. 그런데 루트 도메인(존 정점, apex)에는 SOA와 NS 레코드가 반드시 존재합니다. 따라서 루트에는 CNAME을 둘 수 없습니다.

우회 방법은 세 가지입니다.

  • A 레코드로 IP를 직접 넣습니다. 서비스가 IP를 바꾸면 우리도 따라 바꿔야 하므로, 고정 IP를 주는 서비스에만 적합합니다.
  • 네임서버가 대신 대상 이름을 조회해 A 레코드처럼 답해 주는 기능을 씁니다. 레토 대시보드에서는 CNAME을 고른 뒤 CNAME Flatten 을 켜는 방식이고, 다른 DNS 호스팅에서는 ALIAS 나 ANAME 으로 불립니다.
  • 루트는 리다이렉트 전용으로 두고 실제 서비스는 www에 둡니다. 루트에 A를 하나 두고 그 서버가 www로 301 리다이렉트하게 하는 방식입니다.

TTL을 정하는 기준

TTL은 리졸버가 답을 몇 초 동안 캐시할지 정하는 값입니다. 짧으면 변경이 빨리 반영되지만 질의가 늘고, 길면 캐시 효율이 좋지만 되돌리기가 느려집니다.

상황권장 TTL이유
평상시 운영1시간에서 24시간질의를 줄이고 응답을 안정적으로 유지
변경 예정일 1~2일 전1분 또는 5분전환과 롤백을 몇 분 안에 끝내기 위해
전환 직후 검증 기간낮춘 값 유지문제가 생기면 즉시 되돌릴 수 있게
값이 거의 안 바뀌는 MX, TXT1시간 이상자주 바뀌지 않고 캐시 이득이 큼

레토 대시보드는 1분, 5분, 30분, 1시간, 24시간 다섯 개 중에서 고르게 되어 있으므로 위 표의 값을 그대로 옮기면 됩니다. 외부 DNS 호스팅에서 초 단위로 직접 적는 경우라면 1시간은 3600초, 24시간은 86400초입니다.

핵심은 낮추는 시점입니다. TTL을 낮추는 변경 자체도 기존 TTL만큼 걸려서 퍼집니다. 기존 값이 24시간이었다면 낮춘 뒤 최소 24시간을 기다려야 실제로 짧은 TTL이 적용됩니다. 자세한 전환 순서는 운영 중인 서비스 무중단 이관을 참고하세요.

값을 넣은 뒤에는 전파를 기다리기 전에 해당 네임서버에 직접 물어 값이 들어갔는지부터 확인합니다.

dig @ns1.example-dns.com A example.co.kr +noall +answer
dig MX example.co.kr +short
dig TXT _dmarc.example.co.kr +short

레코드 종류 요약표

종류무엇을 가리키나값의 형식여러 개 가능루트에 사용
AIPv4 주소203.0.113.10가능가능
AAAAIPv6 주소2001:db8::10가능가능
CNAME다른 도메인 이름target.example.불가 (단독으로만)플래트닝을 켤 때만
MX메일 수신 서버우선순위 + 호스트 이름가능가능
TXT임의 문자열따옴표로 감싼 문자열가능 (SPF는 하나만)가능
SRV서비스의 호스트와 포트우선순위 가중치 포트 호스트가능이름 형식이 정해짐
NS서브도메인의 권한 위임네임서버 이름가능 (최소 2개)네임서버 변경으로 처리

이 일곱 가지가 레토 DNS에서 고를 수 있는 전부입니다. CAA, ALIAS, ANAME, PTR, TLSA 처럼 목록에 없는 타입은 레토 DNS에 넣을 수 없고, 루트 도메인을 다른 이름으로 연결하는 용도라면 CNAME 플래트닝이 ALIAS 역할을 대신합니다. CAA가 반드시 필요한 도메인은 존을 CAA를 지원하는 외부 DNS 호스팅에 두어야 합니다.

레코드를 넣을 네임서버 자체를 바꾸려면 네임서버 변경하기를 먼저 읽어 주세요. 외부 서비스를 도메인에 붙이는 구체적인 경우는 외부 서비스 연결하기에 정리되어 있습니다.

자주 묻는 질문

가리킬 대상이 IP 주소면 A(IPv6는 AAAA), 다른 도메인 이름이면 CNAME입니다. 외부 서비스가 이름을 알려 주면 CNAME이 관리하기 편합니다. 그쪽에서 IP를 바꿔도 우리 설정을 고칠 필요가 없기 때문입니다. 단, 루트 도메인에는 CNAME을 쓸 수 없습니다.

DNS 표준상 CNAME은 같은 이름에 다른 레코드가 있으면 함께 존재할 수 없습니다. 루트에는 SOA와 NS가 반드시 있으므로 CNAME을 둘 수 없습니다. 레토 대시보드에서는 CNAME을 고른 뒤 CNAME Flatten 을 켜면 루트 도메인에도 쓸 수 있고, 다른 DNS 호스팅이라면 A 레코드로 IP를 직접 넣거나 그 업체의 ALIAS 계열 기능을 씁니다.

평상시에는 1시간에서 24시간이 무난합니다. 값을 바꿀 예정이라면 최소 기존 TTL만큼 앞서 5분 이하로 낮춰 두고, 변경이 안정되면 다시 올립니다. 레토 대시보드는 1분, 5분, 30분, 1시간, 24시간 다섯 개 중에서 고르게 되어 있고 기본값은 5분입니다.

먼저 dig로 해당 네임서버에 직접 질의해 값이 들어가 있는지 확인하세요. 값이 있는데 보이지 않는다면 캐시 문제이므로 TTL만큼 기다리면 됩니다. 값 자체가 없다면 도메인이 그 네임서버를 쓰고 있는지, 즉 위임이 맞는지부터 확인해야 합니다.

A, AAAA, MX, TXT, SRV는 같은 이름에 여러 개를 둘 수 있습니다. CNAME만 예외로 한 이름에 하나만, 그리고 다른 레코드 없이 단독으로 존재해야 합니다. 다만 SPF 용도의 TXT는 여러 개면 검증이 실패하므로 하나로 합쳐야 합니다.

관련 가이드