[네트워크] DNS(Domain Name System Servers)

2025. 3. 20. 22:03·⚙️ CS/네트워크
반응형

✅ DNS(Domain Name System Servers)란?

: 도메인 이름을 IP 주소로 변환하거나 그 반대의 역할을 해주는 애플리케이션 계층 프로토콜

 

사용자가 웹사이트에 접근할 때, 기억하기 쉬운 도메인 이름(예: http://www.google.com)을 입력하면 DNS가 이 이름을 해당하는 IP 주소로 변환하여 웹사이트에 연결할 수 있도록 도와준다. DNS는 인터넷의 전화번호부와 같은 역할을 한다.

 

도메인 이름(Domain Name): 네트워크 상에서 컴퓨터를 식별하는 이름으로, IP 주소에 대응된다.

 

 

DNS 질의는 주로 UDP(User Datagram Protocol)를 사용한다.

  • 속도: UDP는 연결을 설정하지 않고 데이터를 전송하기 때문에 더 빠르다.
  • 간단한 요청: DNS 질의는 일반적으로 짧고 간단한 요청이므로, TCP보다 UDP가 더 효율적이다.
  • 재전송 용이: DNS는 자체적으로 캐싱을 활용하여 재전송이 필요할 경우 UDP를 통해 빠르게 처리할 수 있다.

 


 

✅ DNS 계층 구조

DNS는 분산 계층 데이터베이스이다.

중앙 집중 데이터베이스는 서버의 고장, 트래픽 양, 먼 거리 등의 문제가 발생할 수 있으므로 DNS는 많은 서버를 이용해 계층 형태로 분산시킨다.

 

다음과 같이 총 3가지 계층의 DNS 서버로 나눌 수 있다.

DNS 계층 구조
DNS 계층 구조

 

📍 루트 DNS 서버

: TLD(Top Level Domain) 서버의 IP 주소 제공

1000개 이상의 루트 서버 인스턴스가 전 세계에 흩어져 있다.

 


 

📍 Top-Level Domain(TLD, 최상위 DNS 서버)

: 책임 DNS 서버에 대한 IP 주소 제공

com. org, net와 같은 상위 레벨 도메인과 kr, uk와 같은 모든 국가의 상위 레벨 도메인에 대한 TLD 서버가 있다.

 


 

📍 책임 DNS 서버(Second-Level Domain)

: 조직의 자체 DNS 서버

규모가 큰 기관은 대부분 자신의 호스트들에 대한 책임 DNS 서버를 유지한다.

 


 

✅ DNS 작동 방식

  1. 사용자가 웹 브라우저에 URL을 입력한다.
  2. 브라우저는 URL로부터 호스트 이름(도메인)을 추출한다.
    1. ex) https://www.example.com/page -> 호스트 이름: www.example.com
  3. 컴퓨터는 로컬 DNS 서버를 참조하여 해당 도메인의 IP 주소를 검색한다.
  4. 로컬 DNS에 IP 주소가 없으면, 루트 DNS 서버에 질의한다.
  5. 로컬 DNS는 결국 도메인에 대한 IP 주소를 가진 응답을 받는다. 그리고  이 정보를 캐싱하여 이후 요청 시 빠르게 응답할 수 있도록 한다.
  6. 브라우저가 로컬 DNS로부터 IP주소를 받아, 해당 IP 주소와 그 주소의 80번 포트에 위치하는 HTTP 서버 프로세스로 TCP 연결을 초기화한다.
  7. 루트 서버는 요청된 도메인의 TLD(ex. com) 서버의 IP 주소를 반환한다.
  8. TLD 서버는 해당 도메인을 관리하는 책임 DNS 서버의 IP 주소를 반환한다.
  9. 책임 DNS 서버는 요청된 도메인의 IP 주소를 반환하고, 로컬 DNS는 이 정보를 캐싱하여 이후 요청 시 빠르게 응답할 수 있도록 한다.

 

로컬 DNS 서버의 주소는 일반적으로 ISP에서 할당해 준다.

 

