AWS

DNS와 Route 53에 대해 알아보자 (1)

S_N_Y 2024. 3. 26. 10:35

 

이것에 대한건 이전 글에 조금 정리해두었는데

그 부분에 대해서 조금 살펴보고 오면 더 도움이 될 것이다.

https://670811.tistory.com/54

 

AWS Global 인프라에 사용되는 서비스와 기능에 관해

왜 글로벌 애플리케이션을 만들까?🌏 ... 글로벌 애플리케이션은 여러 지역에 배포되는 애플리케이션이다. AWS는 다양한 region과 Edge Location으로 애플리케이션이 배포된다는 의미이다. 글로벌 애

670811.tistory.com

 

#0 들어가기 앞서 DNS란?🔡

DNS는 인터넷의 중추로서 Domain Name System으로

사람에게 친숙한 호스트 이름을 대상 서버 IP 주소로 번역해준다.

=> 다시 말해 URL과 호스트 이름을 IP로 변환하는 것

예를 들어 웹 브라우저에 www.google.com 을 치면 IP주소를 주고 웹 브라우저가 이면에서 여기에 접근해서 구글로부터 데이터를 얻는 것을 말한다..!

 

<DNS 관련 용어>

✅ Domain Regidtrar(도메인 레지스트라) : 우리의 도메인 이름을 등록하는 곳 - ex) Route 53, GoDaddy...

✅ DNS Records(DNS 레코드) : A, AAAA, CNAME...

✅ Zone File(존 파일) : 모든 DNS 레코드를 포함하는 것

✅ Name Server(이름 서버) : DNS 쿼리를 실제로 해결하는 서버

 

✅Top Level Domain(TLD-최상위 도메인) : .com, .us, .in, .gov, .org...

✅Second Level Domain(SLD-2단계 도메인) : amazon.com, google.com...

DNS 용어 설명 관련 이미지 참조

 

<DNS 동작방식>

그림을 통해 원리 설명

예를 들어 공인 IP(ex:9.10.11.12)가 있고 도메인 이름 example.com을 이용해서 접근하고자 한다.

example.com이란 도메인 이름을 DNS용 서버를 등록해야 하는데 우리의 컴퓨터, 웹 서버가 응답을 받는지 살펴본다.

웨 브라우저가 example.com에 접근하기 위해서는 Local DNS Server에 "example.com을 알고있니?" 라고 물어볼 것이고 Local DNS Server는 보통 회사에 의해 할당되고 관리되거나 인터넷 서비스 제공자에게 동적으로 할당된다.

Local DNS Server가 이 쿼리를 전에 본 적이 없으면 먼저 ICANN에 의해 관리된 DNS 서버의 root에 불어볼 것이다.

ICANN 조직이 "example.com을 알고있니?"라고 물어보면 가장 먼저 요청되는 서버인 root DNS Server는 "본 적이 없다. 근데 .com은 알고 있다."라고 말할 것이다. 그래서 .com은 이름 서버(NS - Name Server) 레코드니 공인 IP 1.2.3.4로 가보라고 알려줄 것이다. (답을 갖고 있지 않지만 답에 좀 더 가까운 것을 알려주는 것)

그래서 "좋다~ 최상단 도메인에게 물어보겠다" 라고 하고 1.2.3.4. 에 있는 .com 도메인 서버에게 쿼리의 답을 요청할 것이고 이 DNS 서버에 example.com을 다시 물어보게 되어 " example.com를 알고 있니?"를 질문하게 되고 DNS 서버는 example.com가 여전히 어떤 레코드인지 몰라서 쿼리에 당장 답해줄 수 없는데 example.com라는 서버는 알고 있다. 5.6.7.8에 있다는 것을)

다음 질문을 할 공용 IP인데 Local DNS Server는 최종 서버로 서브도메인의 DNS 서버(=도메인 이름 레지스트라에 의해 관리되는 서버)이다. DNS 서버는 " example.com를 알고 있니?"라고 묻고 DNS 서버에는 example.com에 대한 항목이 있으니 알고 있다고 하고(A 레코드라는 것을) 이것의 결과로 IP9.10.11.12를 얻는다.

이제 DNS 서버가 반복적으로 물어보며 구체적인 것을 찾았고 이제 답을 알고 있으니 누가 example.com를 물어도 바로 답변해줄 수 있고 답변을 웹 브라우저에 보내고 브라우저는 답변을 받는다!

 

#1 Route 53

고가용성, 확장성을 갖췄으며 완전히 관리되는 서비스이고 권한이 있는 DNS이다.

여기서 권한이 있다는 것은 무슨 뜻이냐면

고객인 우리가 DNS 레코드를 업데이트할 수 있다는 것이다.

=> DNS에 대해 완전히 제어할 수 있다는 뜻

위의 그림을 보면 클라이언트가 있고 그들이 우리의 EC2 인스턴스 example.com에 접근하고자 한다.

