DNS의 역할과 작동 원리(재귀적/반복적 질의)
DNS(Domain Name System)란
DNS는 인터넷의 전화번호부와 같은 역할을 합니다. 사람이 기억하기 쉬운 도메인 이름(예: www.example.com)을 컴퓨터가 인식할 수 있는 IP 주소(예: 192.0.2.1)로 변환해주는 시스템입니다.
DNS 서버의 종류
- 루트 DNS 서버 (Root DNS Server): 최상위 DNS 서버로 TLD DNS 서버 정보 제공 (ICANN과 여러 협력 기관들이 관리)
- TLD DNS 서버: .com, .net, .org 등의 URL의 마지막 점 뒤에 오는 최상위 도메인(Top-Level Domain) 관리. (ICANN과 여러 협력 기관들이 관리)
- 권한 있는 DNS 서버 (Authoritative DNS Server): 실제 도메인의 DNS 정보를 직접 관리. 최종 IP 주소를 반환한다. (도메인 등록 업체(AWS Route 53, Google DNS) 또는 호스팅 업체가 관리)
- 리커시브 DNS 서버 (Recursive Resolver): 클라이언트 대신 DNS 질의를 수행하는 서버. (ISP 또는 독립 DNS 서비스 제공업체(AWS Route 53, Google DNS)가 관리)
DNS 질의 과정
재귀적 질의(Recursive Query)
재귀적 질의는 클라이언트가 DNS 리졸버에게 요청하면, 리졸버가 답을 찾을 때까지 다른 DNS 서버들을 대신 질의하여 최종 결과를 클라이언트에게 반환하는 방식입니다.
과정:
- 클라이언트가 DNS 리졸버(리커시브 DNS 서버)에 도메인 이름에 대한 IP 주소를 요청합니다.
- DNS 리졸버는 우선 자체 캐시를 확인합니다.
- 캐시에 없다면, 루트 DNS 서버에 질의합니다.
- 루트 DNS 서버는 해당 TLD(.com, .org 등)를 담당하는 DNS 서버 정보를 제공합니다.
- DNS 리졸버는 TLD DNS 서버에 질의합니다.
- TLD DNS 서버는 도메인에 대한 권한 있는 네임서버 정보를 제공합니다.
- DNS 리졸버는 권한 있는 네임서버에 질의합니다.
- 권한 있는 네임서버가 최종 IP 주소를 DNS 리졸버에 반환합니다.
- DNS 리졸버는 이 정보를 캐싱하고 클라이언트에게 전달합니다.
반복적 질의(Iterative Query)
반복적 질의는 DNS 리졸버가 답을 모르는 경우 “나는 모르지만, 여기에 물어보세요”라고 다음 질의할 서버 정보만 알려주는 방식입니다.
과정:
- 클라이언트가 DNS 서버에 질의합니다.
- DNS 서버는 자체 캐시나 영역에 정보가 없으면, 다음에 질의할 DNS 서버 정보만 반환합니다.
- 클라이언트는 반환된 DNS 서버에 다시 질의합니다.
- 이 과정을 답을 얻을 때까지 반복합니다.
비교 요약:
Iterative Query: 클라이언트가 여러 번 서버에 요청을 보내는 방식 (서버는 중간 결과를 제공하고, 클라이언트는 최종 결과를 찾기 위해 다시 요청을 보냄).
Recursive Query: 서버가 요청을 처리하고 최종 결과를 클라이언트에게 직접 제공하는 방식 (서버가 모든 중간 단계 처리를 대신 함).
현실에서는 위 그림처럼 클라이언트가 리커시브 DNS 서버에 재귀적 질의를 요청하고, 리커시브 DNS 서버는 다른 DNS 서버들에게 반복적 질의를 수행하는 하이브리드 방식이 일반적입니다.
DNS 캐싱
DNS 캐싱은 DNS 질의 결과를 일정 시간 동안 저장하여 반복적인 요청 시 빠르게 응답하는 메커니즘입니다.
- TTL(Time To Live): DNS 레코드가 캐시에 얼마나 오래 유지될지 정의하는 값(초 단위)
- 네가티브 캐싱: 존재하지 않는 도메인 질의 결과도 캐싱하여 불필요한 반복 질의 방지
캐싱 계층
- 브라우저 캐시: 웹 브라우저 자체의 DNS 캐시
- OS 캐시: 운영체제 수준의 DNS 캐시
- 리커시브 DNS 서버 캐시: ISP나 공용 DNS 서버의 캐시
- 권한 있는 서버 캐시: 최종 도메인 정보를 가진 서버의 캐시
개발 시 참고 할 DNS 관련 개념
DNS 전파 시간(DNS Propagation)
DNS 레코드 변경 시 인터넷 전체에 변경사항이 적용되는 데 걸리는 시간입니다. TTL 설정에 따라 다르지만, 일반적으로 몇 시간에서 48시간까지 소요될 수 있습니다. 배포 계획 시 이 시간을 고려해야 합니다.
DNS와 로드밸런싱
- 라운드 로빈 DNS: 하나의 도메인에 여러 IP 주소를 연결하여 부하 분산
- 지역 기반 DNS: 사용자의 지리적 위치에 따라 가장 가까운 서버로 연결
DNS 보안
- DNSSEC(DNS Security Extensions): DNS 데이터의 무결성과 출처 인증을 보장하는 보안 확장 기능
- DNS over HTTPS(DoH): HTTPS를 통해 DNS 쿼리를 암호화하여 중간자 공격 방지
- DNS over TLS(DoT): TLS를 통한 DNS 쿼리 암호화
도메인 이름 설계
- 서브도메인 활용: api.example.com, admin.example.com 등으로 서비스 분리
- 다중 도메인 관리: 국가별, 서비스별 도메인 전략
- 개발/스테이징 환경 분리: dev.example.com, staging.example.com
Leave a comment