[CS] DNS란 무엇인가?

2024. 2. 2. 16:04·개발/CS
728x90
반응형

DNS란 무엇인가?

발단

route53 에서 여러가지 실험을 해보다가 hostzone을 삭제하고 다시 생성 후 ALB를 적용하여 요청했는데 dns를 못찾음.

검색을 해보다가 AWS Route53에서 Record 변경 사항이 적용되는 시간의 질문을 보고 DNS 캐시를 인지했고 예전에 들어보기만 했던 DNS 캐시에 대해서 찾아보다가 DNS의 동작방식에 대해 알게 됨.

문제의 원인은 route53과 등록된 도메인의 네임서버가 다른게 원인이었지만 문제를 해결하며 알게된 DNS와 관련된 내용을 정리하려고 한다.

DNS란?

DNS란 Domain Name System의 도메인 이름을 ip로 바꾸거나 그 반대의 변환을 수행할 수 있도록 하기 위해 개발되었다고 한다.

사람이 이해하기 쉬운 도메인 이름을 IP 주소로 변환하는 흔히 "전화번호부"에 비유된다.

"naver.com" 입력시 브라우저는 naver.com에 해당하는 ip를 찾아 그 ip에 요청을 하여 받은 html을 화면에 뿌려준다.

DNS 동작 방식

ip를 찾기 위해서는 4개의 서버가 동작한다.

(1) DNS Resolver

클라이언트의 요청으로 DNS를 받아 ip를 응답해준다.

DNS Resolver는 다른 서버들에게 DNS를 보내면서 해당하는 ip를 찾는 역할이다.

Root Server, TLD Server, Name Server 순으로 요청하여 ip를 받아온다.

(2) Root Server

DNS Resolver로부터 DNS를 받아 루트 도메인(.com 또는 .org 등등)에 대한 최상위 도메인 서버(TLD Server)를 알려준다.

(3) TLD Server

DNS Resolver로부터 DNS를 받아 해당 도메인의 권한 있는 서버인 네임서버의 주소를 알려준다.

(3) Name Server

DNS Resolver로부터 DNS를 받아 하위 도메인의 ip를 return 한다.


what_is_a_dns_server_dns_lookup


출처 : https://www.cloudflare.com/ko-kr/learning/dns/what-is-a-dns-server/

위 그림처럼 소통을 하는 것이다.

DNS 캐싱

위처럼 DNS를 통해 도메인의 ip를 찾는 건 꽤 복잡한 과정이 이루어진다.

그래서 도메인 이름과 ip를 저장해놓는데 이를 다른말로 캐싱이라고 표현한다.

브라우저 캐싱, os 캐싱, 라우터 캐싱 등등 캐싱은 생각보다 많은 곳에서 이루어졌다.

이때 중요한건 얼마나 캐시를 들고 있냐가 중요한데 이 시간을 TTL(Time to live)이라 하고, 도메인에 TTL을 지정을 해둘 수 있다. 보통 24~48시간 정도로 설정해놓는다고 한다.

해커가 도메인에 대한 ip를 다른곳으로 매핑을 해놓는다면 유저는 아무리 시도해도 원하는 ip에 도달할 수 없을것이다.

이때는 캐시를 지워 다시 ip를 받아와야 할것인데 대표적으로 크롬에 chrome://net-internals/#dns 주소로 들어가보면 캐시를 지울수 있다.

참고

위키백과 - 도메인 네임 시스템
DNS 서버란? (cloud flare)
KT Cloud Dev Tools - DNS 기술 소개

728x90
반응형

'개발 > CS' 카테고리의 다른 글

[CS] TCP vs UDP의 차이점과 사용 사례  (1) 2025.07.22
[CS] 대칭키 vs 비대칭키  (0) 2025.06.22
'개발/CS' 카테고리의 다른 글
  • [CS] TCP vs UDP의 차이점과 사용 사례
  • [CS] 대칭키 vs 비대칭키
TeTedo.
TeTedo.
  • TeTedo.
    TeTedo 개발 일기
    TeTedo.
  • 전체
    오늘
    어제
    • 분류 전체보기 (319)
      • 개발 (274)
        • Article (4)
        • 정리 (21)
        • Spring Boot (17)
        • JPA (2)
        • JAVA (6)
        • Database (4)
        • 자료구조 (11)
        • 알고리즘 (32)
        • React (20)
        • Docker (10)
        • node.js (18)
        • Devops (11)
        • Linux (4)
        • TypeScript (3)
        • Go (10)
        • HyperLedger (4)
        • BlockChain (43)
        • html, css, js (48)
        • CS (3)
        • AWS (3)
      • 모아두고 나중에 쓰기 (3)
      • 팀프로젝트 (18)
        • SNS(키보드워리어) (9)
        • close_sea (9)
      • 개인프로젝트 (1)
        • Around Flavor (1)
        • CHAM (13)
        • ethFruitShop (5)
      • 독서 (0)
        • 스프링부트와 AWS로 혼자 구현하는 웹 서비스 (0)
  • 블로그 메뉴

    • 홈
    • 개발일기
    • CS
    • 실습
    • 코딩테스트
    • 웹
    • Go
    • node.js
    • 팀플
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    CSS
    js
    프로그래머스
    erc20
    도커
    React
    mysql
    html
    node
    30일챌린지
    node.js
    nodejs
    명령어
    go언어
    go
    30일 챌린지
    블록체인
    컨테이너
    하이퍼레저
    ERC721
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
TeTedo.
[CS] DNS란 무엇인가?
상단으로

티스토리툴바