Discourse를 채팅 및 클라우드와 연결하기

@debryc 님이 여기에서 질문을 해주셔서, 저희가 Discourse 포럼을 클라우드 저장소(NextCloud 인스턴스)와 채팅(저희 경우 Mattermost)과 원활하게 연동하기 위해 진행한 작업에 대해 간략히 정리해 보았습니다.

글이 길어 자세한 내용은 화살표를 클릭하시면 확인하실 수 있습니다…

전체 긴 글

먼저, 이 시스템의 개발자는 저라는 점을 강조하고 싶습니다. 이 시스템은 기술 팀의 다른 구성원이 C#/.NET으로 개발한 것이므로, 세부적인 기술적인 질문에 대해서는 답변해 드리기 어렵습니다. 저는 우리가 해결하고자 했던 문제와 우리가 수행한 작업에 대해 설명드리는 것입니다.

배경: 저희는 토론, 실시간 채팅, 파일 저장소 통합을 위해 통합 시스템(Basecamp)을 사용해 왔습니다. 이 시스템에는 구조적, 보안적 측면에서 많은 불만족스러운 요소가 있어, 조직을 새로운 오픈소스 시스템으로 이주하기로 결정했습니다.

저희는 많은 탐색과 평가를 거쳤으며, 일부 선택은 실용성 때문에, 일부는 요구사항에 가장 잘 부합하는 솔루션을 찾기 위해, 그리고 또 다른 일부는 1만 명 사용자의 이주 과정을 최대한 무난하게 만들기 위한 필요성 때문에 이루어졌습니다. (사용자 중에는 비기술적 사용자가 상당수 있고, 기술에 대한 공포증을 가진 사용자도 적지 않으며, 모두 각자의 확고한 의견을 가지고 있어 만족시키기가 쉽지 않았습니다!)

결론부터 말씀드리면, 우리는 세 가지 독립적인 구성 요소를 채택했습니다. 실시간 채팅을 위한 Mattermost, 보다 숙고된 토론을 위한 Discourse, 그리고 안전한 파일 저장 및 협업 편집을 위한 Nextcloud(기존 Basecamp의 네이티브 저장소와 Google Docs 조합을 대체). 모두 저희가 직접 관리하는 서버에 호스팅되었습니다.

이제 세 가지 로그인을 비교적 원활하게 연결하는 방법을 제공하고, 사용자 계정을 자동으로 생성하며, 사용자를 적절한 접근 그룹/포럼(Discourse), 공유 저장소 그룹(Nextcloud), 팀 및 채널(Mattermost)에 할당하는 방법을 마련해야 했습니다.

조직에는 위치와 기능에 따라 수백 개의 개별 그룹/팀이 있으며, 사용자는 여러 그룹에 속할 수 있습니다. 일부 그룹은 폐쇄적이고, 일부는 사용자가 자유롭게 가입할 수 있는 개방형입니다.

첫 번째 문제는 세 시스템에서 사용자 계정을 생성하고, 초기에 동일한 사용자 이름(서로 인지할 수 있도록)과 비밀번호(최소 한 세트의 자격 증명을 기억/저장하고 궁극적으로 세 시스템에 대한 단일 로그인(SSO)을 가능하게 하기 위해)을 보장하는 것이었습니다.

계정 생성 시 사람들을 올바른 그룹에 할당하는 방법을 관리하는 방법도 필요했습니다. 기존 시스템에서는 실제 그룹과 온라인 그룹 사이에 좋은 매핑이 없었기 때문에 단순히 이전할 수 없었기 때문입니다.

우리가 고안한 해결책은 'Hub’라는 이름의 별도 웹사이트였습니다. 이 웹사이트는 사용자 계정을 추적하고, 세 시스템의 API를 사용하여 사용자 세부 정보를 생성 및 업데이트하는 역할을 수행했습니다.

Hub는 각 그룹(또는 그룹 집합)의 '테크 챔피언(Tech Champions)'이 사람들을 새로운 서비스로 초대할 수 있도록 하여, 각 위치에 올바른 사람들만 진입하도록 보장했습니다.

즉, 사용자는 새로운 서비스에 가입하기 위한 초대 이메일을 받게 되며, 여기서 사용자 이름과 비밀번호를 생성할 수 있는 Hub의 일회용 링크가 포함됩니다. 이 정보는 세 가지 개별 서비스에서 해당하는 사용자 계정을 자동으로 생성하는 데 사용됩니다.

Hub는 사용자가 접근할 수 있어야 하는 그룹/포럼, 팀/채널, 저장소 영역을 알고 있으며, API를 통해 관련 위치에 사용자를 추가합니다.

진화하면서 Hub에는 더 많은 기능이 개발되어, 이제 사용자는 채널과 포럼을 찾고 가입을 요청하거나, 테크 챔피언과 사용자를 위한 다양한 관리 기능을 사용할 수 있습니다.

또한 이제 일종의 단일 로그인(Single-Sign-On)을 제공할 수 있어, Hub에 로그인하면 한 번의 버튼 클릭으로 다른 서비스 중 하나에 로그인할 수 있습니다. (여기에는 기존에 사용되던 표준 기업용 소셜 미디어 유형 로그인을 제외하는 작업이 포함되었습니다.)

채팅 통합과 파일 저장소를 단일 시스템에서 처리하는 다양한 방식을 검토해 보았지만(세 시스템 모두 일부 기능을 제공), 항상 막대한 타협이 수반되어 결국 Basecamp 같은 낙타(위원회에서 설계한 말)가 되는 결과로 이어졌습니다. 핵심 기능 각각에 대해 잘 수행되는 전용 솔루션(순혈 경주마)을 사용하는 것이 더 낫습니다.

7개의 좋아요

와! 정말 놀랍습니다!!! 여러 기능을 하나의 플랫폼에서 모두 처리하려 하지 않고, 사람들이 원하는 커뮤니케이션 채널에 가입할 수 있도록 포털을 만들어주는 이 솔루션이 정말 마음에 듭니다. 이 글을 북마크해 두겠습니다. 나중에 같은 문제를 해결해야 할 때 어떤 것이 가능한지 참고할 수 있도록 말이죠.

그리고 여쭤볼 것이 하나 있습니다. 이 설정이 Slack과 Google Suite(특히 Google Groups와 Shared Drives)과 함께 작동할 수 있는지 혹시 아시나요?

2개의 좋아요

좋은 말씀 감사합니다. 서로 다른 요구 사항에 대해 서로 다른 솔루션을 사용하는 것에 대해서는 전적으로 동의합니다. 다만, 유연한 공유 달력이 필요했을 때 현재는 Nextcloud의 내장 기능을 사용하기로 했습니다.

해당 특정 앱에 대해서는 잘 모르겠습니다. 제공되는 API 기능에 따라 달라질 것입니다. 상용 소프트웨어는 FOSS보다 제한적인 경우가 많습니다. (우리의 경우 특히 구글에서 벗어나야 했기 때문입니다)

1개의 좋아요