DNS(Domain Name System)는 인터넷에서 사용되는 "주소록" 역할을 하는 시스템으로, 사람이 이해하기 쉬운 도메인 이름(예: www.example.com)을 컴퓨터가 이해할 수 있는 IP 주소(예: 192.168.1.1)로 변환한다. DNS는 인터넷 통신에서 핵심적인 역할을 하며, 프론트엔드 개발자가 반드시 이해해야 할 중요한 개념이다.
역할
- 도메인 이름 변환: 사용자가 입력한 URL(예: www.google.com)을 서버의 IP 주소(예: 142.250.190.14)로 변환.
- 리소스 로드: 웹페이지, API 호출, 이미지 로드 등에서 리소스의 IP를 찾아 통신을 가능하게 함.
- 분산된 데이터베이스: DNS는 전 세계적으로 분산된 서버 네트워크로 구성되어 고속 처리와 안정성을 보장.
구성 요소
- DNS 클라이언트(Resolver) : 사용자가 웹 브라우저나 애플리케이션에 도메인을 입력하면, 이를 처리하는 요청 주체. 보통 인터넷 서비스 제공업체(ISP)에서 제공.
- DNS 서버 : 요청을 처리하고 IP 주소를 반환하는 서버.
- DNS 서버의 종류:
- 루트 네임서버: 최상위 수준의 네임서버로, TLD(Top-Level Domain) 정보를 제공.
- TLD 네임서버: .com, .net 등 최상위 도메인의 정보를 저장.
- 권한 있는 네임서버(Authoritative Nameserver): 특정 도메인의 최종 IP 정보를 제공.
- 캐싱 네임서버(Caching Nameserver): 요청 결과를 캐싱하여 동일 요청 시 더 빠르게 응답.
- DNS 서버의 종류:
요청 단계
1. 사용자가 도메인 입력 :사용자가 브라우저에 www.example.com을 입력.
2. 캐싱 확인 : 운영 체제(OS)나 브라우저에 저장된 DNS 캐시와 ISP의 캐싱 네임서버에서 최근 요청이 있었는지 확인.
3. DNS 쿼리 실행 : 만약 캐시에 없다면, DNS 클라이언트가 다음 단계를 거침:
- 1단계: 루트 네임서버 조회 : 루트 서버는 TLD 네임서버의 주소를 반환.
- 예: .com 도메인을 담당하는 TLD 네임서버 주소를 반환.
- 2단계: TLD 네임서버 조회. TLD 서버는 권한 있는 네임서버 주소를 반환.
- 예: example.com에 대한 권한 있는 네임서버 주소를 반환.
- 3단계: 권한 있는 네임서버 조회. 권한 있는 네임서버는 최종적으로 www.example.com에 해당하는 IP 주소를 반환.
4. 결과 반환 및 연결 : DNS 클라이언트는 IP 주소를 브라우저에 전달. 브라우저는 해당 IP 주소로 요청을 보내고, 서버에서 데이터를 받아옴.
주요 개념
DNS 쿼리 유형
- 재귀적 쿼리 (Recursive Query) : DNS 클라이언트가 DNS 서버에 "내가 찾을 때까지 알아와!"라고 요청.
- 예: 사용자 → ISP 캐싱 서버.
- 반복적 쿼리 (Iterative Query) : DNS 서버가 요청에 대해 "다음 서버에서 확인해봐!"라고 알려주는 방식.
- 예: 루트 서버 → TLD 서버 → 권한 있는 네임서버.
- 역방향 조회 (Reverse Lookup) : IP 주소를 도메인 이름으로 변환하는 요청.
- 예: 192.168.1.1 → www.example.com.
DNS 레코드 유형
- A (Address) 레코드 : 도메인 이름을 IPv4 주소로 매핑.
- 예: www.example.com → 93.184.216.34.
- AAAA (IPv6 Address) 레코드 : 도메인 이름을 IPv6 주소로 매핑.
- 예: www.example.com → 2606:2800:220:1:248:1893:25c8:1946.
- CNAME (Canonical Name) 레코드 : 도메인 이름을 다른 도메인 이름으로 매핑.
- 예: blog.example.com → www.example.com.
- MX (Mail Exchange) 레코드 : 이메일 서버 정보를 제공.
- 예: mail.example.com.
- TXT 레코드 : 텍스트 정보를 저장.
- 예: 인증 정보(SPF, DKIM) 저장.
한계와 최적화
- 한계 : DNS 서버가 다운되면 웹사이트 접속 불가. 전파 시간(propogation delay)이 길어질 수 있음.
- 최적화 방법
- CDN(Content Delivery Network) 사용: 전 세계 사용자에게 빠르게 콘텐츠 제공.
- DNS 프리페칭: 브라우저가 미리 도메인의 IP 주소를 확인해 로딩 속도를 개선.