DNS의 원리 이해하기
DNS의 원리 이해하기

DNS란? 도메인이 IP를 찾는 원리 쉽게 이해하기 

인터넷에서 우리가 입력하는 Naver.com, Google.com 또는 현재 사이트 win-j.com 같은 주소는 어떻게 실제 서버를 찾아가는걸까요? 그 핵심은 DNS(Domain Name System)가 있습니다.  웹 사이트를 직접 배포하거나 Nginx, SSL을 설정하다 보면 DNS는 반드시 이해해야 하는 개념 입니다. 저 역시 몇 개의 개인 도메인win-j.com을 직접 운영하면서 도메인 연결, SSL 인증서 발급, Nginx 설정을 진행하면서 DNS가 제대로 설정되지 않아 접속이 되지 않거나 SSL 인증이 실패하는 경험이 여러 번 있었습니다. 이번 글에서는 DNS의 동작 원리를 초보자도 이해할 수 있도록 쉽게 설명해보겠습니다. 



DNS란? 

DNS(Domain Name System)는 도메인 주소를 실제 서버의 IP주소로 변환해주는 시스템 입니다.

예를 들어 우리가 브라우저에 https://win-j.com을 입력한다고 해서 컴퓨터가 바로 서버를 찾을 수 있는 것은 아닙니다. 실제로 인터넷은 211.xxx.xxx.xxx , 104.xxx.xxx.xxx 과 같은 IP주소를 이용해 통신합니다.

win-j.com

DNS 조회 

104.xxx.xxx.xxx

웹 서버 접속 

쉽게 말하면 DNS는 인터넷의 전화번호부라고 생각하면 이해하기 쉽습니다. 우리가 휴대폰에 친구의 연락처를 저장할 때 이름과 전화번호를 함께 저장하는 것처럼, 인터넷에서도 도메인(Domain)IP 주소(IP Address) 가 연결되어 있습니다. 예를 들어 휴대폰에서 '홍길동' 이라는 이름을 눌러 전화를 걸면 실제로는 저장되어 있는 전화번호로 연결됩니다. 마찬가지로 브라우저에서 win-j.com을 입력하면 DNS가 해당 도메인에 연결된 IP주소를 찾아 실제 서버로 연결해 줍니다.


왜 DNS가 필요한 걸까?

만약 DNS가 없다면 우리는 사이트마다 IP를 외워야 합니다.


예를 들어, 

https://104.xxx.xxx.xxx

처럼 숫자로 이루어진 IP 주소를 입력하여 웹사이트에 접속해야 합니다. 하지만 복잡한 IP주소 대신 

https://win-j.com

처럼 의미 있는 도메인 이름을 사용하면 훨씬 기억하기 쉽고 편리합니다. 앞서 살펴본 휴대폰 연락처의 예시와 비교하면 더욱 쉽게 이해할 수 있습니다. 누군가에게 전화를 걸 때마다 010-1234-5678과 같은 전화번호를 직접 외워서 입력하는 것보다, 연락처에 저장된 이름을 검색해 전화를 거는 방식이 훨씬 간편합니다. 인터넷도 이와 비슷합니다. 

휴대폰 연락처인터넷 DNS
홍길동win-j.com

010-1234-5678104.xxx.xxx.xxx
전화 연결웹 서버 연결

휴대폰에서는 사람이 기억하기 쉬운 이름을 선택하면 저장된 전화번호를 이용해 통화가 연결됩니다. 

인터넷에서는 사람이 기억하기 쉬운 도메인을 입력하면 연결된 IP주소를 찾아 웹 서버로 접속할 수 있도록 도와줍니다. 

즉, 사람은 도메인을 기억하고 컴퓨터는 IP주소를 이용해 통신합니다. DNS는 그 사이에서 도메인과 IP주소를 연결해 주는 역할입니다. 


도메인과 IP의 관계 

예를 들어 도메인 win-j.com은 실제로는 104.xxx.xxx.xxx 같은 서버 주소와 연결되고 사용자는 win-j.com 를 입력하지만 DNS가 내부적으로 win-j.com = 104.xxx.xxx.xxx로 변환해 줍니다. 


DNS 조회 과정 

브라우저에서 win-j.com을 입력하면 아래와 같은 순서로 동작합니다. 


1. 브라우저 캐시 확인

 먼저 브라우저가 "예전에 접속했던 주소인가?"를 확인합니다. 이미 저장되어 있다면 DNS서버에 물어보지 않습니다. 


2. 운영체제 DNS 캐시 확인

 브라우저에 없다면 Windows나 MacOS가 저장하고 있는 DNS 캐시를 확인합니다.


3. 공유기 또는 ISP DNS 서버 조회 

 캐시가 없다면 인터넷 제공업체(ISP)의 DNS 서버에 질의 합니다. 

 예를 들면 

KT
SK Broadband
LG U+
Google DNS (8.8.8.8)
Cloudflare DNS (1.1.1.1)

등이 있습니다 .

4. 루트 DNS 서버 조회 

 ISP DNS 서버도 모른다면 루트 DNS 서버에 문의 합니다. "win-j.com 어디에 있어?"

5. .com 네임서버 조회 

 루트 서버는 ".com 담당 서버에 물어봐"라고 알려줍니다. 

