클라우드플레어 터널을 사용해 컨플루언스 클라우드에 커스텀 도메인 설정

소개

컨플루언스 클라우드에 커스텀 도메인을 사용할 수 있게 해 달라는 CLOUD-6999는 이제 처음 이슈가 만들어진 시점으로부터 12년이 지났습니다. 언젠가는 커스텀 도메인을 사용할 수 있을 지도 모르지만 커스텀 도메인은 컨플루언스 클라우드를 통해 웹사이트를 호스팅 하고 있는 지금 당장 필요하므로 무작정 기다릴 수는 없습니다. 한동안은 cloak.ist라는 서비스를 사용했고 잘 동작했지만 여러 기능이 동작하지 않았고 또 처음 이 서비스를 사용할 때는 컨플루언스를 지원한다고 되어 있었지만 나중에 보니 컨플루언스 지원 메시지가 사라져 있었을 뿐 아니라 기능 요청에도 전혀 피드백이 없어 계속해서 이 서비스를 유료로 사용하기에는 부족하다고 판단했습니다. 긴 세월 끝에 자포자기하는 심정으로 아틀라시안은 영원히 커스텀 도메인을 지원할 생각이 없다는 생각을 하기도 했는데 그렇다면 대안은 무엇일지 심각하게 생각해보기도 했습니다.

아틀라시안은 2023년 초에는 지난 12년 동안의 작업 끝에 반드시 2단계 서브도메인을 요구하는 괴상한 그림을 공유해 사용자 커뮤니티의 인내심을 시험하기도 했습니다. 개인적으로는 이 시도가 꽤 훌륭했다고 생각합니다. 지금까지 그저 커스텀 도메인 지원 시점을 기다리는데 관심이 집중됐던 상황을 목업 이미지를 하나 제시함으로써 관심을 완전히 다른 곳으로 돌리는데 성공했기 때문입니다. 안타깝지만 개인적으로는 저 그림 몇 장 이외에는 아무 것도 진행되지 않은 상태일 거라고 예상합니다.

아틀라시안이 커스텀 도메인을 제공할 때 까지 기다리기만 할 수는 없습니다. 언젠가 기적적으로 커스텀 도메인을 지원하는 시대가 올 지도 모르지만 지금까지 12년이라는 기나긴 세월이 흘렀고 이 정도 세월이 흐른 마당에 그림 한 장 공개해 놓고 몇 년 더 기다리게 하는 건 별로 어려운 일이 아니며 또 별로 예상하기 어려운 일도 아니라고 생각합니다. 그래서 2023년 현재 당장 적용할 수 있는 방법을 통해 커스텀 도메인을 사용할 수 있는 방법을 설명하겠습니다.

할 수 있는 것과 할 수 없는 것

먼저 이 가이드를 통해 달성할 수 있는 것과 그렇지 않은 것을 설명합니다. 컨플루언스 클라우드의 공개로 설정한 스페이스를 클라우드플레어 터널을 사용해 커스텀 도메인으로 노출 시킬 수 있습니다.

  • 기존 아틀라시안 도메인을 커스텀 도메인으로 대체할 수 있습니다.

  • 도메인 하위의 경로를 변경할 수는 없습니다. 그래서 커스텀 도메인을 통한 경로에도 여전히 ‘wiki’, ‘space’, ‘pages’, 스페이스 이름을 동일하게 사용하게 됩니다.

  • 커스텀 도메인을 통핸 컨플루언스 클라우드는 여러 가지 기능이 동작하지 않습니다.

    • 로그인이 필요한 모든 기능을 사용할 수 없습니다.

    • 검색 안 됩니다.

    • 흔히 사용하는 매크로 상당수가 동작하지 않습니다. 제가 파악한 목록은 뒤쪽에 제시하겠습니다.

이런 문제에도 불구하고 이전에 서드 파티 서비스를 통해 유료로 사용하던 서비스와 거의 똑같은 수준으로 컨플루언스 클라우드를 커스텀 도메인을 통해 서비스 할 수 있어 컨플루언스 스페이스를 개인 웹사이트로 사용하는 내 입장에서는 이 정도 수준이면 아쉬움은 남지만 그럭저럭 만족할 수 있습니다.

준비물

