## **Domain Name**
**Domain Name, DN**은 인터넷에서 사용되는 IP 주소와 매핑된 문자열 주소다. IP 주소는 숫자열로 이루어져 있어서 사람이 기억하기 어렵기 때문에 **문자열로 이루어진 쉬운 주소를 실제 IP 주소와 연결**한 것이다.
> **전화번호부**를 생각해보자.
> 전화번호에 이름을 저장하는 거 처럼 168.126.63.1라는 IP 주소와 symbbad.com이라는 문자열 주소를 매핑시켜 저장하는 것이다.
* **Domain Name 대여**
* 만일 웹 사이트를 운영하기로 했다면 도메인 이름을 고려해야한다. 물론 도메인 이름을 사용하지 않고 IP 주소로만 웹 사이트 운영이 가능하다. 그러나 도메인 이름 사용 시 얻을 수 있는 이점을 포기하기에는 그 이점이 좀 크다.
- 웹 사이트 접근성
- SEO(검색 최적화)
- 브랜드 보호 측면
- 도메인 이름을 사용하려면 인증 받은 기관을 통해 도메인 이름을 등록해야 한다. 대표적으로 가비아와 같은 사이트에서 등록할 수 있다.
- 도메인 이름을 한 번 등록했다고 영구적으로 소유권을 보장하는 것은 아니다. **등록(Registration)** 하고, 일정 기간 **갱신(Renewal)** 해야 하는 구조이다. **만료된 도메인은 제3자가 다시 등록할 수 있다.**
---
## **Domain Name Structure**
도메인 이름(**Domain Name, DN)**을 보면 그 형태가 다양하다는 것을 알 수 있다.
```
www.blog.symbbad.com
```
위 도메인을 예로 도메인 이름의 구조를 파악해보자.
먼저 도메인 이름을 파악할 때 알고 있어야 하는 특징을 보자
✔️ 도메인 이름의 구조는 **계층적**이다
정확히 말하자면 도메인 이름은 **DNS의 계층적 메커니즘**을 표현한 것이다
✔️도메인 이름의 처리 순서는 **뒤에서 부터 이루어 진다**
우리가 도메인 이름을 읽을 때 앞에서 부터 읽는다. 그런데 이 도메인 이름이 처리될 때는 맨 뒤에서 부터 처리된다.
아래 그림을 보면 맨 뒤에 점( . )이 표현되어 있는데 일반적으로 이 점은 생략된다.

