Heroku를 사용하면서 도메인 연결 할 때 일반적인 호스팅 절차와 달라 혼돈을 하곤 합니다. 가장 큰 이유는 Heroku가 PaaS. 즉 Platform as a Service 방식이기 때문이고, 이런 PaaS의 경우 A Record를 활용한 IP 주소를 제공(Inbound) 해주지 않기 때문입니다.

PaaS란 Platform as a Service로 서비스를 개발 할 수 있는 안정적인 Platform과 그 Platform을 통해 제공하는 어플리케이션을 개발 할 수 있는 API까지 한번에 제공하는 형태를 의미합니다.

실제로 Heroku를 통해 간단하게 node.js나 React 등의 프로젝트를 수행할 수 있습니다.

최근에 Frontend는 React로 Backend는 node.js로 데이타베이스는 MongoDB를 사용하여 프로젝트를 수행중인데, 이번에 실제 서비스 도메인을 연결할 때 바로 연결이 되지 않아 애를 먹었습니다.

사실은 DNS 업데이트까지 잠깐 기다렸으면 되는건데, 세팅을 잘못한 줄 알고, 한참을 바꿔가면서 여러번 설정을 하였습니다.

그리고 발견한 사실, 더 이상 Heroku CLI를 통해 커맨드 방식으로 할 필요가 없고 웹 인터페이스에서 쉽게 연결할 수 있다는 점을 깨달았습니다.

이 방식으로 해도 도메인 Provider에 따라 설정이 달라질 수 있습니다. 제 경우는 고객이 도메인은 A에서 구입하였지만, A에서 제공하는 도메인 설정 옵션이 거의 없어, 이 도메인을 1&1 External Domain으로 추가를 하고 A에서 네임서버를 변경하였습니다. 

Heroku에서 웹 인터페이스를 통해 도메인을 연결하고자 하면, 해당 애플리케이션의 Setting 페이지로 이동 후 스크룰 다운하시면 위 스샷처럼 
Domains and certificates 항목이 있습니다. 여기에서 해당 도메인명을 입력해주시면 됩니다.

제 경우 일단 Root Domain과 www.를 포함한 도메인을 등록하였습니다. 등록을 하면, DNS Target 값이 나오는데, 이 값을 해당 도메인의 CNAME로 추가해주시면 됩니다. 처음 등록 작업을 정상적으로 마쳐도, DNS 업데이트 때문에 ACM Status가 Failed로 나오는데, 정상입니다. 30분에서 1시간 정도 후에 정상적으로 연결되는걸 확인할 수 있고, 해당 도메인으로 접속도 정상적으로 연결됩니다.

문제는 1&1에서 루트 도메인의 CNAME을 허용하지 않지만, 도메인 포워딩 방식으로 쉽게 해결이 가능합니다. 즉 www 호스트에 대한 CNAME을 추가하여 www를 정상적으로 연결하고, 루트 도메인을 www로 자동 포워딩 시키면 됩니다.

혹시라도 저처럼 도메인 연결 후 Failed가 떠서 헤메는 분이 없기를 바라면서…

기존 방식이라면, Heroku CLI를 통해 해당 앱 디렉토리리 이동 후

heroku domains:add [연결하고자 하는 도메인]

입력하면 됩니다. 이렇게 입력 후

heroku domains

라고 입력하면, 연결된 도메인 정보가 나오는데, 그 화면에 있는 CNAME 값을 마찬가지 방법으로 도메인 등록한 곳에서 추가하면 됩니다.

Root 도메인은 www 없이 표기되는 도메인을 의미합니다. 웹사이트를 운영할 경우 www 또는 non-www 둘 중 하나로 사용하게 됩니다. 대게의 경우 www를 포함한 도메인을 대표 도메인으로 사용합니다.

CNAME은 Canonical Name으로 Domain Name Server에 별칭을 적용하는거라고 생각하면 됩니다. CNAME을 추가할 때는 Target을 지정합니다.

참고로, IaaS와 SaaS라는 말도 PaaS와 함께 많이 쓰이는데, IaaS는 Infrastructure as a Service의 줄임말로, 서버를 운영하기 위한 다양한 자원을 가상의 환경에서 손쉽게 이용할 수 있게 해주는 서비스입니다. 일반적인 서버 호스팅에 비해 하드웨어 확장을 손쉽게 할 수 있습니다. Iaas는 PaaS와 SaaS의 기반이 되는 기술입니다.

SaaS는 Software as a Service의 줄임말로, Cloud 환경에서 제공되는 다양한 어플리케이션을 서비스 형태로 제공하는 것을 의미합니다. 기술적인 부분이나 운영에 필요한 셋업, 업데이트 및 백업 등을 사용자가 할 필요없고 해당 어플리케이션 서비스를 사용자가 원하는 방법으로 접속해서 사용하는걸 의미합니다. 

0 Comments

Cancel