지금까지의 프로젝트 결과로 클라우드 인스턴스에 서버를 설치하였고 사용자는 퍼블릭 IP/도메인:3000을 통해 서비스를 제공받을 수 있게 되었습니다. 그렇지만 사람들이 긴 주소명을 외우기는 쉽지 않겠죠. 그래서 이번 포스팅에서는 www.naver.com처럼 도메인 이름을 간단하게 설정해보겠습니다.
DNS(Domain Name System)를 사용해야합니다. DNS는 사람이 읽을 수 있는 도메인 이름(예: www.naver.com)을)을 머신이 읽을 수 있는 IP 주소(예: 192.0.2.44)로 변환해줍니다. DNS가 트래픽을 웹 애플리케이션에 라우팅하는 과정은 다음과 같습니다.
1. 그림과 같이 PC 브라우저에서 www.naver.com을 입력합니다. 그러면 PC는 미리 설정되어 있는 DNS (단말에 설정되어 있는 이 DNS를 Local DNS라 부름, 제 PC의 경우는 203.248.252.2)에게 "www.naver.com이라는 hostname"에 대한 IP 주소를 물어봅니다. Local DNS는 KT, SK, Google 같은 인터넷 서비스 제공업체(ISP)가 관리합니다.
2. Local DNS에는 "www.naver.com에 대한 IP 주소"가 있을 수도 없을 수도 있습니다. 만약 있다면 Local DNS가 바로 PC에 IP 주소를 주고 끝나겠지요. 본 설명에서는 Local DNS에 "www.naver.com에 대한 IP 주소"가 없다고 가정합니다.
3. Local DNS는 이제 "www.naver.com에 대한 IP 주소"를 찾아내기 위해 다른 DNS 서버들과 통신(DNS 메시지)을 시작합니다. 먼저 Root DNS 서버에게 www.naver.com에 대한 IP 주소를 아는지 물어봅니다. 이를 위해 각 Local DNS 서버에는 Root DNS 서버의 정보 (IP 주소)가 미리 설정되어 있어야 합니다.
4. 이 Root DNS 서버는 전세계에 13대가 구축되어 있습니다. 미국에 10대, 일본/네덜란드/노르웨이에 각 1대씩... 그리고 우리나라의 경우 Root DNS 서버가 존재하지는 않지만 Root DNS 서버에 대한 미러 서버를 3대 운용하고 있다고 합니다.
5. Root DNS 서버는 "www.naver.com의 IP 주소"를 모릅니다. 그래서 Local DNS 서버에게 다른 DNS 서버에게 요청해보라며 다른 DNS 서버 주소를 알려주는 응답을 합니다.
6. 이 다른 DNS 서버는 "com 도메인"을 관리하는 DNS 서버입니다. 이를 TLD(Top-Level Domain)이라고 합니다. TLD는 일반 최상위 도메인(.com/.org)과 국가 코드 최상위 도메인(.kr/.co.kr)으로 나뉩니다.
7. 이제 Local DNS 서버는 "com 도메인을 관리하는 DNS 서버"에게 다시 혹시 www.naver.com에 대한 IP 주소 를 아는지 물어봅니다.
8. 역시 "com 도메인을 관리하는 DNS 서버"에도 해당 정보가 없습니다. 그래서 이 DNS 서버는 Local DNS 서버에게 나 말고 내가 알려주는 다른 DNS 서버에게 물어보라고 응답을 합니다. 이 다른 DNS 서버는 "naver.com 도메인"을 관리하는 DNS 서버입니다.
9. 이제 Local DNS 서버는 "naver.com 도메인을 관리하는 DNS 서버"에게 다시 혹시 www.naver.com에 대한 IP 주소 있는지 물어봅니다.
10. "naver.com 도메인을 관리하는 DNS 서버"에는 "www.naver.com 호스트네임에 대한 IP 주소"가 있습니다. 그래서 Local DNS 서버에게 www.naver.com에 대한 IP 주소는 222.122.195.6이라고 응답을 해 줍니다.
11. 이를 수신한 Local DNS는 www.naver.com에 대한 IP 주소를 캐싱을 하고(이후 다른 넘이 물어보면 바로 응답을 줄 수 있도록) 그 IP 주소 정보를 단말(PC)에 전달해 줍니다.
이와 같이 Local DNS 서버가 여러 DNS 서버를 차례대로 (Root DNS 서버 -> com DNS 서버 -> naver.com DNS 서버) 물어봐서 그 답을 찾는 과정을 Recursive Query라고 부릅니다.
이를 위해 저희가 할 수 있는 일은 9), 10)에 해당되는 DNS 서버에 도메인을 등록하는 일입니다. 해당 서비스를 제공하는 다양한 업체가 있습니다. 이번 프로젝트에서는 AWS를 이용하는 김에, AWS에서 제공하는 DNS 서비스인 Route 53 서비스를 이용해보도록 하겠습니다. AWS의 Route 53 서비스를 이용하면 인스턴스에게 도메인을 부여할 수 있습니다.
1) 위의 링크로 이동한 또는 Route 53을 검색하여 접속한 뒤 시작하기를 클릭합니다.
2) 도메인 등록을 체크하고 시작하기를 클릭합니다.
3) 도메인으로 등록할 이름을 입력합니다. 중복검사를 위해 확인을 클릭합니다. 도메인을 장바구니에 추가하고 계속을 클릭합니다.
4) 세부 정보를 입력하고 하단의 계속을 클릭합니다.
5) 자동 갱신을 비활성화 체크합니다. 이용 약관에 동의한 뒤에 주문을 완료하고 결제를 진행합니다. 제 경우에는 14000원을 지불했습니다.
6) 도메인이 생성됐습니다. 호스팅 영역 탭으로 이동합니다. 해당 도메인과 IP 연결 설정을 위해서 도메인을 클릭합니다.
7) 레코드 생성을 클릭합니다.
8) 레코드 유형을 A 타입으로 체크합니다. 저는 www.dudghsx.com을 위해서 레코드 이름 칸에 www를 입력했습니다. 값에는 EC2 인스턴스의 퍼블릭 IPv4 값을 입력합니다. 포트번호는 입력하지 않습니다. 레코드 생성을 클릭합니다.
10) 이제 www.dudghsx.com:3000으로 접속할 수 있습니다. 그렇지만 :3000이 매우 거슬리기 때문에, 도메인 만으로만 접속할 수 있게 수정하겠습니다.
$sudo vim server.js
11) 해당 명령어를 통해 server.js 파일을 80번 포트로 수정합니다.
12) 이제 포트번호를 입력하지 않아도 서버에 접속할 수 있게 됐습니다.
13) PuTTY 접속을 종료했을 때 인스턴스가 실행 중임에도 서버가 종료되어 버리는 문제가 발생합니다.
$ sudo nohup node server.js &
이를 위해서 해당 명령어를 통해서 server.js 파일을 실행합니다. 그럼 백그라운드로 실행되기 때문에, PuTTY를 종료해도 언제든지 인스턴스 서버에 접속이 가능하게 됩니다. 명령을 실행시키고 출력되는 숫자는 프로세스 번호입니다.
$ sudo kill 프로세스번호
해당 명령어를 통해서 서버를 종료시킬 수 있습니다.
이렇게 이번 포스팅에서는 AWS의 Route 53 서비스를 통해 DNS에 도메인을 등록하였고, 서버를 항상 실행시켜 사용자가 언제든지 접속할 수 있게 되었습니다.
'AWS' 카테고리의 다른 글
[AWS 7] AWS 서비스 후기 (0) | 2021.01.17 |
---|---|
[AWS 5] EC2 인스턴스와 RDS 데이터베이스 연동하기 (0) | 2021.01.16 |
[AWS 4] S3 서비스 적용하기 (0) | 2021.01.15 |
[AWS 3] git, node.js 환경 구축하기 (0) | 2021.01.15 |
[AWS 2] EC2 우분투 인스턴스 생성하기 (0) | 2021.01.14 |