다음으로 준비물을 설명하겠습니다.

  • 컨플루언스 클라우드에 사이트가 있어야 하고 스탠다드 요금제 이상을 구독해 스페이스를 퍼블릭으로 설정할 수 있어야 합니다.

  • 클라우드플레어에 계정이 있어야 합니다. 클라우드플레어 터널은 무료로 사용할 수 있어 아무 요금제에 가입되어 있지 않아도 됩니다.

  • 클라우드플레어 터널을 실행할 서버가 있어야 합니다. 여기서는 AWS 라이트세일에 인스턴스를 만들겠습니다. 오라클 클라우드 인프라스트럭처에서 무료 인스턴스를 사용할 수 있다고 알고 있어 조만간 그 쪽으로 옮길 예정입니다.

원리

클라우드플레어 터널은 특정 네트워크 안에 있는 기계에 설치해 클라우드플레어와 기계 사이에 터널을 열고 기계가 접근할 수 있는 네트워크를 별다른 네트워크 설정 없이 인터넷에 노출시키는 일종의 리버스 프록시 서비스입니다. 주로 로컬 네트워크에 있는 자원을 인터넷을 통해 안전하게 접근하는데 사용할 목적으로 만들어진 서비스인 것 같지만 터널을 통해 로컬 네트워크 상의 기계 말고도 외부 인터넷 접근을 제한하지 않습니다. 그래서 클라우드플레어 터널에 커스텀 도메인을 설정하고 터널을 통해 접근할 대상을 컨플루언스 클라우드로 설정해 컨플루언스 클라우드를 커스텀 도메인을 사용할 수 있게 하는 것입니다.

잡다한 설명이 너무 길어서 죄송합니다. 시작하겠습니다.

진행

클라우드플레어 터널 생성

  • 클라우드플레어에 로그인 한 다음 제로트러스트 대시보드를 엽니다.

    • Access -> Tunnels메뉴를 차례로 엽니다.

    • 이미 생성한 터널 목록들이 나타나는데 처음 터널을 만든다면 목록이 비어있을 겁니다.

    • 스크린샷은 confluence-tunnel이라는 터널을 이미 생성해 docs.woojinkim.org 를 통해 서비스하고 있는 화면입니다.

  • Create a Tunnel 버튼을 클릭한다.

터널 이름을 정합니다. 이 이름은 서비스에 영향을 끼치지 않으니 자유롭게 정하면 됩니다. 여기서는 confluence-tunnel-tutorial이라고 정하겠습니다. Save tunnel 버튼을 클릭해 저장합니다.

터널이 생성되었습니다. 터널 입구는 클라우드플레어에 만들어졌지만 아직 터널 출구는 없는 상태입니다. 터널 출구를 담당할 서버가 필요합니다. 이제 이 상태로 탭을 닫지 말고 새 탭을 열어 터널 출구 서버를 생성할 차례입니다. 여기서는 AWS 라이트세일을 사용하겠습니다. 다른 아무 서비스를 사용해도 상관 없습니다.

터널 서버 생성

라이트세일 대시보드를 엽니다. 스크린샷이 한국어라 어색하게 느낄 수도 있지만 다른 언어라도 메뉴 순서나 버튼 위치는 똑같을 겁니다. 컨플루언스 커스텀 도메인을 서비스하는데 사용하고 있는 cloudflare_tunnel 인스턴스가 보입니다. 여기서는 새 인스턴스를 만들어 새 커스텀 도메인을 연결해볼 겁니다.

‘인스턴스 생성’ 버튼을 클릭합니다. 한국어를 읽을 수 없다면 스크린샷에서 오른쪽 위 주황색 버튼입니다.

블루프린트를 선택해야 하는데 여기서는 이 서버를 컨플루언스 클라우드를 서비스하는 한 가지 용도에만 사용할 생각이므로 OS 전용Ubuntu를 선택했습니다.

인스턴스 이름을 설정합니다. 여기서는 confluence-cloud-custom-domain-tutorial이라고 하겠습니다.

준비가 끝났으면 인스턴스 생성 버튼을 클릭해 인스턴스를 생성합니다.

cloudflared 설치

라이트세일 인스턴스가 시작되는 사이에 클라우드플레어 탭으로 돌아가 Debian 버튼을 클릭하고 64 bit 버튼을 클릭합니다.

아래로 스크롤을 내려 보면 새 서버에 cloudflared를 설치하기 위한 커맨드가 나타납니다. 우리는 방금 새 서버를 시작했으므로 왼쪽에 표시된 커맨드를 복사합니다.

