Atlassian Confluence 공동편집 글 쓰기 및 편집 기능 사용 방법 찾기를 해보겠습니다. 최근 Confluence 6.x로 업그레이드 하고, Reverse Proxy로 설정하신 분이라면 비슷한 문제를 겪으셨을지도 모르고, 그래서 찾아오셨을지도 모르겠습니다.
Atlassian Confluence 공동편집 글 쓰기 및 편집 기능 사용 방법
Confluence에서 6.x 버전으로 업그레이드를 할 경우 글 쓰기 또는 편집을 할 때 에러가 발생할 수 있습니다.
6.x 버전 업그레이드에 추가되는 기능 중에, 공동편집(collaborative editing) 기능에서 8091 포트를 추가로 사용합니다.
그래서 Troubleshooting Collaborative Editing 이란 제목으로 관련 이슈 해결 방법이 나오기도 합니다.
그중에서도 Reverse-proxy를 사용하는 경우, 아래와 같은 방법으로 해결해야 합니다.
Apache HTTP Server 2.4 이상 버전을 사용중일 때, Reverse-proxy 설정하는 방법이 잘 소개되어져 있습니다.
그럼 Reverse-proxy가 무엇인가?
Reverse-proxy는 위의 그림과 같이 이해할 수 있는데, Proxy 어원 자체에 대리라는 뜻을 가지고 있습니다. 중간에서 대리 역할을 하는 겁니다.
지금 Confluence를 예로 들자면, wiki.studydev.com 으로 들어온 요청을 apache의 vhost 설정을 이용하여 톰캣에서 8090포트로 운영되고 있는 Confluence 서비스에 연결시키는 일입니다.
예를 들어 도메인에 의해서 라우팅이 잘 되어서 목적지 서버에 도착하면, 실제로 운영되고 있는 서비스에 접근하기 위해서 내부에 proxy 설정 작업을 하는 겁니다. Apache HTTP의 경우 vhost 설정을 통하여 특정 도메인으로 접근할 때, 내부에 운영되고 있는 서비스포트로 proxy 설정을 할 수 있습니다.
Reverse-proxy 설정의 예
현재 studydev.com 서버는 Apache HTTP 2.4 웹서버가 구동중입니다. 그리고, 같은 서버에 JIRA(8080), Confluence(8090), Bitbucket(7990)이 Tomcat으로 구동되고 있습니다. 이런 다른 서비스들 역시 HTTP 포로토콜로 접근이 가능하지만, 포트만 80이 아닌 다른 포트로 서비스 되고 있는 겁니다.
만약 외부에서 내부로 접근하는 포트에 대해서 보안상의 특별한 조치를 하지 않았다면, http://IP_ADDRESS:8080 과 같은 구조로 직접적인 접근이 가능합니다.
하지만, 이렇게 사용하면 뭔가 멋이 없습니다.
예를 들어서 해당 사이트처럼 도메인 주소가 studydev.com 인데, JIRA를 사용하기 위해서 멋지게 쓸만한 방법이 있다면, 그건 바로 서브 도메인으로 접근하는 겁니다.
jira.studydev.com 이라는 서브 도메인으로 접근해서 JIRA를 사용하면 꿀이겠네요. 다른 서비스 역시 마찬가지고요.
매번 모든 포트를 외울 수는 없겠지만, 서브 도메인이라면 쉽게 외워서 사용할 수 있으니까요.
그럼 왜 문제가 발생한건가?
원래는 잘 동작했던 겁니다. 하지만 Confluence 6.x를 설치하면서 새로운 서비스 포트가 하나 필요하게 되었습니다.
그것은 바로 8091 포트입니다. 공동편집 기능이 다자간에 동시에 작업을 하는 것이기 때문에 Websocket을 열어서 통신을 하나 봅니다.
특히 이 공동 작업을 하는 것은 Synchrony라 부르는데 이 녀석 때문에 설정이 안되어 있을 경우, 에디트 모드 진입 자체가 안되게 되는 겁니다.
참고로 Synchrony는 임의의 데이터 모델을 실시간으로 동기화 할 수 있는 서비스입니다. HTML WYSIWYG 편집기에 대한 특별 동기화를 지원합니다.
<VirtualHost *:443> ServerName wiki.studydev.com LoadModule proxy_module /usr/lib64/httpd/modules/mod_proxy.so LoadModule proxy_http_module /usr/lib64/httpd/modules/mod_proxy_http.so LoadModule proxy_wstunnel_module /usr/lib64/httpd/modules/mod_proxy_wstunnel.so LoadModule rewrite_module /usr/lib64/httpd/modules/mod_rewrite.so ProxyRequests Off ProxyVia Block ProxyPreserveHost On RewriteEngine On RewriteCond %{REQUEST_URI} !^/synchrony RewriteRule ^/(.*) http://wiki.studydev.com:8090/$1 [P] <Proxy *> Require all granted </Proxy> ProxyPass /synchrony http://wiki.studydev.com:8091/synchrony <Location /synchrony> Require all granted RewriteEngine on RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC] RewriteCond %{HTTP:CONNECTION} Upgrade$ [NC] RewriteRule .* ws://wiki.studydev.com:8091%{REQUEST_URI} [P] </Location> ProxyPass / http://localhost:8090/ ProxyPassReverse / http://localhost:8090/ <Location /> Require all granted Header always unset X-Frame-Options # for X-Frame-Options Deny error </Location> # 기타 SSL 설정은 아래 있으나 생략 </VirtualHost>
이런식으로 8091 포트에 대해서 설정이 완료되면 문제없이 다시 사용이 가능합니다.
요약
Atlassian Confluence 공동편집 글 쓰기 및 편집 기능 사용 방법 찾기 전에 최근 SSL을 올리면서 문제가 발생한 건줄 알았습니다.
그래서 처음에는 문제를 잘못 접근해서 해결 방법을 쉽게 찾지 못했죠.
이런 문제에 대해서는 페이스북에 있는 아틀라시안 유저 그룹에서 해결을 할 수 있으니 조언을 구하는 것도 좋은 방법입니다.
해당 문제는 내용 요약해서 댓글로 남겨 두었습니다.
많은 사람들이 JIRA나 Confluence를 쉽고 잘 쓰는 문화가 잘 정착되길 바라면서 글 남깁니다.