이 포스팅은 도메인, 혹은 DNS(Domain Name System)에 대한 기본 지식이 있음을 가정한다. 만약에 잘 모른다면 이 포스팅을 읽고 기본 개념을 먼저 숙지한 다음에 여기로 돌아오기 바란다. 또한 도메인을 등록하고 HTTPS를 설정할 EC2 인스턴스는 이미 마련되어 있다는 것까지 가정한다. 우리는 해당 EC2 인스턴스에 로드 밸런서를 연결하고 그 로드 밸런서에 대해 도메인을 등록하고 HTTPS를 설정할 것이다.
포스팅 내용은 다음과 같은 순서로 이뤄질 것이다.
- AWS Route 53에서 도메인 등록 및 호스팅 영역 생성
- AWS Certificate Manager(이하 ACM)에서 SSL/TLS 인증서 발급
- AWS Application Load Balancer(이하 ALB) 생성
- AWS Route 53의 네임 서버들에 ALB를 가리키는 A 레코드 생성
다음은 이 포스팅에서 설명할 모든 내용들의 관계를 하나의 그림으로 도식화한 것이다. 포스팅을 다 읽고 머릿속에 개념을 정리하고 싶다면 다시 돌아와서 이 그림을 살펴보도록 하자.
1. AWS Route 53에서 도메인 등록 및 호스팅 영역 생성
AWS 콘솔에 로그인한 뒤 [Route 53]을 찾아가자. 그리고 [도메인 등록]을 클릭하여 새로운 커스텀 도메인을 등록해보자. 참고로 이렇게 도메인 등록을 진행하면 호스팅 영역도 자동으로 생성이 된다. 즉, [호스팅 영역 생성]을 통해 굳이 호스팅 영역을 따로 생성해줄 필요 없다. 도메인이란 말 그대로 우리의 웹 사이트에 지정할 이름(EX.
it-eldorado.com
)을 의미하고, 호스팅 영역이란 그 도메인에 대한 DNS 쿼리를 처리해줄 네임 서버들이라고 생각하면 된다. 도메인은 요금이 연간 청구되며, 호스팅 영역은 DNS 쿼리의 개수에 따라 요금이 청구된다.이제 구매할 도메인의 이름을 지정하고 [확인]을 클릭하자.
그러면 다음과 같이 구매 가능한 도메인들의 목록이 표시된다. 원하는 것을 골라서 [장바구니에 추가]를 클릭하자. 그러면 우측 사이드바에 연간 청구될 금액(단위: 달러)이 표시될 것이다. 그리고 기간은 우선 1년만 하자. 뒤에서 알아보겠지만, 어차피 매년 갱신되게 하는 것이 가능하기 때문이다. 도메인을 골랐다면 다음으로 넘어가자.
다음으로 연락처 정보를 기입하자. 이 중에서 이메일과 전화번호는 특히 유념해서 기입하자. 이후 단계에서 해당 이메일로 인증 메일을 보내서 인증을 수행할 것이고, 결제 알림은 핸드폰 문자메시지로 날아오기 때문이다. 다 기입했다면 다음으로 넘어가자.
그러면 다음과 같이 경고 창이 뜰 텐데, 대략 인증을 위한 메일 발송에 문제가 생기면 우선 도메인 등록부터 하고 인증 절차는 나중에 따로 밟게 해준다는 말인 것 같다. 그냥 대충 읽어보고 닫자.
이제 도메인 등록의 마지막 단계다. 여러 설명들이 나와 있는데, 웬만하면 전부 읽어보도록 하자. 앞서 말했듯 호스팅 영역도 자동으로 생성될 것이라는 점을 알려주고 있고, 1년마다 도메인 갱신을 자동으로 할지 물어보고 있으며, AWS가 도메인 등록을 위탁할 도메인 등록대행자가 당신의 연락처로 연락할 수도 있다는 것에 동의하는지 물어보고 있다(동의하지 않으면 도메인 등록이 불가하다). 마지막으로, 기입한 이메일로 인증 메일을 보냈으니 확인 바란다는 말이 있다. 해당 인증 메일을 확인하여 링크를 클릭해주면 인증이 완료된다. 모든 절차가 완료되면 [주문 완료]를 클릭하여 도메인 등록을 마무리하자.
그럼 다음과 같은 창이 뜨면서 주문이 완료된다. 그리고 잠시 후에는 결제가 자동으로 이뤄지게 될 것이다.
이후 도메인 등록까지 몇 분에서 길게는 몇 시간까지도 소요될 수 있다. 도메인 등록이 완료되면 기입한 이메일로 알림이 오니까 주기적으로 확인해주면 될 듯하다. 도메인 등록 및 호스팅 영역의 생성까지 완전히 마무리되고 나면 다음 단계로 넘어가도록 하자.
개인적인 느낌으로는 도메인을 저렴하게 구입하려고 이곳저곳(EX. 가비아) 찾아다니는 것보다(연간 비용이라서 사실 크게 차이 없다고 생각한다) AWS Route 53에서 도메인까지 등록하는 게 마음 편한 것 같다. 어차피 AWS에서 제공하는 로드 밸런서를 네임 서버에 연결해줄 것이라면 AWS Route 53의 호스팅 영역을 생성하는 게 편한데(왜냐하면 AWS Route 53에서 제공하는 네임 서버들은 AWS의 EC2 혹은 로드 밸런서에 훨씬 쉽게 연결할 수 있는 특성을 가지기 때문이다), AWS Route 53에서 도메인을 등록하면 호스팅 영역은 알아서 생성되기 때문이다. 물론 정답은 아니니 각자 편한 방식대로 하면 된다.
2. AWS Certificate Manager(이하 ACM)에서 SSL/TLS 인증서 발급
이제 구매한 도메인에 대해 SSL/TLS 인증서를 발급받도록 해보자. 이는 HTTPS 프로토콜을 지원하는 웹 사이트를 구축하기 위해 필요한 것이다. 추후 이 인증서를 우리가 생성할 로드 밸런서에 연결해줄 것이다. 참고로 인증서를 다른 곳에서 발급받으면 유료지만, AWS에서 발급받으면 무료이다. 대신에 AWS 리소스에서만 해당 인증서를 사용할 수 있고, 다운로드하여서 다른 곳에 쓰는 건 불가능하다.
AWS 콘솔의 [AWS Certificate Manager]을 찾아가자. 그러면 다음과 같은 화면이 뜰 텐데, 여기서 [인증서 프로비저닝] 부분의 [시작하기]를 클릭하여 ACM으로부터 SSL/TLS 인증서를 발급받도록 하자.
[공인 인증서 요청]을 선택하고 [인증서 요청]을 눌러 다음으로 넘어가자.
다음으로, HTTPS 설정을 하고 싶은(SSL/TLS 인증서를 발급받을) 도메인을 지정해준다. 이때, 확장성의 측면에서 나중에 추가될 하위 도메인까지 모두 HTTP 설정을 할 수 있도록
*.{도메인 이름}
도 추가해주자. 작성을 다 하면 다음으로 넘어가자.도메인을 지정해주고 나면, 해당 도메인이 정말 본인의 도메인이 맞는지 검증해야 한다. 검증하는 절차는 다음과 같이 둘 중 하나이다. 우리는 [DNS 검증]을 선택할 것이다. 이는 해당 도메인의 네임 서버에 접근하여 레코드를 수정할 권한이 있는지 확인해보는 방법이다. 선택했으면 다음으로 넘어가자. 다음 단계인 [3단계: 태그 추가]은 바로 스킵해서 [4단계: 검토 및 요청]으로 넘어가자.
도메인을 잘 지정해줬는지 확인하고, [확인 및 요청]을 클릭하여 다음으로 넘어가자.
그러면 이제 DNS 검증을 위한 단계에 돌입한다. ACM은 지정해준 도메인에 해당하는 네임 서버에게 요청을 보내서 정해진 토큰 값의
CNAME
레코드가 있는지 확인할 것이다. 그러기 위해 우리는 그 토큰 값을 네임 서버의 CNAME
레코드로 추가해줘야 한다. 각 도메인 이름을 클릭하여 펼치면 어떤 토큰 값의 CNAME
레코드를 추가해줘야 하는지 뜰 것이다. 원래대로라면 이러한 CNAME
레코드를 직접 네임 서버에 찾아가서 추가해줘야겠지만, 우리의 경우 Route 53의 네임 서버를 사용하기 때문에 여기서 [Route 53에서 레코드 생성] 버튼을 누르면 그 작업을 손쉽게 할 수 있다. 클릭해보자.그러면 다음과 같이 창이 뜨면서
CNAME
레코드를 쉽게 생성할 수 있게 해준다. [생성]을 눌러서 창을 닫고 검증 단계를 마무리하자.그러고 나면 이와 같이 인증서 발급 요청이 완료되었음을 확인할 수 있다. 아직 검증 보류 상태인 건 네임 서버에 등록된 레코드가 반영되고 ACM이 해당 네임 서버에 요청을 보내서 인증서를 발급해줄 때까지 시간이 조금 걸리기 때문이다. AWS에 따르면 30분 이상까지 걸릴 수도 있다고 한다. 조금만 기다리면 인증서 발급이 완료될 것이다. 필자의 경우 5분도 안 돼서 발급 완료로 상태가 바뀌었다. 그러면 인증서 발급이 완료된 것이다.
3. AWS Application Load Balancer(이하 ALB) 생성
이번에는 EC2 인스턴스에 연결할 로드 밸런서를 생성하고 앞서 발급받은 SSL/TLS 인증서를 설정해주도록 하자. AWS 콘솔의 [EC2]를 찾아가서 좌측 사이드바에 존재하는 [로드밸런서]를 선택하여 들어가면 [Load Balancer 생성] 버튼이 있을 것이다. 이것을 눌러서 로드 밸런서를 생성해보도록 하자.
로드 밸런서의 유형으로 우리는 [Application Load Balancer]를 선택할 것이다. 이는 HTTP 프로토콜로 들어오는 요청을 HTTPS 프로토콜의 요청으로 리다이렉트 하도록 쉽게 설정할 수 있기 때문이다. 다른 유형의 로드 밸런서에서는 이러한 작업을 EC2 인스턴스 내에 설치된 웹 서버 단에서 직접 프로그래밍적으로 설정해줘야 하기 때문에 굉장히 불편하다. [Application Load Balancer] 부분의 [생성]을 클릭하자.
로드 밸런서 구성의 첫 번째 단계이다. 로드 밸런서의 이름을 지정해주고, 리스너 부분에서 [리스너 추가]를 클릭하여 [HTTPS (보안 HTTP)] 프로토콜을 추가해주자(포트 번호는 기본값인 443 그대로 둔다). 그래야 추후 로드 밸런서에 등록할 SSL/TLS 인증서를 이용하여 HTTPS 요청을 처리할 수 있게 된다. 마지막으로 VPC와 가용 영역을 지정해줘야 한다. VPC는 자신이 직접 만든 게 있다면 그걸 선택해도 좋고 아니라면 기본값을 사용해도 된다. 그리고 가용 영역의 경우 필자는 확장성을 위해 모두 체크했다. 이제 [다음: 보안 설정 구성]을 눌러 다음으로 넘어가자.
두 번째 단계에서는 보안 설정을 구성한다. 쉽게 말해서 아까 발급받은 SSL/TLS 인증서를 등록하는 단계이다. 직전 단계에서 리스너에 HTTPS 프로토콜을 추가해주지 않았다면 이 단계에서 경고가 발생했을 것이다("Load Balancer의 보안을 개선하십시오. Load Balancer가 보안 리스너를 사용하고 있지 않습니다."). [ACM에서 인증서 선택 (권장)]을 선택하고 아까 발급받은 인증서를 선택해주자. 보안 정책은 그대로 내버려 두고, [다음: 보안 그룹 구성] 버튼을 눌러 다음으로 넘어가자.
세 번째 단계는 보안 그룹, 즉 방화벽을 설정하는 단계이다. [새 보안 그룹 생성]을 선택하고 보안 그룹 이름과 설명을 적어준 뒤, 다음과 같이 설정해준다. 외부 어디에서도 HTTP 프로토콜과 HTTPS 프로토콜로 접근이 가능해야 하기 때문이다. 다 설정했으면 [다음: 라우팅 구성]을 클릭하여 다음으로 넘어가자.
네 번째 단계는 라우팅 구성이다. 리스너에 의해 감지한 외부의 요청을 내부적으로 누구에게, 그리고 어떻게 라우팅 할지 설정하는 것이다. 대상 그룹이란 로드 밸런서가 요청을 넘겨줄 대상들의 그룹을 의미한다. 프로토콜과 포트는 요청을 어떻게 라우팅 할지 설정해주는 부분이다. 아래와 같이 설정해주면 외부로부터의 요청을 내부적으로는 80번 포트를 사용하는 HTTP 요청으로 전환하여 대상 그룹의 대상들에게 라우팅 하게 된다. 대상 그룹의 이름을 지정해주고, 나머지 설정은 아래와 같이 기본값으로 두자. [상태 검사] 부분은 로드 밸런서가 대상 그룹의 대상들의 상태를 어느 프로토콜과 URL로 검사할지 설정해주는 부분이다. 역시나 기본값으로 두자.
이제 앞서 만들어준 대상 그룹에 대상을 추가해주자. 이미 존재하는 EC2 인스턴스를 선택하고, 적절한 포트 번호를 입력한 뒤(기본값 그대로 두면 됨) [등록된 항목 추가] 버튼을 클릭하면 된다. 이제 거의 다 왔다. [다음: 검토]를 눌러 다음으로 넘어가자.
마지막 단계는 검토 단계로, 여태까지 설정한 것들의 요약본을 보여줄 것이다. 특별히 잘못된 것이 없다면 [생성]을 눌러 로드 밸런서의 생성을 마무리하자. 생성이 완료되면 다음과 같은 페이지를 볼 수 있다.
4. AWS Route 53의 네임 서버들에 ALB를 가리키는 A 레코드 생성
자, 거의 다 왔다. 이제 우리가 등록한 도메인으로 접속을 했을 때 DNS 쿼리를 받는 네임 서버들이 로드 밸런서의 위치를 알도록 해줘야 한다. 네임 서버에 A 레코드를 등록해주는 것이다. 이를 위해 AWS 콘솔에서 [Route 53]을 다시 찾아가서, 생성되어 있는 호스팅 영역을 선택하여 들어가 보자. 들어가 보면 [레코드 생성] 버튼이 있을 것이다. 클릭해주자.
그러면 다음과 같은 페이지가 뜰 것이다(UI, UX가 바뀐 지 얼마 안 된 듯). [단순 라우팅]을 선택하고 [다음]을 클릭하자.
그럼 다음과 같은 페이지가 등장한다. [단순 레코드 정의]를 클릭하자.
여기서 어떠한 레코드를 추가해줄지 설정한다. 레코드 이름은 빈칸으로 둬도 된다. 빈칸으로 두면 우리가 등록한 도메인 그 자체를 의미하는 것이고, 만약 무언갈 적는다면 그건 하위 도메인을 명시하는 것이다. 다음으로 [값/트래픽 라우팅 대상] 부분에서는 [Application/Classic Load Balancer에 대한 별칭]을 선택하고, 로드 밸런서를 생성한 리전을 선택한 뒤, 우리가 아까 생성했던 로드 밸런서를 지정해준다. 레코드 유형은 기본값 그대로 둔다(A 타입의 레코드 생성). 그러고 [대상 상태 평가]의 경우 로드 밸런서의 상태를 주기적으로 검사한다는 것을 의미하므로 [예]로 그대로 둔다. 이제 [단순 레코드 정의]를 클릭하여 창을 닫고, 마지막으로 [레코드 생성]을 클릭하여 레코드 추가 작업을 완료하자.
마지막으로, HTTP 프로토콜로 들어오는 요청의 경우 HTTPS 프로토콜로 재요청하도록 리다이렉트 응답을 반환하게 하는 설정을 해보자. AWS 콘솔의 로드 밸런서 부분에 가보면 [리스너] 탭을 선택할 수 있다. 다음과 같이 말이다. 여기서 HTTP 리스너의 [규칙 보기/편집]을 클릭하여 들어가자.
그리고 연필 모양을 눌러서 규칙 편집에 들어간 뒤, 다시 왼쪽의 연필 모양을 누르면 아래와 같이 규칙을 편집할 수 있게 된다. 우선 [THEN] 부분에 있는 기존 규칙을 삭제하자(휴지통 모양 클릭).
그리고 [+ 작업 추가]를 클릭하여 다음과 같은 규칙을 생성해주자. HTTP 요청을 HTTPS 요청으로 리다이렉트 시키는 것이다. 그리고 나서 [업데이트]를 눌러 변경 사항을 적용하자.
지금까지 오느라 수고했다. 이제 우리가 구매한 도메인으로 브라우저에서 접속해보자. HTTPS를 명시하지 않고 접속해도 HTTPS로 자동 리다이렉트 되는지까지 확인해보자. 잘 되었길 바란다.
다음은 서론에서 소개했던 도식이다. 정리 용도로 한 번 살펴보기 바란다.