DNS가.. 뭐..더라?

HyunHo Lee·2022년 12월 6일
49

개념

목록 보기
13/14
post-thumbnail

지겹게 들어본 DNS

DNS는 프론트엔드 개발자든 백엔드 개발자든 모두 많이 들어 본 경험이 있을 것이다. 사실 면접에서 항상 등장하는 브라우저 렌더링 과정에서도 DNS는 연관이 있다. 유저가 브라우저에 URL을 입력하면, 서버는 HTML을 넘겨주면서 브라우저 렌더링 과정이 시작된다고 알고 있다.

여기서 URL을 입력하고, 엔터를 치는 상황에서 DNS는 열일을 하게 된다. 오늘은 DNS가 얼마나 열심히 일하는지 알아보자.

DNS (Domain Name System)

DNS는 도메인 네임 시스템(Domain Name System)의 약자이다. 사실 개발자마다 DNS를 도메인 네임 서버, 네임 서버, DNS 서버, DNS 등 자기 마음대로 부르기 때문에 같이 일하는 동료 개발자들과 먼저 입을 맞추는게 좋아 보인다.

DNS는 왜 필요할까? 네이버에서 제공하는 서비스(웹툰이나 지도..?)를 이용하기 위해 네이버 웹 사이트에 들어간다고 가정하자.

사용하는 브라우저 서치바에서 네이버를 직접 입력해서 나오는 사이트를 클릭할 수 있다.

그리고 이 외에도 우리는 브라우저 주소 창에 www.naver.com을 입력해서 네이버를 쉽게 들어갈 수 있다. 나는 후자의 방법을 훨씬 많이 사용한다. 전자의 경우 입력 -> 클릭을 하게 되어 UX가 2step이지만, 후자의 경우 주소 입력으로 그냥 UX step이 1번이기 때문이다.

하지만 만약에 네이버의 주소가 IP로 되어 있었다면, 우리는 과연 지금처럼 편하게 이용할 수 있을까? 일단 나는 절대 저 주소를 못(안) 외울 것이다.

DNS는 범국제적 단위로 웹사이트의 IP 주소와 도메인 주소를 이어주는 환경/시스템이다. www.naver.com을 IP로 변환하거나 그 반대의 역할을 수행하는 시스템인 것이다. 그리고 www.naver.com와 같은 것들을 DNS 서버라고 한다.


도메인

개발자들과 대화를 하다보면 도메인이라는 단어도 진~~~짜 많이 나온다. 근데 주제에 따라서 도메인의 의미가 달라진다.

예를 들면, 너희 회사 도메인이 뭐야?는 회사의 분야를 묻는 질문이다. 기출 변형으로는 도메인 지식이 있는데, 그냥 회사 서비스 이해도 라고 보면 된다. 컴포넌트를 설계할 때, 도메인별로.. 에서의 도메인은 뭐 페이지별로 디렉터리를 생성해서 파일들을 관리한다는 의미다.

여기서 말하는 도메인은 이름이다. IP 주소인 223.130.200.104naver.com이라는 이름을 네임 서버에서 연결하여, 이 이름으로 쉽게 해당 사이트에 접근 할 수 있게 한다. 도메인을 사용하기 위해서 보통 이런 서비스를 제공하는 업체들을 이용한다. 위에서 말한 네임 서버 설정은 보통 모르고 지나치는 경우가 있다. 그 이유는 도메인을 사용하기 위해 사용하는 업체에서 호스팅도 함께 제공하는 경우가 많기 때문이다. 이번에는 호스팅에 대해 알아보자.

호스팅

호스팅이란, 쉽게 말하면 서버를 빌려주는 것이다. 24시간 동안 작동되는 컴퓨터의 공간을 빌리기 때문에 유저가 어느 순간에 들어오더라도 나의 서비스를 제공할 수 있는 것이다.