✅ DNS 질의 종류

 

ISP(Internet Service Provider)의 DNS 서버가 호스팅 하고 있는 서버의 IP주소를 찾기 위해 DNS query를 날린다.

 

 

📍 재귀 질의 (Recursive Query)

: 클라이언트가 DNS 서버에 질의할 때, DNS 서버가 최종 IP 주소를 찾을 때까지 다른 DNS 서버에 추가적으로 질의하는 방식

 

출처: 컴퓨터 네트워킹 하향식 접근

 

  1. 클라이언트가 로컬 DNS 서버에 도메인 이름을 요청한다.
  2. 로컬 DNS 서버는 다시 루트 DNS 서버에 질의한다.
  3. 루트 DNS 서버는 다시 TLD 서버에 질의한다.
  4. 이런 과정을 반복하여 결과를 역순으로 전달받는다.

 


 

📍 반복 질의 (Iterative Query)

: 클라이언트가 DNS 서버에 질의할 때, DNS 서버가 자신이 알고 있는 정보만 제공하고, 알지 못하는 정보에 대해서는 다른 DNS 서버의 주소를 반환하는 방식

 

출처: 컴퓨터 네트워킹 하향식 접근

 

  1. 클라이언트가 로컬 DNS 서버에 도메인 이름을 요청한다.
  2. 로컬 DNS 서버가 해당 도메인의 IP 주소를 알고 있지 않으면, 클라이언트에게 알고 있는 DNS 서버의 주소를 반환한다.
  3. 클라이언트는 반환된 DNS 서버에 직접 질의하여 필요한 정보를 찾아간다.

 


✅ DNS 캐싱

 

DNS 질의는 많은 단계를 거쳐야 하므로 속도와 성능 향상을 위해 DNS 캐싱을 사용한다.

 

  • 로컬 DNS 서버는 클라이언트가 요청한 도메인에 대한 최종 IP 주소를 캐싱한다.
    • 이후 동일한 도메인 요청이 들어오면 상위 DNS 서버로 질의하지 않고, 캐시 된 IP를 바로 응답한다.
    • 특정 시간(TTL) 이후에 저장된 정보는 제거한다.
  • 로컬 DNS 서버에는 TLD 서버의 IP도 저장하여 루트 DNS 서버를 우회할 수 있다.

 


 

✅ DNS 레코드

: DNS 서버가 해당 패킷을 받았을 때 어떤 식으로 처리할지를 나타내는 지침

 

DNS 서버들은 호스트 이름을 IP 주소로 매핑하기 위한 자원 레코드를 저장한다.

 

각 레코드는 `(Name, Value, Type, TTL)` 4가지 튜플로 이루어진다.

그리고 레코드의 타입에 따라 Name과 Value의 의미가 달라진다.

 

  • A 레코드: 도메인 이름을 IPv4 주소로 변환한다. (Address)
    • Name: 도메인 이름
    • Value: IPv4 주소
  • AAAA 레코드: 도메인 이름을 IPv6 주소로 변환한다.
    • Name: 도메인 이름
    • Value: IPv6 주소
  • CNAME 레코드: 도메인 이름을 다른 도메인 이름으로 매핑한다. (Canonical Name)
    • Name: 정식 호스트 이름의 별칭
    • Value : 별칭 호스트 이름에 대한 정식 호스트 이름
  •  MX 레코드: 도메인과 연동된 메일 서버의 주소를 지정한다. (Mail Exchange)
    • Value: 해당 도메인의 메일을 처리할 메일 서버의 정식 호스트 이름
  • NS 레코드: 도메인의 IP주소를 찾을 수 있는 네임 서버의 주소를 지정한다. (Name Server)
    • Name: 도메인
    • Value: 도메인 내부의 호스트에 대한 IP 주소를 얻을 수 있는 방법을 아는 책임 DNS 서버의 호스트 이름

 


✅  Web Server & WAS

Web Service 구조
출처: https://gmlwjd9405.github.io/2018/10/27/webserver-vs-was.html

 

 

