aws에서는 도메인을 route 53에 등록해서 DNS(Domain Name System) 서비스를 쉽게 사용할 수 있다. 단순히 도메인을 ip 주소로 바꿔주는 역할을 하지만 그 과정에는 체계적인 시스템이 숨어있다. 체계적인 시스템 안에 로컬 환경과 여러 cache layer까지 있다 보니 정확히 알지 못하면 헷갈릴만한 요소가 많아 주의해야 한다.
DNS 과정
먼저 www.naver.com을 접속하기 위해 ip주소를 얻어오는 과정은 대략 다음과 같다.
1. 내 컴퓨터
os마다 다르지만 /etc/host
파일에서 www.naver.com을 도메인이 매핑되어있는지 확인한다.
DNS 서버가 존재하기 전에는 이 파일로 모든 매핑을 관리했으나 지금은 불가능한 일이다. 하지만 여전히 가장 먼저 참조하기 때문에 개인적인 테스트나 개발 환경을 설정할 때 요긴하게 쓸 수 있다.
다시 본론으로 돌아오면 이 파일에는 매핑이 없으니 DNS 서버한테 물어봐야 한다.
직접 DNS 서버를 설정하지 않아도 자동으로 지정이 되어있다.
2. DNS 서버
DNS 서버도 내가 찾으려는 도메인이 어떤 ip인지 처음에는 모르기 때문에 다른 서버에게 물어봐야 한다. 찾으려는 도메인의 ip를 알고 있는 네임서버에게 바로 물어보면 좋겠지만 어떤 네임서버인지 모르기 때문에 가장 최상단의 root 네임서버에게 물어본다.
모든 dns 서버는 root 네임서버를 알고 있다.
3. Root 네임서버
도메인으로부터 ip를 알아내기 위한 첫 관문으로 최상위 도메인 TLD(Top Level Domain) 네임서버를 알고 있다.
요청 온 FQDN(Full Qualified Domain Name)의 .com
을 보고 그에 해당하는 com
네임서버를 반환한다.
4. Top-level Domain 네임서버
TLD 네임서버의 레코드에서 naver.com
를 찾아서 여기에 ns type으로 매핑된 네임서버를 반환한다.
5. Domain 네임서버
네임서버의 레코드에서 naver.com
을 찾고, 여기에 a type으로 매핑된 ip주소를 반환한다.
여기서 등장하는 record type은 네임서버에 등록된 type으로 여러 종류가 있다.
- A(Address): IPv4 주소를 매핑
- NS(Name Server): DNS 과정에 필요한 네임서버를 매핑
- CNAME(Canonical NAME): 별칭으로도 불리며 다른 도메인으로 변환하는 역할. root domain은 불가능
- Alias(aws): aws에서 사용되는 resource 또는 root domain으로 변환
위 과정을 그림으로 보면 대략 이런 식이다.
이렇게 네임서버에게 물어보는 과정을 통해 ip주소를 얻어서 네이버 서버에 요청할 수 있게 된다. 여기에 dns 만료, 캐시, 인프라의 이중화가 끼어있어 사실은 좀 더 복잡하지만 결국은 최상위 도메인부터 하나씩 resolve 하는 과정을 거친다.
dig
, host
같은 명령어로 dns resolve 과정을 직접 확인할 수도 있다.
$ dig +trace naver.com
. 110410 IN NS m.root-servers.net.
. 110410 IN NS h.root-servers.net.
. 110410 IN NS i.root-servers.net.
. 110410 IN NS j.root-servers.net.
. 110410 IN NS c.root-servers.net.
...
;; Received 811 bytes from {dns 서버}#53({dns 서버}) in 9 ms
가장 먼저 내가 연결한 dns 서버가 알고 있는 root 네임서버 리스트가 나오고, 이 중 하나를 골라서 물어본다.
com. 172800 IN NS h.gtld-servers.net.
com. 172800 IN NS i.gtld-servers.net.
com. 172800 IN NS k.gtld-servers.net.
com. 172800 IN NS e.gtld-servers.net.
com. 172800 IN NS a.gtld-servers.net.
...
;; Received 1169 bytes from 192.33.4.12#53(c.root-servers.net) in 138 ms
c.root-servers.net
네임서버를 골라서 물어보니 TLD 네임서버 리스트를 알려줬다. 마찬가지로 이 중 하나를 골라서 또 물어본다.
naver.com. 172800 IN NS ns2.naver.com.
naver.com. 172800 IN NS ns1.naver.com.
...
;; Received 655 bytes from 192.12.94.30#53(e.gtld-servers.net) in 34 ms
e.gtld-servers.net
네임서버를 골라서 물어보니 naver.com을 알고 있는 네임서버 리스트를 알려줬다. 또 한 번 이 중 하나를 골라서 물어본다.
naver.com. 300 IN A 125.209.222.141
naver.com. 300 IN A 210.89.160.88
naver.com. 300 IN A 210.89.164.90
naver.com. 300 IN A 125.209.222.142
;; Received 102 bytes from 125.209.249.6#53(ns2.naver.com) in 7 ms
ns2.naver.com
네임서버를 골라서 물어보니 이번엔 A type의 record를 반환해줬고, 이로써 ip를 찾는 과정이 마무리된다.
resolve 과정을 이해하면 나만의 도메인을 사용하기 위해 어떤 작업이 필요한지 알 수 있다.
도메인 등록
1. 도메인을 구입
먼저 사용하고자 하는 도메인을 구입해야 한다. 도메인은 한정된 자원이기도 하고 DNS 세계가 잘 돌아갈 수 있게끔 비용이 발생한다. (무료로 풀리는 도메인도 있긴 하다.)
도메인을 구입할 때 어느 기간까지 사용할지 duration도 필요하다. 그 기간 이후로는 만료되기 때문에 상용되는 서비스라면 잘 신경 써야 한다.
2. DNS 서버에 ip 등록
도메인은 구입했기 때문에 이제 다른 사용자한테 뺏길 걱정은 안 해도 되고, 도메인을 내가 띄운 서버 ip로 매핑을 시켜야 한다.
보통 호스팅 업체에서 구입한 도메인에다가 ip만 입력하면 알아서 네임서버에 등록을 해준다.
Route 53
aws의 서비스 route 53는 도메인 구입부터 네임서버 등록까지 dns에 필요한 모든 기능이 있고, aws 답게 추가로 모니터링 기능까지 제공한다.
모든 과정을 aws에서 하고자 한다면 먼저 Register Domain으로 사용하고자 하는 도메인을 구입한다. 도메인을 구입하는 과정에서는 TLD를 선택과 함께 비용이 발생한다.
구입한 도메인을 네임서버에 등록하기 위해서는 Hosted zones에서 record를 추가한다. record 추가 시 type을 설정해야 하는데 위에 설명한 기준으로 입력하면 네임서버에 그대로 저장되어 도메인이 ip로 잘 변환되는 것을 확인할 수 있다.
도메인 구입과 네임서버 등록은 별개이기 때문에 다른 호스팅 서비스에서 구입한 도메인도 route 53을 통해 등록할 수 있다. 호스팅 서버에서 내 도메인에 등록된 네임서버를 route 53에서 hosted zone에 생성한 네임서버로 업데이트하면 된다.
route 53은 추가적으로 health check와 routing policy 기능을 제공한다.
Routing Policy
route 53에서는 라우팅 시키는 정책도 정할 수 있다.
Simple
n개의 ip를 등록하면 전부 반환해서 client 쪽에서 load balancing(또는 랜덤) 하도록 넘긴다.
Weighted
endpoint의 가중치를 정하고, 가중치에 비례하게 요청이 라우팅 시킨다. 아주 적은 트래픽을 특정 테스트 타겟에 보내볼 때 사용한다.
Latency
latency가 가장 좋은 곳으로 라우팅 시킨다. 유저 입장에서는 가장 빠른 응답을 주는 타겟으로 보내주기 때문에 보통 가장 가까운 지역으로 라우팅 된다.
Failover
primary / secondary 로 등록을 하고, primary가 health check에 실패하면 secondary로 failover 한다.
GeoLocation
실제 요청한 클라이언트의 위치를 보고 등록된 타겟으로 라우팅 한다.
MultiValue Answer
simple 정책과 비슷하게 n개를 등록하는데 health check에 통과한 타겟 리스트를 전달하고, 클라이언트에서 랜덤 하게 선택한다.
'aws' 카테고리의 다른 글
AWS EC2 Instance 종류 (0) | 2020.04.09 |
---|---|
AWS IAM 보안 정책 (0) | 2020.04.07 |
Security Group vs Network ACL 정리 (0) | 2020.04.02 |
AWS storage type (0) | 2020.03.31 |
Amazon Kinesis Stream 개념 (0) | 2019.12.12 |
댓글