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.com은example.com의 MX 레코드를 사용
- 상속되는 설정
DNS 레코드 타입
A 레코드
A 레코드는 도메인 이름을 IPv4 주소로 매핑하는 레코드이다. 가장 기본적이고 많이 사용되는 레코드 타입이다.

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

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

실제 구성 예시
기본 구성
| 도메인 | 레코드 타입 | 값 | 설명 |
|---|---|---|---|
| example.com | A | 192.168.1.1 | 메인 도메인 |
| www.example.com | CNAME | example.com | www 서브도메인 |
| blog.example.com | CNAME | example.com | 블로그 서브도메인 |
복잡한 구성
| 도메인 | 레코드 타입 | 값 | 설명 |
|---|---|---|---|
| example.com | A | 192.168.1.1 | 메인 도메인 |
| dev.example.com | CNAME | staging.example.com | 개발 환경 |
| staging.example.com | CNAME | prod.example.com | 스테이징 환경 |
| prod.example.com | A | 192.168.1.2 | 프로덕션 환경 |
CNAME 사용 시 주의사항
- CNAME은 항상 A 레코드로 끝나야 한다.
- CNAME이 가리키는 최종 도메인은 반드시 A 레코드를 가져야 한다.
- 하지만 이 A 레코드는 다른 DNS 서버에 있을 수 있다.
- 예:
blog.example.com이example.com을 가리키고,example.com의 A 레코드는 다른 DNS 서버에 있을 수 있다.
- CNAME과 다른 레코드 타입은 동시에 존재할 수 없다.
- CNAME이 설정된 도메인은 다른 모든 레코드 타입을 대체한다.
- 이는 DNS 표준에서 정의한 제약사항으로, 도메인 이름의 일관성을 유지하기 위함이다.
- 예:
example.com에 CNAME이 있다면, 같은 도메인에 A 레코드나 MX 레코드 등을 추가할 수 없다.
- CNAME 체인은 너무 길게 만들지 않는 것이 좋다.
- 체인이 길어질수록 DNS 조회 시간이 길어지고 성능에 영향을 줄 수 있다.
- 일반적으로 3-4단계 이내로 유지하는 것이 권장된다.
- CNAME은 루트 도메인(@)에 사용할 수 없다.
- 루트 도메인은 다른 중요한 레코드 타입(MX, NS 등)이 필요하기 때문이다.
- 대신 서브도메인에 CNAME을 사용해야 한다.
실제 사용 사례
1. CDN 사용 시

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

마이그레이션 구체적 사례
- 서버 이전 시나리오
- 기존 서버:
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의 제약사항을 잘 이해하고 사용해야 한다.