6. 권한 있는 네임서버 조회 

 마지막으로 win-j.com의 권한이 있는 DNS 서버에서 104.xxx.xxx.xxx를 반환합니다. 

7. 웹 서버 접속

 브라우저는 이제 실제 서버 IP를 알게 되었으므로 HTTP 또는 HTTPS로 요청을 보냅니다. 

win-j.com처럼 Django의 프로젝트 웹사이트에서는

웹 요청응답 흐름도
웹 요청/응답 흐름도

사진과 같은 과정입니다. 


DNS Cache란?

DNS조회는 생각보다 많은 과정을 거칩니다. 매번 조회하면 느려질 수 있기 때문에 과정을 일정 시간 저장합니다. 이를 DNS Cache라고 합니다 예를 들어 win-j.com -> 104.xxx.xxx.xxx을 조회했다면 다음 접속에서는 다시 DNS서버에 문의하지 않고도 빠르게 웹 사이트에 접속이 가능합니다. 


TTL(Time To Live)이란? 

DNS 캐시를 얼마 동안 유지할 것인지 결정하는 값입니다. 

예를 들어 TTL = 3600 이라면 1시간 동안 캐시 사용이라는 의미입니다. TTL 시간이 지나면 다시 DNS 조회를 수행합니다. 

구분장점단점
TTL을 짧게 설정 하면?IP 변경 시 빠르게 반영됨DNS조회가 자주 발생
TTL을 길게 설정 하면?DNS 조회 감소
속도 향상
IP 변경 시 반영이 늦음



DNS 레코드 종류 

DNS에는 여러 종류의 레코드가 있습니다.

레코드설명예시
AIPv4 주소 연결win-j.com -> 104.xxx.xxx.xxx
AAAIPv6 주소 연결IPv6 서버 
CNAME다른 도메인 별칭www -> win-j.com
MX메일 서버Gmail, 네이버 메일
TXT인증 및 설정 정보SPF, DKIM, google Search Console
NS네임서버 정보도메인 DNS 서버 지정

실무에서는 A, CNAME, MX, TXT를 가장 많이 사용합니다.


nslookup 사용법 

windows에서 명령 프롬프트를 열고 nslookup win-j.com을 입력하면 현재 DNS가 반환하는 IP를 확인할 수 있습니다. 

예시

Server:

8.8.8.8

Name:

win-j.com

Address:

104.xxx.xxx.xxx

DNS 연결 상태를 확인할 때 가장 많이 사용하는 명령어입니다. 


Ping과 DNS는 무엇이 다를까?

명령어역할
nslookupDNS 조회
ping 서버 통신 확인

예를 들어

nslookup win-j.com

DNS가 IP를 알려줍니다.

반면

ping win-j.com

실제로 해당 서버까지 통신이 가능한지 확인합니다.

DNS 조회

↓

IP 확인

↓

ping 통신

순서라고 생각하면 됩니다


제가 win-j.com을 처음 구축했을 때도 가장 먼저 해야 했던 작업이 도메인 연결이었습니다.

과정은 다음과 같습니다.
  1. 도메인 구매
  2. DNS에서 A레코드 설정
  3. 서버 IP연결 
  4. DNS 전파 대기 
  5. Nginx 서버 설정
  6. SSL(Let's Encrypt) 발급
  7. Django 서비스 연결 

특히 DNS 변경 직후에는 바로 접속되지 않았는데, 이는 TTL과 DNS 전파 때문이었습니다. 설정이 잘못된 것이 아니라 전 세계 DNS 서버에 변경 사항이 반영되는 데 시간이 필요했던 것입니다.

또한 www.win-j.comwin-j.com을 모두 사용하려면 적절한 DNS 레코드와 Nginx 리디렉션 설정이 함께 필요했습니다. DNS와 웹 서버 설정은 서로 연결되어 있다는 점을 직접 경험할 수 있었습니다.


DNS가 중요한 이유

DNS는 단순히 웹사이트 주소를 변환하는 기능을 넘어 다양한 인터넷 서비스의 기반이 됩니다.

예를 들어

  • 웹사이트 접속
  • 이메일 송수신
  • CDN 연결
  • SSL 인증서 발급
  • API 서버 연결
  • 클라우드 서비스

모두 DNS 설정에 영향을 받습니다. 

따라서 웹 서비스를 운영하거나 서버를 배포한다면 DNS는 반드시 이해해야 하는 기본 개념입니다. 


마무리

DNS는 인터넷에서 가장 기본적이면서도 중요한 시스템입니다. 우리가 매일 입력하는 도메인 주소는 DNS를 통해 실제 서버의 IP 주소로 변환되고, 그 이후에 웹 서버(Nginx), 애플리케이션 서버(Gunicorn), Django까지 요청이 전달됩니다. 웹사이트를 직접 운영하거나 서버를 구축하다 보면 DNS 설정은 피할 수 없는 과정입니다. 도메인 연결, SSL 인증서 발급, 이메일 설정, CDN 연동 등 거의 모든 서비스가 DNS와 연결되어 있기 때문입니다. DNS의 동작 원리를 이해하면 도메인 연결 문제를 더 빠르게 해결할 수 있고, 웹 서비스의 전체 구조도 훨씬 명확하게 보이게 됩니다.