그러나 지금 EC2 인스턴스에는 오직 public IP만 있는데 이때 무슨 일이 벌어지냐면 DNS 레코드를 Route 53의 호스팅 존에 쓰려고 한다. 클라이언트가 example.com에 요청하면 Route 53 서비스가 IP 54.22.33.44를 찾고 있다고 응답한다. 그러면 클라이언트는 바로 EC2 인스턴스에 접근한다. Route 53 역시 도메인 이름 레지스트라로 도메인 이름을 example.com으로 등록한다. 이 서비스를 시작할 수 있도록 작업을 직접 해볼 것이다. 또한 Route53의 리소스 관련 상태를 확인할 수 있다.

=> 100% SLA 가용성을 제공하는 유일한 AWS 서비스이다.

(➕ 추가정보 : 서비스 수준 계약(SLA)은 공급업체가 고객에게 제공하기로 약속한 서비스 수준을 명시하는 아웃소싱 및 기술 공급업체 계약이다.)

...

왜 Route 53라고 하지?🤔

53은 DNS 서비스, 즉 이름에서 사용되는 전통적인 DNS 포트인데 Route 53에서 여러 DNS 레코드를 정의하고 레코드를 통해 특정 도메인으로 라우팅하는 방법을 정의한다. (각 레코드는 도메인이나 example.com과 같은 서브도메인 이름과 같은 정보를 포함한다)

 

<레코드 종류 살펴보기>

✅ A 레코드 : 호스트 이름과 IPv4를 매핑한다.

(예 : example.com은 1.2.3.4로 바로 연결) 

✅ AAAA 레코드 : A와 비슷한 아이디어인데 호스트 이름을 IPv6에 매핑한다.

✅ CNAME : 호스트 이름을 다른 호스트 이름과 매핑한다.

+)

Route 53에서 DNS namespace(이름 공간) 또는 ZoneApex의 상의 노드에 대한 CNAMES를 생성할 수 없다.

=> 예를 들어 example.com에 CNAME을 만들 수는 없지만 www.example.com에 대한 CNAME 레코드는 만들 수 있다.

✅ NS : Hostes Zone(호스팅 존)의 Name Server(이름 서버)라는 말의 줄임말이고 서버의 DNS 이름 혹은 IP 주소로 호스팅 존에 대한 DNS 쿼리에 응답할 수 있다. 그리고 트래픽이 도메인으로 라우팅 되는 방식을 제어한다.

...

근데 호스팅 존이 뭐지?🤷‍♂️🤷‍♂️

아래에서 살펴보겠다. 

 

#2 Hosted Zones (호스팅 존)

호스팅 존은 레코드의 컨테이너인데

도메인과 서브도메인으로 가는 트래픽의 라우팅 방식을 정의한다.

 

호스팅 존에 두 종류가 있다.

☑️ Public Hosted Zones : 퍼블릭 도메인 이름을 살 때마다 mypublicdomain.com이 퍼블릭 도메인 이름이라면 퍼블릭 호스팅 존을 만들 수 있다. 퍼블릭 존은 쿼리에 도메인 이름 application1.mypublicdomainname.com의 IP가 무엇인지 알 수 있다.

☑️ Private Hosted Zones :  또한 프라이빗 호스팅 존이 있는데 공개되지 않는 도메인 이름을 지원한다. 가상 프라이빗 클라우드(VPC)만이 URL을 resolve할 수 있다. (application1.company.internal 같은 경우)

 

Public Hosted Zones의 경우, 공개된 클라이언트로부터 온 쿼리에 응답할 수 있다. 웹 브라우저에서 example.com을 요청하면 IP를 반환한다.

반면 Private Hosted Zones의 경우, 해당 VPC에서만 동작한다. (비공개 도메인 이름의 프라이빗 리소스를 식별할 수 있게 한다)

 

위의 그림을 예로 들어 EC2 인스턴스 1개가 있고 webapp.example.internal을 식별하고자 하는데 또 다른 EC2 인스턴스에서는 api.example.internal을 식별하기 원하고 데이터베이스에서는 db.example.internal을 식별하고자 한다. 프라이빗 호스팅 존에 등록하려고 하는데 첫 번째 EC2 인스턴스가 api.example.internal을 요청하는 경우, 프라이빗 호스팅 존은 프라이빗 IP 10.0.0.10이라는 답을 갖고 있다. EC2 인스턴스는 데이터베이스에 연결이 필요할 수도 있는 두 번째 EC2 인스턴스에 연결한다.

database.example.internal가 무엇인지 물어보면 프라이빗 호스팅 존은 프라이빗 IP를 알려준다. EC2 인스턴스는 데이터베이스에 직접적으로 연결할 수 있고 퍼블릭 호스팅 존은 프라이빗 호스팅 존과 똑같이 동작하지만 퍼블릿 호스팅 존은 누구든 우리의 레코드를 쿼리할 수 있다. 

route 53 시작할 때 선택하는 항목

 

'AWS' 카테고리의 다른 글

Rote 53에 대해 알아보자 (3)  (1) 2024.03.28
Route 53에 대해 알아보자 (2)  (0) 2024.03.27
ElastiCache에 대해 알아보기  (0) 2024.03.25
RDS (3)  (0) 2024.03.24
RDS (2) - Aurora에 대해 알아보자  (0) 2024.03.23