DNS란?
DNS (Domain Name System) is a hierarchical and decentralized naming system for Internet connected resources. DNS maintains a list of domain names along with the resources, such as IP addresses, that are associated with them.The most prominent function of DNS is the translation of human-friendly domain names (such as mozilla.org) to a numeric IP address (such as 151.106.5.172); this process of mapping a domain name to the appropriate IP address is known as a DNS lookup. By contrast, a reverse DNS lookup (rDNS) is used to determine the domain name associated with an IP address. - 출처: mdn
- DNS is a hierarchical and decentrallized naming system for Internet connected resources ⇒ DNS는 인터넷 연결된 자원들을 위한 계층적이고 탈중앙화된 네이밍 시스템이다.
- The most prominent function of DNS is the translation of human-friendly domain names (such as mozilla.org) to a numeric IP address (such as 151.106.5.172) ⇒ DNS의 가장의 중요한 기능은 도메인 네임(naver.com)을 숫자인 IP 주소로 바꿔주는 것이다.
Domain Name
DNS Record
DNS records (aka zone files) are instructions that live in authoritative DNS servers and provide information about a domain including what IP address is associated with that domain and how to handle requests for that domain. - cloudfare.com
- DNS record들은 권한이 있는 DNS 서버내에 있는 절차들이다.
- 이 절차들은 특정 domain에 대한 정보를 제공하기도 하고 어떤 IP 주소와 연동이 되어있는지와 같은 정보들을 제공하기도 한다.
- 또한 domain과 관련된 요청은 어떻게 처리해야하는지에 대한 정보들이 담겨 있다.
These records consist of a series of text files written in what is known as DNS syntax.
- 이 레코드들은 DNS 문법으로 쓰여진 여러개의 텍스트 파일 포함하고 있다.
All DNS records also have a ‘TTL’, which stands for time-to-live, and indicates how often a DNS server will refresh that record.
- 모든 DNS 레코드는 TTL(time-to-live)를 가지고 있는데 이는 DNS서버가 얼마나 자주 그 record를 refresh할지를 가리킨다.
가장 많이 쓰이는 DNS Record Types
DNS 레코드 유형 | 설명 |
A | 도메인의 IP 주소를 갖고 있는 레코드 |
CNAME | 하나의 도메인을 하위도메인이나 다른 도메인으로 전달하고 IP주소를 제공하지 않는다. |
MX | 이메일을 이메일서버로 전달하도록 가리키는 레코드 |
TXT | 관리자가 텍스트 메모를 레코드에 저장할 수 있습니다 |
NS | DNS 항목의 이름 서버를 저장합니다 |
SOA | 도메인에 대한 관리자 정보를 저장합니다. |
SRV | 특정 서비스에 대한 포트를 지정합니다 |
PTR | 리버스 조회에서 도메인 이름을 제공합니다 |
CDN이란 무엇인가?
콘텐츠 전송 네트워크(CDN)는 데이터 사용량이 많은 애플리케이션의 웹 페이지 로드 속도를 높이는 상호 연결된 서버 네트워크.
사용자가 웹 사이트를 방문할 때 해당 웹 사이트 서버의 데이터는 사용자의 컴퓨터에 도달하기 위해 인터넷을 통해 이동해야 하는데,
아주 먼곳에 있는 파일을 매번 가져와야 한다면 네트워크 구간이 멀어서 실패율도 있고, 전송 속도가 느리고, 오래 걸릴 수 있다. 이를 자주 쓰는 파일들을 가까운 지역의 서버에 올려 놓는다. 그렇게 되면 빠른 접근이 가능해진다.
즉, CDN으로 HTML 페이지, javascript 파일, 스타일시트, 이미지, 동영상을 비롯한 인터넷 콘텐츠를 로드하는 데 필요한 자산을 신속하게 전송할 수 있다는 뜻이기도 하다.
또한 CDN을 올바르게 구성하면 DDOS(Distributed Denial of Service) 공격 같은 일반적인 악성 공격으로부터 웹사이트를 보호하는 데도 도움이 된다고 한다.
그렇기 때문에 CDN 서비스이 인기는 나날이 성장하고 있으며 Facebook, Netflix, Amazon을 비롯한 주요 웹사이트의 트래픽을 포함한 오늘날 웹 트래픽 대부분이 CDN을 이용하고 있다.
CDN은 왜 필요할까?
높은 효율성
콘텐츠 전송 네트워크(CDN)의 주 목적은 대기 시간을 줄이거나 네트워크 설계로 인해 발생하는 통신 지연을 줄이는 것이다. 인터넷의 글로벌하고 복잡한 특성으로 인해 웹 사이트(서버)와 사용자(클라이언트) 간의 통신 트래픽은 아주 먼 물리적 거리를 이동한다.
동시에 클라이언트에서 서버로 요청을 보내고 응답을 반환하는 양방향 통신이라고 할 수 있다.
CDN은 클라이언트와 웹 사이트 서버 간에 중간 서버를 두어 효율성을 높이며 CDN 서버는 클라이언트-서버 통신의 일부를 관리한다.
이처럼 웹 서버에 대한 웹 트래픽을 줄이고, 대역폭 소비를 줄이며, 애플리케이션의 사용자 환경을 개선할 수 있다
웹페이지 로드 시간 단축
페이지 로드 시간이 너무 느리면 웹 사이트 트래픽이 감소하고 방문자는 이탈하기 때문에
CDN을 통해 반송률을 줄이고 사용자가 사이트에서 보내는 시간을 늘릴 수 있다.
대역폭 비용 절감
들어오는 모든 웹 사이트 요청은 네트워크 대역폭을 사용하기 때문에 대역폭 비용이 상당히 높다.
캐싱 및 기타 최적화를 통해 CDN은 오리진 서버가 제공해야 하는 데이터의 양을 줄여 웹 사이트 소유자의 호스팅 비용을 절감할 수 있다.
콘텐츠 가용성 제고
한 번에 너무 많은 방문자가 방문하거나 네트워크 하드웨어 오류가 발생하면 웹 사이트가 중단될 수 있다.
CDN 서비스는 더 많은 웹 트래픽을 처리하고 웹 서버의 로드를 줄일 수 있다.
또한 하나 이상의 CDN 서버가 오프라인으로 전환되면 다른 운영 서버가 해당 서버를 대체하여 서비스가 중단되지 않도록 할 수 있다.
웹 사이트 보안 강화
분산 서비스 거부(DDoS) 공격은 대량의 가짜 트래픽을 웹 사이트로 전송하여 애플리케이션이 작동 중지되도록 만들려고 시도합니다. CDN은 여러 중간 서버 간에 로드를 분산하여 오리진 서버에 미치는 영향을 줄임으로써 이러한 트래픽 급증을 처리할 수 있다.
CDN 작동원리
콘텐츠 전송 네트워크(CDN)는 여러 지리적 위치에 접속 지점(POP) 또는 CDN 엣지 서버 그룹을 설정하는 방식으로 작동한다.
지리적으로 분산된 이 네트워크는 캐싱, 동적 가속 및 엣지 로직 계산의 원리를 기반으로 작동한다.
캐싱
캐싱은 더 빠른 데이터 액세스를 위해 동일한 데이터의 여러 복사본을 저장하는 프로세스이다.
컴퓨팅에서 캐싱의 원리는 모든 유형의 메모리 및 스토리지 관리에 적용되는데, CDN 기술에서 이 용어는 네트워크의 여러 서버에 정적 웹 사이트 콘텐츠를 저장하는 프로세스를 의미한다.
CDN에서 캐싱은 다음과 같은 원리로 작동한다.
- 지리적으로 멀리 떨어진 웹 사이트 방문자는 사이트에서 정적 웹 콘텐츠를 처음 요청한다.
- 요청이 웹 애플리케이션 서버 또는 오리진 서버에 도달하면 오리진 서버는 원격 방문자에게 응답을 보낸다. 동시에 해당 방문자와 지리적으로 가장 가까운 CDN POP에 응답 복사본을 보낸다.
- CDN POP 서버는 복사본을 캐싱된 파일로 저장한다.
- 다음에 해당 방문자 또는 해당 위치에 있는 다른 방문자가 동일한 요청을 하면, 오리진 서버가 아닌 캐싱 서버가 응답을 보낸다.
동적 가속
동적 가속은 웹 애플리케이션과 클라이언트 사이의 중개 CDN 서버로 인해 발생하는 동적 웹 콘텐츠 요청에 대한 서버 응답 시간을 단축하는 것이다.
사용자 요청이 있을 때마다 콘텐츠가 변경될 수 있기 때문에 동적 웹 콘텐츠에서는 캐싱이 제대로 작동하지 않는다고 한다.
CDN 서버는 모든 동적 요청에 대해 오리진 서버와 다시 연결해야 하지만 자신과 오리진 서버 간의 연결을 최적화하여 프로세스를 가속화 한다.
클라이언트가 인터넷을 통해 웹 서버로 직접 동적 요청을 보내는 경우 네트워크 지연 시간으로 인해 요청이 손실되거나 지연될 수 있고 보안 검증을 위해 연결을 열고 닫는 데에도 시간이 걸릴 수 있다.
반면, 근처의 CDN 서버가 요청을 오리진 서버로 전달할 경우, 신뢰할 수 있는 지속적인 연결이 이미 설정이 되어 있다.
예를 들어 다음과 같은 기능을 통해 이들 간의 연결을 더욱 최적화할 수 있다.
- 지능형 라우팅 알고리즘
- 오리진에 대한 지리적 근접성
- 클라이언트 요청을 처리할 수 있으므로 클라이언트 요청을 최소화.
엣지 로직 계산
클라이언트와 서버 간의 통신을 단순화하는 논리적 계산을 수행하도록 CDN 에지 서버를 프로그래밍할 수 있다. 다음은 서버의 수행 예시이다.
- 사용자 요청을 검사하고 캐싱 동작을 수정.
- 잘못된 사용자 요청을 확인하고 처리.
- 응답하기 전에 콘텐츠를 수정하거나 최적화.
웹 서버와 네트워크 엣지 간에 애플리케이션 로직을 배포하면 개발자가 오리진 서버의 컴퓨팅 요구 사항을 오프로드하고 웹 사이트 성능을 높이는 데 도움이 된다.
Amazon CloudFront
아마존의 CloudFront라고 하는 서비스는 CDN(Content Delivery Network) 서비스인데
Amplify를 이용해서 배포를 하게 될 경우 자동으로 이 CloudFront에 등록해 준다.
⇒ 아마존 클라우드프론트가 이런 cdn 서비스였구나..