* **루트 도메인 (Root Domain)**
* 점(`.`)으로 표시되면, 일반적으로 생략한다
* **최상위 도메인 (Top Level Domain, TLD)**
* 도메인이 서비스 목적을 알려준다.
* 일반 TLD(gTLD): com(상업), .org(비영리), .edu(교육) 등 국가 코드
* TLD(ccTLD).kr, .jp, .us 등 특정 국가를 나타냄
* 새롭게 도입된 TLD.app, .tech 등 특정 산업이나 관심사에 맞춘 gTLD. 현대에서 도메인은 단순 식별을 넘어선 브랜딩이나 창의적인 활용도 이루고 있다.
* **2차 도메인 (Second Level Domain, SLD)**
* Domain Name의 고유한 이름
* **서브 도메인 (Subdomain)**
* 2차 도메인의 아래로 추가된 계층인데, 특정 서비스나 섹션을 표현할 수 있다.
* 예를 들어 symbbad.com이라는 도메인 이름을 구입했다고 하자. 이 도메인 이름을 기준으로 blog.symbbad.com이나 portfolio.symbbad.com와 같은 서브 도메인을 생성할 수 있다.
* **호스트명 (Hostname)**
* `Domain Name` 구조에서 가장 왼쪽(첫번째)에 위치하고 특정 장치나 서버를 지칭한다. 호스트명이 생략될 수 있다. 예로는 `www`, `ftp`, `mail`과 같은 것들이 사용된다.
---
## **DNS (Domain Name System)**
**Domain Name을 IP 주소로 바꿔주는 역할을 수행**한다. Domain Name - IP 주소를 매핑한 데이터를 갖고 있는 **분산 네트워크 시스템**이다.
### **DNS Strucuture**
DNS는 요청을 받으면, **요청 받은 도메인 이름을 IP 주소로 반환해 준다.**
이 작동 구조가 **계층적 구조**로 설계 되어 있다.
1. **루트 계층 (Root Level)**
- DNS 계층에서 최상위 계층에 해당한다. 인터넷 도메인 시스템의 시작점이다
- **Root DNS**가 이 계층에 존재하고 **모든 DNS 쿼리는 루트 계층에서 시작**한다
- Domain Name 구조 중 **.com, .org, .net, .kr와 같은 최상위 도메인을 관리하는 DNS Server로 쿼리를 전달**한다.
2. **최상위 도메인 계층 (Top Level Domain DNS)**
* **루트 계층 (Root Level)** 바로 아래 위치하며 .**com, .org, .net, .kr와 같은 최상위 도메인을 관리**한다.
3. **2차 도메인 계층 (Second Domain Level)**
* 최상위 도메인 계층의 아래에 위치하고, **고유한 이름의 도메인을 관리**한다.
* `blog.symbbad.com`의 `symbbad` 부분을 관리
- 하위 도메인이나 특정 서비스로 트래픽을 분배한다.
- 도메인 소유자가 설정한 DNS 레코드를 저장하고 관리한다.
4. **서브 도메인 계층 (Subdomain Level)**
* 2차 도메인 아래에 위치하고, **2차 수준 도메인의 특정 섹션이나 서비스를 관리**한다.
* `blog.symbbad.com`의 `blog` 부분을 관리
* 도메인 소유자는 서브 도메인을 자유롭게 생성하고 관리할 수 있다.
5. **호스트 계층 (Host Layer)**
* 서브 도메인 계층에 위치하고, **특정한 장치나 서버를 지칭**한다.
### **DNS 명칭**
#### **기능적 역할에 따른 분류**
* **재귀적 DNS (Recursive DNS)**
➡️ 사용자의 DNS 요청을 받고 다른 DNS 서버와 통신해서 최종 IP 주소를 가져오는 서버. IP 주소를 갖고 오기 위해 발로 뛰는 요원이라고 생각하자.
* **권위적 DNS (Authoritative DNS)**
➡️ 특정 도메인 이름에 대한 정보를 저장하고 관리하는 서버. 요청에 대해 다른 DNS에 물어보지 않고 바로 대답하는 서버.
* **캐시 DNS (Cache DNS)**
➡️ 처리한 DNS 요청의 결과를 일정 시간 동안 저장하여 동일 요청 시 빠르게 응답하는 서버. 일반적으로 재귀적 DNS에 포함된 기능
#### **운영 주체에 따른 분류**
* **공용 DNS (Public DNS)**
➡️ 누구나 사용할 수 있는 공용 DNS
➡️ 재귀 DNS / 캐시 DNS
* **로컬 DNS (Local DNS)**
➡️ 사용자 네트워크에서 기본 설정된 DNS
➡️ 가정에서는 보통 사용하는 ISP의 DNS를 로컬 DNS로 사용하게 된다
➡️ 캐시 서버로도 동작해서 요청 성능을 높이는 경우도 있음
* **ISP DNS (Internet Service Provider DNS)**
➡️ ISP가 제공하는 DNS 서버
➡️ 재귀적 DNS 서버 및 캐시 DNS 역학을 수행
➡️ DNS 하이재킹, 피싱 사이트 차단 미흡등의 취약점 존재
---
## **DNS 메커니즘**
사용자가 웹 브라우저에서 Domain Name을 입력하고 접속 시도 시 IP 주소를 받아오는 프로세스
1. **자기 PC 메모리를 검색한다**
- DNS Cache를 확인한다.
- DNS Cache는 PC가 자체적으로 유지하고 있다
2. **DNS Cache에서 데이터를 찾을 수 없다면, hosts file을 확인한다**
- hosts file은 수동으로 정의된 도메인과 IP 주소 간의 매핑 정보가 들어있다.
3. **hosts file에서 데이터를 찾을 수 없다면, DNS forwarding 기능이 있는 공유기를 사용하는 경우 공유기에게 IP 주소를 요청하고 공유기는 ISP DNS에게 이 요청을 전달한다.**
* 가정 기준으로 Local DNS는 ISP DNS를 사용하는 것이 일반적이므로 ISP DNS라고 표현하겠다.
* DNS Cache를 지원하는 공유기이면서 해당 IP 주소를 가지고 있는 경우, 바로 IP 주소를 반환한다.
4. **공유기가 ISP DNS에게 요청을 전달하면, ISP DNS에는 다음 작업이 진행된다.**
- Cache 확인
- ISP DNS`에 해당 데이터의 해당 도메인 이름의 IP 주소가 존재하면 공유기에게 IP 주소를 반환한다.
- 공유기는 반환 받은 IP 주소를 `PC`에게 전달한다.
- DNS Cache를 지원하는 공유기인 경우, 해당 데이터를 TTL 시간 만큼 Caching하여 갖고 있다가 같은 질의를 받으면 바로 IP를 반환함으로서 속도를 높인다
- Cache 없음
- ISP DNS는 Root DNS에게 질의 과정을 시작한다.
- ISP DNS는 `Root DNS`에게 질의 과정을 통해 반환 받은 IP 주소를 `공유기`에게 전달하고 해당 데이터를 TTL 시간 만큼 Caching하여 갖고 있다가 같은 질의를 받으면 바로 IP를 반환함으로서 속도를 높인다.
**Root DNS 질의 과정**
1. **Root DNS 질의**
- ISP DNS는 자체 DNS Cache가 있다면 바로 IP 주소를 반환한다.
- 없다면 `ISP DNS`는 `Root DNS`에게 `.com`에 대한 질의를 한다.
- Root DNS는 ISP DNS`에게 .com을 관리하는 DNS 목록을 반환한다.
2. **TLD DNS 질의**
* ISP DNS`는 반환 받은 목록 중 최적의(자신에게 제일 가깝거나 응답이 빠른) .com DNS에게 google.com에 대한 질의를 한다.
* .com DNS는 ISP DNS에게 google을 관리하는권한 있는 DNS 목록을 반환한다.
3. **Authoritative DNS 질의**
* ISP DNS는 반환 받은 목록 중 최적의(자신에게 제일 가깝거나 응답이 빠른) google DNS에게 http://www.google.com 에 대한 질의를 한다.
**최정 IP 주소 응답**
google DNS는 최종 응답으로 123.123.123.123 IP 주소를 Local DNS`에게 반환하고 PC는 http://www.google.com 에 대한 IP 주소를 획득하게 된다.


---
### 💡 **참고 자료**
- [https://www.youtube.com/watch?v=XXzxetbAIfA](https://www.youtube.com/watch?v=XXzxetbAIfA\) "널널한 개발자 Youtube")
- [https://inpa.tistory.com/entry/WEB-%F0%9F%8C%90-DNS-%EA%B0%9C%EB%85%90-%EB%8F%99%EC%9E%91-%EC%99%84%EB%B2%BD-%EC%9D%B4%ED%95%B4-%E2%98%85-%EC%95%8C%EA%B8%B0-%EC%89%BD%EA%B2%8C-%EC%A0%95%EB%A6%AC](https://inpa.tistory.com/entry/WEB-%F0%9F%8C%90-DNS-%EA%B0%9C%EB%85%90-%EB%8F%99%EC%9E%91-%EC%99%84%EB%B2%BD-%EC%9D%B4%ED%95%B4-%E2%98%85-%EC%95%8C%EA%B8%B0-%EC%89%BD%EA%B2%8C-%EC%A0%95%EB%A6%AC "Impa")
---