그 사이에 라이트세일 인스턴스가 시작되었을 겁니다. >_ 버튼을 클릭해 서버에 접속합니다.

클라우드플레어에서 복사한 명령어를 붙여 넣고 실행합니다. cloudflared를 설치할 때 도커를 사용할 수도 있습니다. 이 튜토리얼에서는 사양이 가장 낮은 인스턴스를 선택했기 때문에 도커를 통해 실행하기에는 사양이 부족해 편하게 실행되지 않을 수 있어 도커 대신 OS에 직접 설치하는 방법을 선택했습니다. 만약 사양이 더 높은 인스턴스를 선택한다면 도커를 사용해도 문제 없을 겁니다. 또 라이트세일에서는 컨테이너를 직접 실행할 수도 있으니 그 쪽이 더 편할 수도 있습니다.

커맨드 실행이 끝나기를 기다립니다. 몇 초 안에 실행이 끝날 겁니다.

다시 클라우드플레어로 돌아와 화면 맨 아래 오른쪽에 있는 Save 버튼을 클릭합니다.

커스텀 도메인 및 컨플루언스 클라우드 주소 연결

이제 터널 입구 역할을 할 커스텀 도메인과 터널 출구 역할을 할 컨플루언스 클라우드 주소를 설정해야 합니다. 화면 위로 올라가 Public Hostname 탭을 클릭한 다음 Add a public hostname 버튼을 클릭합니다.

위쪽의 Public hostname이 사용자가 실제로 입력하게 될 커스텀 도메인입니다. 여기서는 서브도메인을 custom-domain으로 설정했습니다. ‘Custom Domains in Cloud - Development Update’에 그림 한 장으로 제안된 두 단계 서브도메인과 달리 한 단계 서브도메인을 사용합니다.

아래쪽 Service가 실제로 접속할 컨플루언스 클라우드 주소입니다. 여기에는 ‘도메인 네임’까지만 지정할 수 있으며 하위 경로를 사용할 수는 없습니다. 그래서 하위 경로는 리다이렉트 설정을 해야 하는데 뒤에서 설명하겠습니다. 여기서는 TypeHTTPS, URL에는 실제로 접속할 컨플루언스 클라우드 주소를 입력합니다. 포트 번호는 입력하지 않아도 알아서 443으로 설정됩니다.

하단의 Additional application settings를 클릭하고 이어서 HTTP Settings를 클릭합니다. HTTP Host Header가 보이는데 여기에 컨플루언스 클라우드 도메인 부분을 입력합니다. 이 부분이 중요한데 이 호스트 헤더를 입력하지 않고 커스텀 도메인을 통해 접근하면 아틀라시안 웹사이트는 항상 메인터넌스 화면을 표시하게 됩니다. 다른 옵션은 건드리지 않아도 됩니다. Save hostname 버튼을 클릭합니다.

리다이렉트 설정

이제 커스텀 도메인과 이 도메인을 통해 접속할 컨플루언스 클라우드 웹사이트 설정을 마쳤습니다. 이제 설정한 커스텀 도메인을 통해 접속해 봅시다.

커스텀 도메인을 입력하면 아틀라시안 로그인 페이지로 넘어갈텐데 여기서 로그인 하면 아틀라시안 도메인으로 리다이렉트 됩니다. 그래서 퍼블릭 스페이스만 서비스 할 수 있습니다. 도메인 부분만 바꾼 컨플루언스의 정확한 주소를 입력하면 동작하지만 주소 전체를 입력하는 대신 도메인 부분만 입력해도 컨플루언스로 리다이렉트 되도록 설정하면 편리합니다.

클라우드플레어 대시보드로 이동합니다. 지금까지 사용한 ‘제로 트러스트 대시보드’가 아닌 클라우드플레어의 웹사이트 대시보드입니다. 클라우드플레어 메인화면에서 사이트 이름을 클릭해 이동할 수 있습니다. 여기서 Rules -> Page Rules를 클릭합니다. 커스텀 도메인을 요청하면 컨플루언스 주소로 리다이렉트 시키려고 합니다. Create Page Rule 버튼을 클릭합니다.

URL에는 컨플루언스 커스텀 도메인 주소를 입력합니다. 이 주소를 요청하면 컨플루언스 페이지 주소로 리다이렉트 할 작정입니다. 여기서는 custom-domain.woojinkim.org라고 입력했습니다. 이 주소를 요청하면 컨플루언스 클라우드의 첫 페이지로 이동 시킬 예정입니다.

