DNS
DNS (Domain Name System)
DNS(Domain Name System)는 인터넷에서 사람이 읽을 수 있는 도메인 이름(e.g., `www.google.com`)을 컴퓨터가 이해할 수 있는 IP 주소(e.g., `172.217.160.142`)로 변환해주는 분산형 명명 시스템입니다. 인터넷의 '전화번호부'와 같은 역할을 하며, 웹 서비스 접근의 핵심 인프라입니다.
🌐 DNS의 필요성
- IP 주소의 복잡성 해소 : 컴퓨터는 IP 주소(숫자)로 통신하지만, 사람은 숫자로 된 IP 주소를 기억하기 어렵고 오류 발생 가능성이 높습니다. DNS는 사람이 기억하기 쉬운 도메인 이름을 사용하여 웹사이트나 서비스에 접근할 수 있도록 합니다.
- IP 주소 변경에 대한 유연성 : 웹 서버의 IP 주소가 변경되더라도, 도메인 이름은 그대로 유지하고 DNS 레코드만 업데이트하면 되므로 서비스 중단 없이 유연하게 대응 가능합니다.
- 분산 시스템 : 전 세계에 분산된 DNS 서버들이 계층적으로 협력하여 도메인 이름-IP 주소 매핑 정보를 관리하므로, 단일 장애 지점(Single Point of Failure) 없이 안정적인 서비스 제공이 가능합니다.
⚙️ DNS의 동작 원리
DNS는 계층적인 구조를 가지며, 여러 종류의 DNS 서버들이 협력하여 도메인 이름을 IP 주소로 변환합니다.
- DNS 계층 구조
> * 루트 DNS 서버 (Root DNS Server) : 최상위 서버. TLD(Top-Level Domain) 서버의 IP 주소를 알고 있습니다. > * TLD DNS 서버 (Top-Level Domain DNS Server) : `.com`, `.org`, `.net`, `.kr` 등 최상위 도메인 서버. 하위 도메인 서버의 IP 주소를 알고 있습니다. > * 권한 있는 DNS 서버 (Authoritative DNS Server) : 특정 도메인(e.g., `example.com`)에 대한 최종 IP 주소 정보를 가지고 있는 서버입니다. > * 재귀적 쿼리 (Recursive Query)를 수행하는 DNS 서버 (Resolver) : 클라이언트(사용자 PC)의 요청을 받아 위 계층 구조를 따라 IP 주소를 찾아주는 서버입니다. (ISP가 제공하는 DNS 서버)
- DNS 쿼리 과정 (예: `www.example.com` 접속 시)
1. 클라이언트가 로컬 DNS 서버(Resolver)에 `www.example.com`의 IP 주소를 요청합니다. 2. 로컬 DNS 서버는 자신의 캐시를 확인 후, 없으면 루트 DNS 서버에 질의합니다. 3. 루트 DNS 서버는 `.com` TLD DNS 서버의 주소를 알려줍니다. 4. 로컬 DNS 서버는 `.com` TLD DNS 서버에 질의합니다. 5. `.com` TLD DNS 서버는 `example.com`의 권한 있는 DNS 서버 주소를 알려줍니다. 6. 로컬 DNS 서버는 `example.com`의 권한 있는 DNS 서버에 질의합니다. 7. 권한 있는 DNS 서버는 `www.example.com`의 최종 IP 주소를 알려줍니다. 8. 로컬 DNS 서버는 이 IP 주소를 캐싱하고 클라이언트에게 전달합니다. 9. 클라이언트는 받은 IP 주소로 웹 서버에 접속합니다.
💡 개발자 핵심 Point
- DNS는 웹 서비스의 핵심 인프라입니다. DNS 설정 오류는 웹사이트 접속 불가로 이어질 수 있습니다.
- DNS 레코드 유형
> * A 레코드 : 도메인 이름을 IPv4 주소에 매핑. > * AAAA 레코드 : 도메인 이름을 IPv6 주소에 매핑. > * CNAME 레코드 : 도메인 이름을 다른 도메인 이름에 매핑 (별칭). > * MX 레코드 : 메일 서버의 도메인 이름을 지정. > * NS 레코드 : 도메인의 권한 있는 네임 서버를 지정.
- DNS 캐싱 : DNS 쿼리 과정은 시간이 소요되므로, 로컬 DNS 서버나 클라이언트(브라우저, OS)는 DNS 응답을 일정 시간(TTL, Time To Live) 동안 캐싱하여 불필요한 쿼리를 줄이고 응답 속도를 높입니다.
- DNSSEC (DNS Security Extensions) : DNS 응답의 위변조를 방지하기 위한 보안 확장 기능. DNS 스푸핑(Spoofing) 공격으로부터 보호합니다.
- CDN (Content Delivery Network) : DNS를 활용하여 사용자에게 가장 가까운 서버로 연결하여 콘텐츠 전송 속도를 최적화합니다.