DNS(Domain Name System)
DNS(Domain Name System)
DNS(Domain Name System)
DNS(Domain Name System)란?
DNS(Domain Name System)는 도메인 이름(예: google.com)을 IP 주소(예: 142.250.190.78)로 변환하는 시스템이다. 인터넷에서 웹사이트에 접속할 때 사람이 기억하기 쉬운 도메인 주소를 입력하면, DNS가 해당 도메인의 실제 서버 IP 주소를 찾아준다.
DNS가 필요한 이유
- IP 주소 대신 도메인을 사용할 수 있음 → 사용자가
172.217.161.206대신google.com을 입력하면 DNS가 자동으로 변환해준다. - IP 주소 변경 시에도 동일한 도메인 유지 가능 → 서버 IP가 바뀌어도 DNS 레코드만 변경하면 된다.
- 분산 구조로 빠른 응답 가능 → 계층적으로 분산되어 있어서 빠르고 안정적인 네트워크 제공한다.
DNS 동작 과정
- 사용자가 웹사이트 접속 시도s
- 브라우저에서 www.google.com을 입력하고 접속
- 브라우저가 캐시(Cache) 확인
- 먼저 로컬(컴퓨터, 브라우저, OS)에 저장된 DNS 캐시를 확인
- 캐시에 IP 주소가 있다면 바로 해당 IP로 연결 (DNS 요청 불필요)
- 없다면 다음 단계 진행
- Hosts 파일 확인
- 운영체제(OS)에는 hosts 파일이라는 것이 있으며, 여기에 특정 도메인의 IP 주소를 직접 지정할 수 있다.
- hosts 파일을 확인하여 해당 도메인의 IP 주소가 등록되어 있다면, DNS 조회 없이 해당 IP로 연결된다.
- 일반적으로 hosts 파일은 다음 경로에 있다.
1 2
Windows: C:\Windows\System32\drivers\etc\hosts Mac/Linux: /etc/hosts
MAC으로 호스트 파일 등록해보기
1 2 3 4 5 6 7 8 9 10 11
// 상황 : isGoogle.com을 치면 내 깃허브 아이피 주소를 반환하게 설정할 예정 1. 내 깃허브 아이피 주소를 확인하기 - ping https://imkh817.github.io를 입력하여 IP 확인 - 결과 : PING https://imkh817.github.io (185.199.109.153): 56 data bytes 2. sudo nano /etc/hosts 입력하여 hosts 파일 수정 준비 3. 185.199.109.153 isGoogle.com 을 입력 후 ctrl+X -> Y -> Enter 입력 4. 반영되도록 DNS 캐시 삭제 - sudo dscacheutil -flushcache 입력 - sudo killall -HUP mDNSResponder 입력 5. 이제 isGoogle.com으로 ping 보내 확인해보기 - 결과 : PING isgoogle.com (185.199.109.153): 56 data bytes
- 개발 환경에서 특정 도메인을 로컬 서버로 연결하거나, 특정 사이트 접속을 차단하는 용도로 사용 가능하다.
- 로컬 DNS 서버(Recursive Resolver) 조회
- hosts 파일에도 없으면, 보통 인터넷 제공업체(ISP)의 DNS 서버에 요청한다.
- 해당 DNS 서버도 캐시를 가지고 있으며, 캐시에 있으면 바로 응답한다.
- 없다면 DNS 계층 구조를 따라 추가 요청 수행한다.
- 계층적 네임 서버 조회 (DNS 계층 구조)
- 만약 로컬 DNS 서버에도 캐시가 없다면, 다음 순서대로 DNS 서버를 조회한다.
- (1) 루트 네임 서버(Root DNS)
- 최상위 DNS 서버 (전 세계에 13개 존재, .으로 표현됨)
- 사용자가 요청한 도메인의 최상위 도메인(TLD, .com, .org, .kr 등) 담당 서버를 알려준다.
- (2) TLD 네임 서버 (Top-Level Domain)
- .com, .net, .org, .kr 같은 최상위 도메인(TLD) 관리한다.
- google.com 요청 시, .com을 관리하는 TLD 네임 서버로 요청 전달한다.
- (3) 권한(Authoritative) 네임 서버
- 특정 도메인(예: google.com)의 IP 주소를 실제로 관리하는 서버이다.
- google.com의 IP 주소를 최종적으로 응답한다.
- 브라우저가 IP 주소를 받아 웹사이트 접속
- DNS 서버로부터 받은 IP 주소로 브라우저가 웹사이트 접속한다.
- 해당 IP 주소를 캐시에 저장하여 다음 요청 시 빠르게 처리한다.
DNS 캐싱과 TTL(Time To Live)
DNS 조회를 속도를 높이기 위해 DNS 캐싱(DNS Caching)이 사용된다. DNS 응답에는 TTL(Time To Live) 값이 포함되며, 이 TTL 시간이 지나야 새로운 IP를 조회한다.
예시 :
- google.com의 TTL이 300초 (5분)이면, 5분 동안 캐시된 값을 사용한다.
- TTL이 짧으면 변경이 빠르지만 트래픽 증가, TTL이 길면 트래픽 감소하지만 변경 반영이 느리다.
DNS 요청 방식 (재귀 vs 반복)
DNS 조회 방식에는 재귀(Recursive) 조회와 반복(Iterative) 조회 두 가지 방식이 있다.
- 재귀 조회(Recursive Query)
- 반복 조회(Iterative Query)
- 예제 : 아래 그림을 해석해보기

11.22.33.44의 IP주소는 example.com에 대응되어있고, DNS 캐시 저장은 300초이다.example.com이라는 도메인 이름을www.example.com이라는 별칭으로 사용하겠다.
DNS의 문제점과 해결 방법
- DNS 프로퍼게이션(DNS Propagation) 지연
- DNS 설정을 변경해도 전 세계 DNS 서버가 변경 사항을 반영하는 데 시간이 걸린다.
- TTL이 길다면 변경 사항이 최대 48시간까지 반영되지 않을 수도 있다.
- 해결 방법: TTL을 낮추고 변경 후 다시 높이기
- DNS 스푸핑(DNS Spoofing)
- 공격자가 가짜 DNS 응답을 보내 사용자를 피싱 사이트로 유도
- 해결 방법: DNSSEC (DNS Security Extensions) 사용
- ISP의 DNS 서버가 느릴 경우
- 기본 ISP DNS가 느릴 수 있음
- 해결 방법: 공개 DNS 서버 사용
- Google DNS → 8.8.8.8, 8.8.4.4
- Cloudflare DNS → 1.1.1.1, 1.0.0.1
- OpenDNS → 208.67.222.222, 208.67.220.220
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.


