단순 HTTP 통신으로 진행하기엔 보안적으로 매우 취약하고 더군다나 ec2의 퍼블릭 ip는 계속 변할 수 있기 때문에 이번에 도메인을 도입해보기로 했다. 나중에 ECS나 EKS를 사용할 때 도메인을 구축해두면 편하게 사용할 수 있을 것이다.
AWS ec2 -> 로드밸런서로 이동하여 생성해준다.

크게 3가지가 있는데, HTTP/HTTPS와 요청을 처리하려면 ALB를, TCP/UDP 요청을 처리하려면 NLB를 선택하면 되겠다. GLB는 나중에 기회가 되면 사용해보도록 하겠다. 필자는 ALB로 하겠다.

서브넷은 두 가지 이상 선택하고, 바운드 규칙을 먼저 만들고 보안그룹을 추가하도록 하자.
대상 그룹
로드 밸런싱 처리를 해줄 인스턴스 그룹을 선언해줘야 한다. 이곳에서 트래픽 부하처리를 담당한 ec2 인스턴스들을 선택해주면 된다. 하지만 이번엔 부하처리보단 DNS 등록을 우선시하므로 필자는 인스턴스 하나만 선택하겠다. 이러면 8080으로 들어오는 요청을 각 인스턴스의 포트로 부하처리를 해줄 것이다.

그룹을 생성해줬다면 다시 로드밸런서 창으로 돌아와서, 리스너에서 열어줄 포트와 그룹을 설정하고 생성을 완료한다.

다양한 곳에서 도메인을 살 수 있지만 가능한 AWS 인프라 내에서 모든 것을 관리하고 싶어 Route 53을 통해 도메인을 구매했다. 도메인 -> 등록된 도메인으로 가서 "도메인 등록"을 클릭한다.

도메인 이름은 자유이고, TLD에 따라 가격이 달라진다. 자세한 가격은 공식 문서 및 아래 보이는 것처럼 예시로 보도록 하자. 본인이 사용하고 싶은 dns를 입력하면 사용할 수 있는지 판단해준다.

의외로 싸다. 결제를 해주면 필자의 경우 1~2시간 후에 승인이 되었다.
dns 이름을 사용했으니, 이 dns에 사용자들이 요청을 하면 어떤 리소스를 보여줄지 선언해줘야 한다. 이것을 호스팅 영역에서 담당한다. 그럼 이것을 만들어주도록 하자.

호스팅 영역을 생성하면 아래처럼 나올 것이다.

기본적으로 NS와 SOA 유형이 생성되면 성공적으로 생성된 것이다.

호스팅 영역에서 다수의 레코드를 생성할 수 있는데, 레코드는 dns로 보내는 명령구문이라고 보면 되겠다. 이 역시 작명은 자유다. 예를 들자면..
이런식으로 레코드를 생성할 수 있다. 값으로 ec2의 퍼블릭 IP를 입력하면 해당 dns로 요청을 할 때마다 ip로 전달해준다.
ACM에서 인증서를 발급한다음 이를 ELB에 등록할 것이다(Route 53을 굳이 ELB에 연결한 이유가 바로 이것이다).
AWS Certificate Manager 에서 인증서 요청, 퍼블릭 인증서를 요청한다.

그리고 HTTPS로 들어갈 도메인명을 작성해준다. 레코드를 자동으로 생성해주므로 풀네임을 작성한다. 또한 이름을 추가하여 인증서 하나에 여러 도메인을 등록할 수 있다. ex) example.com과 www.example.com을 등록하면 둘 중 하나로 접속할 수 있다.
이전에 만들어둔 ELB에 SSL 인증서를 등록해야 한다. 로드밸런서로 가서 리스너를 추가해준다.


인증서 칸에서, 아까 ACM에서 만든 SSL 인증서를 선택해주면 된다.
이제 443 리스너에 대한 규칙을 설정해줘야 한다.

지금은 디폴트로 503 페이지가 뜨도록 되어있다. 이를

필자의 경우, 특별히 추가할 조건은 아직 없어서 모든 경로에 대한 조건을 열었다.

HTTPS 443으로 들어오는 것을 처음에 만들어둔 로드밸런서로 보내게끔 설정한다. 이러면 https 요청이 정상적으로 될 것이다.
추가로, HTTP 80을 HTTP 443으로 리디렉션하도록 설정해줘야 한다.

위 아무거나 요청을 해도 모두 HTTPS 통신으로 들어가게 된다.

이렇게 뜨면 성공이다. 만약 HTTP로 들어가진다면 로드밸런서의 리스너를 다시 한번 보도록 하자.