DNS & CDN

DNS

DNS Service?

네트워크의 도메인이나 호스트 이름을 숫자로 된 IP 주소로 해석( 반대의 경우도 해석 )해주는 Network Service이다.

DNS Server

DNS Service를 제공하는 서버이다. IP에 대한 도메인을 저장하고 있기 때문에, 일종의 전화번호부 역할을 하며 DNS Server가 모여 DNS( Domain Name System )을 구성한다. (분산형 데이터베이스 시스템)

DNS Server는 어떤 프로토콜 위에서 동작할까?

DNS 서버는 보통 UDP 프로토콜을 이용한다. TCP를 이용하면 신뢰성을 보장하기 위한 3-way handshaking 작업이 요청마다 일어날 것이고 많은 요청을 받아들이는 DNS 서버 입장에서 부하가 생길 수 있다.

또 DNS 요청은 매우 작아서 UDP 세그먼트에 내에 잚 맞는다. 하지만! 데이터 전송량이 커서 신뢰성 있는 데이터를 보장받기 위해 TCP를 사용하기도 한다.

그럼 URL을 입력하면 어떤 일이 일어날까~

  1. URL을 웹 브라우저의 주소창에 입력한다.
  2. 웹 브라우저가 URL을 해석하고, 문법에 맞지 않으면 기본 검색엔진으로 검색한다.
  3. 문법에 맞으면 URL의 호스트 부분을 인코딩한다.
  4. HSTS( HTTP Strict Transport Security ) 목록을 확인하고 있으면 HTTPS로 없으면 HTTP 요청을 한다.
  5. DNS (Domain Name Server) 를 조회한다.

    1. 브라우저/로컬 캐시를 확인해서 해당 도메인의 IP가 있는지 확인한다.
    2. 없으면 OS에게 DNS서버에 요청하라고 지시한다.
    3. DNS 서버는 해당 도메인에 해당하는 IP를 응답해준다.
  6. TCP 소켓을 열고 3-way handshake로 클라이언트 - 서버간 세션을 수립한다.
  7. HTTPS 요청이라면 TLS handshake 과정을 통해 세션키를 생성한다.
  8. 서버 - 클라이언트간 요청을 주고받는다. ( 캐싱 가능한 데이터는 캐싱도 하고.. )
  9. 웹 브라우저는 받은 리소스를 렌더링한다.
  10. 4-way hanshake 과정을 통해 세션을 종료한다.

요약 하자면

주소창에 url을 입력하면 DNS 서버를 조회해서 도메인에 해당하는 IP를 받고 해당 IP를 갖고있는 서버와 TCP 프로토콜 기반으로 세션을 수립하고 ( HTTPS는 추가적인 과정 거치겠지 ) 클라이언트는 서버로부터 자원을 받은 뒤 세션을 종료한다. 라고 할 수 있겠군.


CDN ( Contents Delivery Network )

CDN은 컨텐츠 전달 네트워크의 약자로 말 그대로, 컨텐츠를 전달하는 네트워크를 구성하는 것이다. 보통 웹 서버에 HTTP 요청을 하여 리소스를 가져오지만 웹 서버가 아니라 현재 사용자가 접속한 위치에서 가장 가까운 서버에 리소스를 캐싱 해놓고 보다 빠르게 가져오는 기법이다. 물론 네트워크를 구축하는데 비용이 들긴 하지만 만약 구축하게 되면, 정적 리소스를 보다 빠른 속도로 서비스할 수 있다.

즉, End Point 유저가 Origin 서버에 요청을 하게되면, 응답을 받는 시간도 길어지고 Origin 서버 입장에서는 여러 유저의 요청을 받아 들이면 부하도 심해질거야. 그러니 중간에 캐시서버를 여러개 만들어서 가까운 캐시서버가 서비스를 제공하면 부하도 줄어들고 사용자 경험도 증가하겠지~

장점

  • 리소스를 캐싱해놓기 때문에 응답속도(로딩속도)가 빠르다.
  • Origin 서버의 부하가 줄어든다.

단점

  • 캐시서버 네트워크를 구축하는 데 비용이 많이 든다.
  • 사용자가 CDN을 막아놓으면 리소스 로딩이 막힌다.

Reference

  1. https://byeong9935.tistory.com/13
  2. https://dother-world.tistory.com/9
  3. https://github.com/baeharam/Must-Know-About-Frontend/blob/master/Notes/network/type-url-process.md

Written by@[HongDongUk]
공부한 것을 소소하게 적는 블로그.

GitHubFacebook