Then the settings are 부분을 설정합니다. Pick a Setting에서 Forwarding URL을 선택하고 Select status code에서 301을 선택했습니다. Enter destination URL에 도메인을 요청할 때 리다이렉트 할 컨플루언스 클라우드 경로를 '커스텀 도메인'에 기반해 설정합니다. Save and Deploy Rule 버튼을 클릭합니다.

테스트

페이지 리다이렉트 룰이 입력된 상태를 확인합니다.

이제 브라우저에서 커스텀 도메인을 요청해 봅니다. 도메인 부분만 입력하면 첫 번째 페이지로 리다이렉트 됩니다. 이후 페이지에 표시되는 모든 컨플루언스 클라우드 링크는 커스텀 도메인으로 변경됩니다. 사용해보니 특정 조건에서 아틀라시안 도메인으로 리다이렉트 될 때가 있는데 정확히 어떤 상황인지 파악하지 못했습니다. 이제 모든 작업이 끝났습니다. 라이트세일에 생성한 인스턴스를 방문자 수와 사용 경험에 따라 조절하거나 온프래미스 서버를 사용하거나 무료 클라우드 서비스로 이동하는 등 자유롭게 변경하면 됩니다.

정상 동작하지 않는 것들

하지만 앞에서 설명했다시피 이 방법은 완전하지 않습니다. 여기서는 이 방법으로 컨플루언스 클라우드의 퍼블릭 스페이스를 커스텀 도메인을 통해 노출 시켜 사용할 때 겪은 문제점들을 소개합니다.

먼저 사이트 검색이 안됩니다. 아틀라시안 도메인 하위에서는 정상 동작하지만 커스텀 도메인에서는 아무 결과도 표시하지 않습니다. 커스텀 도메인을 통한 주소를 구글 검색에 노출 시켜 검색을 대신하고 있습니다. 컨플루언스 클라우드는 구글 검색을 허용하지 않는데 커스텀 도메인을 사용하면 구글 검색에 노출시킬 수 있습니다. 이 방법은 다른 글을 통해 설명하겠습니다.

또 흔히 사용하는 매크로가 동작하지 않습니다. 데스크탑, 모바일 환경 모두에서 잘 동작하는 매크로는 child display 하나 뿐입니다.

모바일에서는 잘 동작하지만 데스크탑에서는 잘 동작하지 않거나 다른 페이지 링크를 통해 페이지를 열면 잘 동작하지만 페이지 주소를 직접 사용하면 동작하지 않는 매크로는 다음과 같습니다:

  • include

  • excerpt include

  • multi excerpt include

  • youtube

  • iframe

  • google calendar

  • orderly

  • page property

  • page property report

  • mermaid

예상하기에 동작하지 않는 매크로 목록은 훨씬 더 길어질 거라고 예상합니다.

결론

이런 단점에도 불구하고 컨플루언스 클라우드에 퍼블릭 스페이스를 통해 개인 웹사이트를 운영하는 입장에서는 커스텀 도메인이 필요했습니다. 또 개인 용도이기 때문에 위에 설명한 여러 단점을 감수하기로 결정했습니다. 아틀라시안은 지난 12년에 걸쳐 사용자들의 요구사항을 무시로 일관해 왔고 또 앞으로 단기간 안에 커스텀 도메인 기능을 제공할 거라고 예상하지 않습니다. 이런 측면에서 아틀라시안에 대한 신뢰가 무너진 상태입니다. 하지만 완전하지는 않아도 커스텀 도메인을 통해 컨플루언스 클라우드를 사용할 수 있고 또 구글 검색에도 노출시킬 수 있습니다.

아틀라시안이 이 방법을 차단하지 않는다는 전제 하에 한동안은 CLOUD-6999의 존재를 잊고 이 이슈에 분노하지도 않으며 당분간 평화롭게 지낼 작정입니다. 저는 웹 전문가가 아니므로 이 방법에 잠재적인 보안 문제나 제가 고려하지 못한 다양한 문제가 있을 수 있습니다. 다만 CLOUD-6999에 답글을 남기면 수 천 명에게 메일이 가서 별로 좋은 방법이 아닌 것 같으니 내용 중 보완할 부분이나 더 나은 방법, 의견이 있으면 다음 연락처를 통해 알려주세요.