DNS
- 도메인(Domain) -> 원래의 ip주소를 기억하기 쉬운 닉네임으로 바꾸는 개념
(www(호스팅주소)+이름.com(도메인)->뒷 부분을 도메인이라고 함)
DNS(Domain Name System)란?
- IP주소를 기억하기 쉬운 도메인으로 바꾸거나 도메인을 다시 IP주소로 바꾸어주는 데이터 베이스 시스템, 연결 되어있는 IP주소와 도메인이 저장된 곳이 DNS/각 도메인들마다 DNS와 연결해주는 서버 역할을 하는 DNS 서버,다른 말로 네임서버가 있다.
DNS 구조

- 루트 : DNS 트리 구조의 정점에 있는 서버로서 최상위도메인(TLD) 서버의 주소를 저장하고 안내하는 역할
- 1단계 도메인/최상위 도메인(Top Level Domain) : 1단계 도메인인 최상위도메인은 국가를 나타내는 국가 코드 도메인과 등록인의 목적에 따라 사용되는 일반 도메인으로 나뉜다.
- 2단계 도메인/Authoritative DNS
실제 도메인의 IP 주소가 기록되는 서버이며 일반적으로 호스팅 업체의 네임서버를 뜻함
- 3단계 도메인/ Recursive DNS
클라이언트의 요청을 받고 해당 도메인의 정보를 캐시된 데이터로 응답하거나 캐시된 데이터가 없을 경우 위의 네임서버에 요청을 전달하는 역할(일반적으로 ISP(internet service provider) DNS 서버등이 있다.)
DNS 동작과정
- 주소.com 입력 -> 주소.com을 가지고 있는 네임 서버에 접속 -> IP 주소를 확인 -> IP 주소를 전달 -> IP 주소를 가진 서버로 접속 – 연결된 브라우저로 실행
Blocking/Nonblocking&Synchronous/Asynhronous의 차이
- Blocking - A 함수가 B 함수를 호출 할 때, B 함수가 자신의 작업이 종료되기 전까지 A 함수에게 제어권을 돌려주지 않는 것
- Noneblocking - A 함수가 B 함수를 호출 할 때, B 함수가 제어권을 바로 A 함수에게 넘겨주면서, A 함수가 다른 일을 할 수 있도록 하는 것
- Synchronous - A 함수가 B 함수를 호출 할 때, B 함수의 결과를 A 함수가 처리하는 것
- Asynchronous - A 함수가 B 함수를 호출 할 때, B 함수의 결과를 B 함수가 처리하는 것(callback)
- Synchronous와 Asynchronous는 순서와 결과의 관점이라면, Blocking과 Nonblocking은 제어의 관점이라 볼 수 있다.

위 그림은 Blocking / Non-blocking 과 Sync / Async 는 다른 개념이라는 걸 한눈에 보여준다.
즉 ,Blocking / Non-blocking 은 호출된 함수가 호출한 함수에게 제어권을 바로 주느냐 안주느냐,
Sync / Async 는 호출된 함수의 종료를 호출한 함수가 처리하느냐, 호출된 함수가 처리하느냐의 차이다.

웹 통신의 흐름

1. 사용자가 브라우저에 도메인 이름을 입력한다.
2. DNS서버에서 사용자가 입력한 Domain name을 검색하고, 매핑되는 IP주소를 찾는다. 사용자가 입력한 URL 정보와 함께 리턴한다.
3. IP주소는 HTTP 프로토콜을 이용해서 HTTP 요청 메세지를 생성한다.
4. 생성된 HTTP 요청 메세지는 TCP 프로토콜을 사용해서 인터넷을 거쳐 해당 IP 주소의 컴퓨터(서버)로 전송된다.
5. 서버는 클라이언트의 요청을 승인하고, 응답 메세지를 전송한다.
6. 도착한 HTTP 응답 메세지는 HTTP 프로토콜을 사용하여 웹페이지 데이터로 변환되고, 웹 브라우저의 출력에 의해 사용자가 볼 수 있다.
www.example.com을 입력했을 때?

1. DNS 서버에 DNS Query(www.example.com)를 전송한다
-> 우리나라의 경우에는 통신사별로 지정된 DNS 서버가 있다.
2. DNS 서버는 루트 네임 서버에 DNS Query를 질의한다.
-> 루트 네임 서버는 .com의 ip주소를 반환한다.
3. .com 네임 서버에 DNS 쿼리를 질의한다.
-> .com 네임 서버는 example.com의 ip주소를 반환한다.
4. example.com 네임 서버에 DNS 쿼리를 질의한다.
-> www.example.com의 IP 주소를 반환한다.