📍Web Server

: HTTP 프로토콜을 사용하여 클라이언트로부터 받은 요청에 대해 정적 콘텐츠를 제공

 

  • ex) Apache, Nginx
  • 정적 콘텐츠: 데이터베이스에서 정보를 가져오거나 등 별도의 서버에서의 처리가 없어도, 사용자들에게 보여줄 수 있는 페이지
    • ex) HTML, 이미지, CSS 등
    • 항상 동일한 페이지를 반환
  • 동적인 콘텐츠 요청을 WAS로 전달하는 역할도 수행

 


📍Web Application Server (WAS)

: 클라이언트로부터 받은 요청에 대해 동적으로 생성된 콘텐츠 제공

 

출처: https://gmlwjd9405.github.io/2018/10/27/webserver-vs-was.html

 

  • ex) Tomcat, JBoss 등
  • 동적 콘텐츠: 데이터베이스에서 가져온 데이터, 사용자 입력에 따라 생성된 HTML 등
  • WAS = Web Server + Web Container
    • Web Container: JSP, Servlet을 실행시킬 수 있는 소프트웨어

 

💡 WAS가 왜 필요?

  • 자원의 효율적인 사용을 위해
  • Web Server만 사용한다면 동적인 콘텐츠에 대해 미리미리 결괏값을 만들어두고 제공해야 한다. 이렇게 하기에는 자원이 절대적으로 부족하다.

 

💡 WAS가 Web Server의 기능을 수행하면 안 되나?

  • 서버 부하 방지
    • 만약 정적 콘텐츠 요청까지 WAS가 처리한다면 부하가 커지게 되고, 동적 콘텐츠의 처리가 지연됨에 따라 수행 속도가 느려짐
  • 보안 강화
    • Web Server가 외부 요청의 첫 관문이 되어 보안 역할 수행
    • WAS는 내부망에 위치시키고 Web Server만 외부에 노출하면 보안 위험 최소화 가능
  • 확장성과 유연한 아키텍처
    • Web Server는 여러 대의 WAS와 연결 가능 -> 로드밸런서 역할 수행
    • Web Server가 로드밸런서 역할을 하여 장애 극복에 쉽게 대응 가능

 


 

✅  URL vs. URI vs. URN

  • URI(통합 자원 식별자): 인터넷상의 리소스 자원을 식별하는 고유한 문자열. URI의 하위 개념으로 URL과 URN이 존재
  • URL(위치): 웹 주소라고도 불리며, 네트워크상에서 리소스의 위치를 찾는 데 사용
    • 하지만, 자원의 위치가 변한다면 기존 URL은 유효해지지 않는다.
  • URN(이름): 네트워크상에서 리소스의 이름. 위치와 관계없이 리소스를 식별하는 데 사용
    • 위치와 무관하게 자원 식별이 가능한 영속적인 식별자

 

즉, URI가 URL과 URN을 포함하는 개념이다.

URI는 위치를 이용해 자원을 식별할 수도 있고, 이름을 이용해 자원을 식별할 수도 있는 것이다.

 

 

http://store.com/dir/page.html?page=1을 기준으로 설명하자면

  • http://store.com/dir/page.html?page=1는 URI
  • http://store.com/dir/page.html은 URL
  • `urn:uuid:123 e4567`와 같이 `urn:`으로 시작하는 것이  URN(위치 정보를 포함 X)

 


✅ 사용자가 브라우저에 www.github.com을 입력하면?

 

 

  1. 호스트 이름 추출: URL에서 `www.github.com`을 추출
  2. DNS 질의: 도메인에 대한 IP 주소를 로컬 DNS 서버에 질의
  3. IP 응답 수신: `www.github.com`의 IP 주소를 응답받음
  4. TCP 연결: 해당 IP의 443번 포트(https)로 TCP 3-way handshake 수행
  5. TLS 핸드셰이크: HTTPS 보안을 위한 암호화 연결 설정
  6. HTTP 요청 전송: 브라우저가 GET 요청 전송
  7. Web Server 수신: 요청은 먼저 Web Server(ex. Nginx)가 받음
  8. WAS 전달: 동적 처리가 필요한 경우 Web Application Server로 전달
  9. 응답 생성: WAS가 처리 후 HTML/JSON 등의 응답 생성
  10. 응답 반환: Web Server -> 브라우저로 응답 전송
  11. 페이지 렌더링: 브라우저가 응답 내용을 해석하고 화면에 렌더링

 

 


