## Domain Name
Domain Name, DN은 인터넷에서 사용되는 IP 주소와 매핑된 문자열 주소다. IP 주소는 숫자열로 이루어져 있어서 사람이 기억하기 어렵기 때문에 문자열로 이루어진 쉬운 주소를 실제 IP 주소와 연결한 것이다.
예로, 168.126.63.1라는 IP 주소에 symbbad.com이라는 문자열 주소를 매핑해서 **전화번호에 이름을 저장**하는 거라 생각하면 된다.
### ++ Domain Name 대여
만일 사이트를 운영하게 되면 도메인 이름을 고려해야한다. 도메인 이름 없이 IP 주소로 운영해도 되겠지만 온라인 접근성이 떨어지고 브랜드의 정체성을 비롯해 법적 보호도 받을 수 없어서 도메인 이름을 사용하는 편이 좋다. 도메인 이름을 사용하려면 인증 받은 기관을 통해 등록해야 한다. 한국에서 많이 사용하는 기관인 가비아와 같은 사이트에서 등록할 수 있다. 잘 이해야하는 점이, 어떤 도메인 이름에 값을 지불했다고 해서 그 도메인 이름의 영구적 소유권을 얻는 건 아니다. 일정 기간 동안 도메인 이름을 사용할 수 있는 권리에 대한 비용을 지불하고 대여하는 거다.
***
## Domain Name Structure
`Domain Name` 구조를 파악하기 전에 알고 가야 할 포인트가 있다.
`Domain Name`의 구조는 **계층적**이다. 정확하게 말하자면 **DNS의 계층적 메커니즘**의 구조를 표현한 것이다.
우리가 도메인 이름을 읽을 때 당연히 앞부터 읽는다. 그런데 컴퓨터 세상에서는 점(`.`)을 기준으로 맨 뒤부터 읽고 앞으로 갈 수록 점점 세부화 된다.
![[doamin 2.png]]
#### 1. 루트 도메인 (Root Domain)
점(`.`)으로 표시되면, 일반적으로 생략한다
#### 2. 최상위 도메인 (Top Level Domain, TLD)
도메인이 서비스 목적을 알려준다.
* 일반 TLD(gTLD): .com(상업), .org(비영리), .edu(교육) 등.
* 국가 코드 TLD(ccTLD): .kr, .jp, .us 등 특정 국가를 나타냄.
* 새롭게 도입된 TLD: .app, .tech 등 특정 산업이나 관심사에 맞춘 gTLD.
현대에서 도메인은 단순 식별을 넘어선 브랜딩이나 창의적인 활용도 이루고 있다
#### 3. 2차 도메인 (Second Level Domain, SLD)
`Domain Name`의 고유한 이름
#### 4. 서브 도메인 (Subdomain)
2차 도메인의 아래로 추가된 계층인데, 특정 서비스나 섹션을 표현할 수 있다.
예를 들어 symbbad.com이라는 도메인 이름을 구입했다고 하자. 이 도메인 이름을 기준으로 blog.symbbad.com이나 portfolio.symbbad.com와 같은 서브 도메인을 생성할 수 있다.
#### 5. 호스트명 (Hostname)
`Domain Name` 구조에서 가장 왼쪽(첫번째)에 위치하고 특정 장치나 서버를 지칭한다. 호스트명이 생략될 수 있다.
예로는 `www`, `ftp`, `mail`과 같은 것들이 사용된다.
DNS 전체 작동 방식이 꽤 복잡한데 충분한 전달을 위해 뒤에 있을 DNS 설명에 자세히 설명하겠다.
***
## DNS (Domain Name System)
`Domain Name System`의 약자로 `Domain Name`을 IP 주소로 바꿔주는 역할을 수행한다. `Domain Name` - `IP 주소`를 매핑한 데이터를 갖고 있는 계층적 DB이다.
***
## DNS Strucuture
`DNS`가 도메인 이름을 IP 주소로 변환하는데 이 작동 구조가 **계층적 구조**로 설계 되어 있다.
#### 1. 루트 계층 (Root Level)
**DNS 계층에서 최상위 계층**에 해당한다. 인터넷 도메인 시스템의 시작점이다.
**Root DNS**가 이 계층에 존재하고 모든 DNS 쿼리는 루트 계층에서 시작한다.
`Domain Name`의 `.com`, `.org`, `.net`, `.kr`와 같은 최상위 도메인을 관리하는 `DNS Server`로 쿼리를 전달한다.
#### 2. 최상위 도메인 계층 (Top Level Domain DNS)
**루트 계층** 바로 아래 위치하며 `.com`, `.org`, `.net`, `.kr`와 같은 최상위 도메인을 관리한다.
* **일반적인 TLD (gTLD)**
* `.com`
* `.org`
* `.net`
* **국가 코드 TLD (ccTLD)**
* `.kr`
* `.jp`
#### 3. 2차 도메인 계층 (Second Domain Level)
**최상위 도메인 계층**의 아래에 위치하고, 고유한 이름의 도메인을 관리한다.
> `blog.symbbad.com`의 `symbbad` 부분을 관리
하위 도메인이나 특정 서비스로 트래픽을 분배한다.
도메인 소유자가 설정한 DNS 레코드를 저장하고 관리한다.
#### 4. 서브 도메인 계층 (Subdomain Level)
**2차 도메인 아래**에 위치하고, 2차 수준 도메인의 특정 섹션이나 서비스이다.
> `blog.symbbad.com`의 `blog` 부분을 관리
도메인 소유자는 서브 도메인을 자유롭게 생성하고 관리할 수 있다.
#### 5. 호스트 계층 (Host Layer)
**서브 도메인 계층**에 위치하고,, 특정한 장치나 서버를 지칭한다.
***
## 6. DNS 명칭
### 6.1 기능적 역할에 따른 분류
#### 6.1.1 재귀적 DNS (Recursive DNS)
사용자의 DNS 요청을 받고 다른 DNS 서버와 통신해서 최종 IP 주소를 가져오는 서버. IP 주소를 갖고 오기 위해 발로 뛰는 요원이라고 생각하자.
#### 6.1.2 권위적 DNS (Authoritative DNS)
특정 도메인 이름에 대한 정보를 저장하고 관리하는 서버. 요청에 대해 다른 DNS에 물어보지 않고 바로 대답하는 서버.
#### 6.1.3 캐시 DNS (Cache DNS)
처리한 DNS 요청의 결과를 일정 시간 동안 저장하여 동일 요청 시 빠르게 응답하는 서버. 일반적으로 재귀적 DNS에 포함된 기능
### 6.2 운영 주체에 따른 분류
#### 6.2.1 공용 DNS (Public DNS)
누구나 사용할 수 있는 공용 DNS
재귀 DNS / 캐시 DNS
#### 6.2.2 로컬 DNS (Local DNS)
사용자 네트워크에서 기본 설정된 DNS
가정에서는 보통 사용하는 ISP의 DNS를 로컬 DNS로 사용하게 된다
캐시 서버로도 동작해서 요청 성능을 높이는 경우도 있음
#### 6.2.3 ISP DNS (Internet Service Provider DNS)
ISP가 제공하는 DNS 서버
재귀적 DNS 서버 및 캐시 DNS 역학을 수행
DNS 하이재킹, 피싱 사이트 차단 미흡등의 취약점 존재
***
## 7. 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 질의 과정
![[DNS 메커니즘 1.png]]
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`에게 `www.google.com`에 대한 질의를 한다.
4. **최정 IP 주소 응답**: `google DNS`는 최종 응답으로 `123.123.123.123` IP 주소를 `Local DNS`에게 반환하고 `PC`는 `www.google.com`에 대한 IP 주소를 획득하게 된다.
![[doamin 1.gif]]
***
## 참고 자료
* [널널한 개발자 Youtube](https://www.youtube.com/watch?v=XXzxetbAIfA)
* [Impa Blog](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)
***