호스팅 서버도 결국에 업체의 컴퓨터이기 때문에 IP주소가 존재한다. 이 주소가 실제 주소이고, 여기에 내가 지정한 도메인을 연결하는 것이다.

웹 호스팅, 가상 호스팅, 클라우드 호스팅, 서버 호스팅, 이미지 호스팅, 코로케이션 등 호스팅에도 다양한 종류가 있다. 몇 개만 설명하겠다.

웹 호스팅이란, 웹 서버의 일부 공간을 할당받아 나의 웹 사이트를 올려 사용하는 것이다. 하나의 서버를 여러 사용자가 공동으로 사용하기 때문에 비용이 저렴하다. 자취할 때, 친구하고 월세랑 전기세 나눠내는거 생각하면 된다.

서버 호스팅은 서버 하나를 구매하기 때문에 저렴하지 않고, 웹 호스팅에 비해 구축 단계에서 시간도 많이 든다. 그래도 서버 관리에 대한 권한을 갖고 보안상으로도 유리하며 사용량도 제한되지 않는다.

마지막으로 클라우드 호스팅은 웹 호스팅과 서버 호스팅의 장점을 모두 갖고 있다고 한다. AWS의 EC2가 바로 클라우드 호스팅이다.


DNS 동작

기본 동작

우리는 도메인과 호스팅 개념에 대해서 알아보았다. 인터넷에는 이렇게 수 많은 도메인을 가진, 그리고 호스팅중인 웹 사이트들이 있다. 유저가 URL을 입력하면, 어떤 IP가 무슨 도메인과 연결되어 있는지 알려줘야 한다. 이런 정보를 저장하고 있는 것이 DNS 서버이다. (참고 자료)

브라우저에서 www.naver.com을 입력했다고 가정하자. 우리 눈에는 바로 해당 사이트가 나타나지만 그 사이에 많은 일들이 일어난다.

먼저 호스팅 서버도 결국 업체의 컴퓨터이기 때문에 IP를 가지고 있다는 사실을 다시 한 번 떠올리자. 첫 번째로 브라우저는 DNS서버에 www.naver.com에 대한 정보를 넘긴다. DNS 서버는 IP주소를 반환한다. 이제 실제 주소(IP)를 알게 된 브라우저는 해당 서버(호스팅 서버)에 www.naver.com에 대한 HTML을 요청한다. 마지막으로 호스팅 서버는 HTML을 반환하면서 브라우저 렌더링 과정이 시작된다.

생각보다 굉장히 간단하다. DNS 생각보다 별거 없는데?
하지만 역시나 끝이 아니다. 수 많은 도메인을 처리하기 위해서는 DNS 서버 한 개로는 부족하다. 그러다 보니 DNS 서버는 종류가 계층화가 되었고, 단계적으로 관리하게 되었다.

Local DNS 서버

우리는 통신사에서 제공하는 인터넷 망을 사용한다. 그래서 실제로는 통신사의 DNS 서버를 이용하게 된다. 브라우저에 www.naver.com을 입력하면, 먼저 통신사 DNS 서버에 IP를 요청 하는 것이다. 즉, 첫 번째 DNS 동작에서 말한 DNS 서버는 Local DNS Server였던 것이다.

만약에 Local DNS Server에 www.naver.com에 대한 IP주소가 없다면 아래에서 설명할 DNS 서버들을 거치게 된다.

하지만 통신사 DNS 서버를 이용하는 Local DNS 서버의 경우, 해당 도메인을 한 번 거쳤던 기록이 있다면 일정 기간(TTL/Time to Live)동안 데이터를 캐시로 저장하기 때문에 아래에서 설명할 DNS서버를 거치지 않는다. 이것을 Recursive DNS Server라고도 불린다.


이번에는 Local DNS 서버에 www.naver.com에 대한 IP가 없는 경우를 알아보자. 전체적인 플로우는 위와 같다.

Root DNS 서버