✨ 추가 질문

 

[ DNS 쿼리 과정에서 손실이 발생한다면, 어떻게 처리하나요? ]

클라이언트/서버는 일정 시간 기다린 뒤 타임아웃이 발생하고, 재전송을 시도한다.

DNS는 UDP 기반 프로토콜이기 때문에 신뢰성을 직접 보장하지 않지만
DNS 클라이언트/서버는 타임아웃 후 자동 재시도(retry)를 통해 손실을 보완한다.

 

[ 캐싱된 DNS 쿼리가 잘못될 수도 있습니다. 이 경우, 어떻게 에러를 보정할 수 있나요? ]

도메인의 IP 주소가 변경됐는데 TTL이 만료되지 않을 경우, 잘못된 정보를 반환할 수 있다.

이럴 경우 TTL 만료를 기다리거나, 강제로 캐시를 삭제(Flush)하거나, TTL을 더 짧게 조정하여 오류를 보정할 수 있다.

 

[ hosts 파일은 어떤 역할을 하나요? DNS와 비교하였을 때 어떤 것이 우선순위가 더 높나요? ]

hosts 파일은 DNS가 등장하기 이전 도메인 이름과 IP 주소를 수동으로 매핑하기 위해 사용되던 파일이다.

과거에는 사용자가 인터넷에 연결된 모든 컴퓨터의 이름과 IP 주소를 이 파일에 직접 기록해야 했고,
인터넷 규모가 커지고 네트워크 노드가 급격히 늘어나면서 이를 효율적으로 관리하기 위해 DNS 시스템이 등장하게 되었다.

오늘날에도 hosts 파일은 여전히 사용되며, 도메인 이름을 해석할 때 DNS보다 먼저 참조된다.
따라서 hosts 파일에 매핑이 존재하면 DNS 질의 없이 해당 IP로 바로 연결된다.

 

[ DNS 쿼리를 통해 얻어진 IP는 어디를 가리키고 있나요? ]

사용자가 입력한 URL의 도메인(=호스트 이름)에 대응되는 서버의 IP 주소를 의미한다.
이 IP는 보통 실제 웹 서버를 가리키며, 그 외에도 로드밸런서나 프록시 장비를 가리킬 수 있다.
반응형

'⚙️ CS > 네트워크' 카테고리의 다른 글

[네트워크] XSS & CSRF & SQL Injection  (1) 2025.03.28
[네트워크] HTTP 상태유지 기술  (2) 2025.03.28
[네트워크] HTTP 프로토콜  (0) 2025.03.20
[네트워크] OSI 7계층 vs TCP/IP 모델  (1) 2025.03.19
'⚙️ CS/네트워크' 카테고리의 다른 글
  • [네트워크] XSS & CSRF & SQL Injection
  • [네트워크] HTTP 상태유지 기술
  • [네트워크] HTTP 프로토콜
  • [네트워크] OSI 7계층 vs TCP/IP 모델
dev-heyjin
dev-heyjin
  • dev-heyjin
    개발 기록
    dev-heyjin
  • 전체
    오늘
    어제
    • 분류 전체보기 (56)
      • 🎯 Programming (8)
      • 💪 Algorithm (16)
      • ⚙️ CS (31)
        • 네트워크 (15)
        • 운영체제 (15)
        • 데이터베이스 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    해킹
    데이터베이스
    RDS
    DB
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
dev-heyjin
[네트워크] DNS(Domain Name System Servers)
상단으로

티스토리툴바