인터넷에서 우리가 입력하는 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-5678
104.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에는 여러 종류의 레코드가 있습니다.
레코드
설명
예시
A
IPv4 주소 연결
win-j.com -> 104.xxx.xxx.xxx
AAA
IPv6 주소 연결
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를 확인할 수 있습니다.
제가 win-j.com을 처음 구축했을 때도 가장 먼저 해야 했던 작업이 도메인 연결이었습니다.
과정은 다음과 같습니다.
도메인 구매
DNS에서 A레코드 설정
서버 IP연결
DNS 전파 대기
Nginx 서버 설정
SSL(Let's Encrypt) 발급
Django 서비스 연결
특히 DNS 변경 직후에는 바로 접속되지 않았는데, 이는 TTL과 DNS 전파 때문이었습니다. 설정이 잘못된 것이 아니라 전 세계 DNS 서버에 변경 사항이 반영되는 데 시간이 필요했던 것입니다.
또한 www.win-j.com과 win-j.com을 모두 사용하려면 적절한 DNS 레코드와 Nginx 리디렉션 설정이 함께 필요했습니다. DNS와 웹 서버 설정은 서로 연결되어 있다는 점을 직접 경험할 수 있었습니다.
DNS가 중요한 이유
DNS는 단순히 웹사이트 주소를 변환하는 기능을 넘어 다양한 인터넷 서비스의 기반이 됩니다.
예를 들어
웹사이트 접속
이메일 송수신
CDN 연결
SSL 인증서 발급
API 서버 연결
클라우드 서비스
모두 DNS 설정에 영향을 받습니다.
따라서 웹 서비스를 운영하거나 서버를 배포한다면 DNS는 반드시 이해해야 하는 기본 개념입니다.
마무리
DNS는 인터넷에서 가장 기본적이면서도 중요한 시스템입니다. 우리가 매일 입력하는 도메인 주소는 DNS를 통해 실제 서버의 IP 주소로 변환되고, 그 이후에 웹 서버(Nginx), 애플리케이션 서버(Gunicorn), Django까지 요청이 전달됩니다. 웹사이트를 직접 운영하거나 서버를 구축하다 보면 DNS 설정은 피할 수 없는 과정입니다. 도메인 연결, SSL 인증서 발급, 이메일 설정, CDN 연동 등 거의 모든 서비스가 DNS와 연결되어 있기 때문입니다. DNS의 동작 원리를 이해하면 도메인 연결 문제를 더 빠르게 해결할 수 있고, 웹 서비스의 전체 구조도 훨씬 명확하게 보이게 됩니다.
첫 댓글을 남겨보세요.