DNS와 레코드 타입 이해하기

DNS란?

DNS(Domain Name System)는 도메인 이름을 IP 주소로 변환하는 시스템이다. 사람이 이해하기 쉬운 도메인 이름을 컴퓨터가 이해하는 IP 주소로 변환해주는 역할을 한다.

도메인 구조

루트 도메인과 서브도메인

  • 루트 도메인: 도메인의 최상위 레벨을 의미한다. 예를 들어 example.com에서 example.com이 루트 도메인이다.
  • 서브도메인: 루트 도메인의 하위 도메인을 의미한다. www.example.com, blog.example.com 등이 서브도메인이다.
  • 서브도메인은 루트 도메인에 종속되며, 루트 도메인의 설정을 상속받는다.
    • 상속되는 설정
      • DNS 서버 설정 (NS 레코드)
      • 메일 서버 설정 (MX 레코드)
      • SPF, DKIM, DMARC 등의 이메일 인증 설정
      • DNSSEC 설정
    • 상속 방식
      • 서브도메인에서 별도로 설정하지 않은 경우 루트 도메인의 설정을 사용
      • 서브도메인에서 별도 설정을 하면 해당 설정이 우선 적용
      • 예: example.com의 MX 레코드가 설정되어 있고, mail.example.com에서 별도 MX 레코드를 설정하지 않으면 mail.example.comexample.com의 MX 레코드를 사용

DNS 레코드 타입

A 레코드

A 레코드는 도메인 이름을 IPv4 주소로 매핑하는 레코드이다. 가장 기본적이고 많이 사용되는 레코드 타입이다.

0042-01

CNAME 레코드

CNAME(Canonical Name) 레코드는 도메인 이름의 별칭을 만드는 레코드이다. 하나의 도메인을 다른 도메인으로 연결할 때 사용한다.

0042-02

CNAME 체이닝

CNAME 레코드는 체이닝이 가능하다. 하지만 다음과 같은 제약사항이 있다.

  • CNAME 체인은 반드시 A 레코드로 끝나야 한다.
  • CNAME 체인은 무한히 길어질 수 없다.
    • 일반적으로 DNS 서버는 CNAME 체인의 최대 길이를 제한한다.
    • 대부분의 DNS 서버는 8~10단계의 CNAME 체인을 허용한다.
    • 체인이 너무 길면 DNS 조회 시간이 길어지고 성능에 영향을 줄 수 있다.
  • CNAME과 다른 레코드 타입은 동시에 존재할 수 없다.
    • 예를 들어, example.com에 CNAME 레코드가 있다면, 같은 도메인에 A 레코드나 MX 레코드 등을 추가할 수 없다.
    • 이는 DNS 표준에서 정의한 제약사항으로, 도메인 이름의 일관성을 유지하기 위함이다.
    • CNAME이 설정된 도메인은 다른 모든 레코드 타입을 대체한다.

CNAME 체이닝 예시

0042-03

실제 구성 예시

기본 구성

도메인레코드 타입설명
example.comA192.168.1.1메인 도메인
www.example.comCNAMEexample.comwww 서브도메인
blog.example.comCNAMEexample.com블로그 서브도메인

복잡한 구성

도메인레코드 타입설명
example.comA192.168.1.1메인 도메인
dev.example.comCNAMEstaging.example.com개발 환경
staging.example.comCNAMEprod.example.com스테이징 환경
prod.example.comA192.168.1.2프로덕션 환경

CNAME 사용 시 주의사항

  • CNAME은 항상 A 레코드로 끝나야 한다.
    • CNAME이 가리키는 최종 도메인은 반드시 A 레코드를 가져야 한다.
    • 하지만 이 A 레코드는 다른 DNS 서버에 있을 수 있다.
    • 예: blog.example.comexample.com을 가리키고, example.com의 A 레코드는 다른 DNS 서버에 있을 수 있다.
  • CNAME과 다른 레코드 타입은 동시에 존재할 수 없다.
    • CNAME이 설정된 도메인은 다른 모든 레코드 타입을 대체한다.
    • 이는 DNS 표준에서 정의한 제약사항으로, 도메인 이름의 일관성을 유지하기 위함이다.
    • 예: example.com에 CNAME이 있다면, 같은 도메인에 A 레코드나 MX 레코드 등을 추가할 수 없다.
  • CNAME 체인은 너무 길게 만들지 않는 것이 좋다.
    • 체인이 길어질수록 DNS 조회 시간이 길어지고 성능에 영향을 줄 수 있다.
    • 일반적으로 3-4단계 이내로 유지하는 것이 권장된다.
  • CNAME은 루트 도메인(@)에 사용할 수 없다.
    • 루트 도메인은 다른 중요한 레코드 타입(MX, NS 등)이 필요하기 때문이다.
    • 대신 서브도메인에 CNAME을 사용해야 한다.

실제 사용 사례

1. CDN 사용 시

0042-04

2. 서비스 마이그레이션 시

0042-05

마이그레이션 구체적 사례

  • 서버 이전 시나리오
    • 기존 서버: old.example.com (192.168.1.1)
    • 새 서버: new.example.com (192.168.1.2)
  • 마이그레이션 과정
    • 새 서버에 서비스 배포 및 테스트
    • old.example.com에 CNAME 설정하여 new.example.com으로 연결
    • 트래픽이 자연스럽게 새 서버로 전환됨
    • 문제 발생 시 CNAME 설정을 제거하여 즉시 이전 서버로 복구 가능
  • 클라우드 마이그레이션
    • 온프레미스: onprem.example.com (192.168.1.1)
    • 클라우드: cloud.example.com (10.0.0.1)
    • 마이그레이션 과정
      • 클라우드 환경에 서비스 배포
      • onprem.example.com에 CNAME 설정하여 cloud.example.com으로 연결
      • 점진적으로 트래픽을 클라우드로 전환
      • 문제 발생 시 즉시 온프레미스로 복구 가능

결론

DNS 레코드는 웹 서비스의 기본 인프라를 구성하는 중요한 요소이다. 특히 CNAME은 도메인 관리와 서비스 운영에 있어 매우 유용한 도구이다. 하지만 CNAME의 제약사항을 잘 이해하고 사용해야 한다.