국제 인터넷 주소 관리 기구인 ICANN에서 직접 관리하는 절대 존엄 서버이다. TLD DNS 서버의 IP들이 저장되어 있고, 알맞는 곳으로 안내한다.

Root DNS 서버가 최상위 노드인 트리 구조로 되어 있다. 모든 DNS 서버들은 이 Root DNS Server 주소를 기본적으로 가지고 있다는 의미이다. 그래서 www.naver.com이 Local DNS 서버에 없으면 Root DNS 서버부터 가는 것이다. (Root DNS Server에 있으면 아래 노드로 내려가지 않아도 되기 때문!)

www.naver.com를 받은 Root DNS 서버는 www.naver.com에 대한 IP주소가 없다면 .com를 보고, .com라는 것을 알려주는 데이터를 Local DNS 서버에 반환한다.

TLD(Top Level Domain) DNS 서버

TLD란 최상위 도메인을 의미한다. 도메인 등록 기관(Registry)이 관리하는 서버이고, Authoritative DNS 서버 주소를 저장하고 안내한다.

Local DNS 서버에서 받은 www.naver.com.com에 대한 데이터를 보고, TLD DNS 서버는 .com쪽에 해당 IP가 있는지 확인한다.

gTLD는 일반 최상위 도메인이다. 위키백과에 종류마다 의미가 잘 나와있으므로 궁금하면 확인해보자.

.com : 영리 목적의 기업이나 단체
.biz : 사업

이후에 새로 추가된 도메인 New gTLD에서는 도메인 명에 이름, 일반 명사, 지역 명 등을 사용할 수 있게 되었다.
nTLD는 국가 최상위 도메인이다. 웹 사이트 주소에 .kr이 붙어 있는 경우가 바로 이거다. ccTLD라고도 부른다.

Authoritative DNS 서버

실제 개인 도메인과 IP 주소의 관계가 기록/저장/변경 되는 서버로, 이 역할로 인해 권한의 의미인 Authoritative가 붙는다. 위에서 언급했던 도메인/호스팅 업체의 네임 서버를 말한다. (또는 개인 DNS 서버)

이제 여기에는 www.naver.com와 매칭되는 IP주소가 있기 때문에 Local DNS 서버는 정상적인 IP 주소를 반환받게 된다.

위의 사진으로 다시 한 번 살펴보면서 Second-level DNS 서버와 Sub DNS 서버 개념도 익혀보자. Root DNS 서버에게 blog.example.com을 요청하면, .com을 담당하고 있는 TLD DNS 서버가 무엇인지 알려준다. 그리고 TLD DNS 서버는 example.com을 담당하고 있는 Second-level DNS 서버를 알려주고, 이 DNS 서버는 blog.example.com를 담당하는 Sub DNS 서버에게 물어본다.

전체 플로우

전체적인 플로우는 위와 같다.

마무리

간단하게 알고 넘어갔던 개념들도 한 번 이렇게 정리하면 확실하게 알고 넘어가게 되서 좋다. (물론 시간은 좀 걸리지만 ㅠㅠ)

사실 오늘 DNS에 대해 설명하면서 AWS의 Route 53에 대한 글도 같이 작서하려고 했다. 하지만... 시간이 없어서.. 실패!!

다음에는 AWS의 Route 53에 대한 개념과 실습, 그리고 가비아와 같은 서비스를 이용하여 도메인/호스팅도 직접 이용해보며 글을 작성해보겠다.

profile
함께 일하고 싶은 개발자가 되기 위해 달려나가고 있습니다.

4개의 댓글

comment-user-thumbnail
2022년 12월 14일

좋은 정리글 감사합니다!

1개의 답글
comment-user-thumbnail
2022년 12월 16일

Thanks for sharing. I found a lot of interesting information here.

https://www.mygiftcardsite.vip/

답글 달기
comment-user-thumbnail
2022년 12월 21일

수능본사람: 어??? 국어 비문학 기출 DNS 스푸핑??

답글 달기