포럼을 만들었어요

포럼을 만들었어요

제 목표 중 하나는 홈랩을 좋아하는 사람들이 서로 모여 소통할 수 있는 공간인 포럼을 만드는 것이었어요. 이번에 이 포럼을 어느정도 완성하게 되어 만들어나간 과정과 함께 소개해드리고자 해요.

포럼을 만드는 방법은 정말 다양하지만 방법보다 먼저 제가 제공하고 싶은 가치를 정하는 일부터 시작했어요. 제가 제공하고 싶었던 것들은 다음과 같아요.

  • 홈랩 구축을 위한 구조화된 가이드 문서 제공
  • 홈랩 사용자들간 소통할 수 있는 공간 제공
  • 홈랩 사용자들이 겪는 문제를 서로 도와줄 수 있는 공간 제공

이런 목적들을 먼저 정하고 나서 포럼 엔진들을 살펴보기 시작했어요.


포럼 엔진 선택하기

저는 홈랩을 다루니 당연히 제 서버에서 셀프 호스팅이 가능한 포럼 엔진을 찾았어요. 셀프 호스팅이 가능한 포럼 엔진은 무척 많은데, 국내에서 개발되는 XpressEngine, Rhymix 도 있고, 해외의 경우는 discourse, NodeBB 등을 찾아볼 수 있었어요.

몇가지 살펴본 경과, 우선 국내 포럼 엔진의 경우는 지향점이 많이 다르다고 느껴졌어요. 일반적인 포럼보다는 좀 더 범용적인 웹사이트 빌더에 가까운지라, 포럼과 문서 작성에 집중된 것을 원한다면 적합하지 않다는 판단이 들었어요. 오픈소스 플러그인 생태계도 부족해서 많은 것들을 직접 개발해야 할 것으로 예상됐고요.

반면에 해외 포럼 엔진들은 정말 포럼만을 위해서 만들어진 제품이란 인상을 받았어요. 가장 인상적인 것은 Discourse 라는 엔진이었는데, 이걸로 만들어진 사이트를 보니 정말 제가 원하는 그것이라는 생각이 들었어요. 사이트 내부 검색, 글 추천 알고리즘, 구조화된 문서 등 제 요구사항에 딱 들어맞아 보였거든요.

그런데 알고 보니 제가 이미 알고 있거나 방문해본 포럼 중에서 Discourse 기반인 것들이 정말 많더라고요. 이미 수많은 기업들에서 사용하고 있을만큼 유명하고 잘 유지보수 되는 것 같아서 이걸 사용하기로 마음먹게 됐어요.


설치 과정

Discourse는 셀프 호스팅을 위한 공식 가이드 문서를 제공하고 있어요. 설치 방법 자체는 그다지 어렵지 않았지만 두 가지 아쉬운 점이 있었어요.

첫번째는 별도 이메일 서버가 필요하는 점이에요. 이메일은 조금 특이하게도 셀프 호스팅이 쉽지 않은 분야거든요. 가정용 인터넷은 이메일 발신 포트가 막혀있고 유동 IP이기 때문에 이메일 서버로 활용이 어려워요. 그래서 가급적이면 타사 로그인 기능(구글, 애플 로그인 등)만을 지원하고 싶었는데 이 옵션이 마땅히 없더라고요.

하지만 다행히도 저는 이미 Hetzner 클라우드의 서버를 임대해서 개인용 이메일 서버를 구축해 사용하고 있던 상태였어요. 그래서 이 문제를 쉽게 해결할 순 있었지만 완전히 셀프 호스팅을 할 수는 없다는게 아쉽게 느껴졌어요. 이는 Discourse 를 무료로 셀프 호스팅 하고 싶은 사용자에게는 큰 장벽이 될 거라 예상해요.

두번째는 설치를 위해선 도커가 아니라 자체 CLI 도구를 익혀야 한다는 점이에요. 이게 내부적으로는 도커(Docker)를 사용하기는 하지만, 완성된 이미지를 가져와 사용하는 방식이 아니라 도구를 통해 이미지를 동적으로 생성하는 방식이에요. 그래서 다음과 같은 별도의 명령어를 익혀야 했어요.

./launcher rebuild app # 앱 재빌드
./launcher stop app # 앱 중단
./launcher start app # 앱 시작

보통 도커로 배포하는 소프트웨어들은 동일하고 쉬운 사용 경험을 가진다는 장점이 있어요. 그래서 도커 사용자는 docker-compose.yml 파일만 직접 작성하고 docker compose up -d 명령어만 익히면 바로 소프트웨어를 사용할 수 있게 되거든요. 그런데 Discourse 는 도커와 자체 CLI 도구를 모두 익혀야 하니 불편할 수 있다 생각해요.

아무튼, 우여곡적이 있긴 했지만 설치 자체는 어렵지 않게 끝낼 수 있었어요. 이후에는 사용하던 리버스 프록시(Reverse Proxy) 서버와 연동해 도메인과 SSL 인증을 설정하고 설치를 마쳤어요.


설정하기

설치를 마치고 좀 둘러보니 몇가지 기능적으로 아쉬운 것들이 있었어요. 그래서 먼저 공식 포럼의 플러그인 페이지를 보며 이것저것 설치해보고 테스트하기 시작했는데요. 제가 최종적으로 선택한 플러그인들과 그 이유는 다음과 같아요.

  • Apple Auth: 애플 로그인 지원 (구글, 깃허브 등은 기본 지원)
  • Doc Category: 사이드바에 문서의 목차를 표현할 수 있는 기능
  • RSS Polling: 블로그 글을 자동으로 가져와 Discourse 에 등록할 수 있는 기능
  • Solved: 지식인처럼 질문에 대한 '해결 방법'을 채택할 수 있는 기능
  • Mermaid: 에디터에서 Mermaid 다이어그램 입력을 지원
  • Reactions: 글에 이모티콘으로 응답할 수 있는 기능

가장 마음에 들었던 것은 블로그와의 연동 기능이에요. Discourse 의 Embed 기능과 RSS Polling 플러그인을 결합해 사용할 수 있었는데, 이러면 블로그 글을 Discourse 로 자동으로 가져올 수 있게 되고 블로그에는 Discourse 에 연동된 글의 댓글을 보여줄 수 있게 돼요. 두 사이트가 이렇게 상호적으로 연동될 수 있다는게 신기하더라고요.

플러그인 설정 이후에는 다음과 같이 제게 필요한 옵션들을 변경했어요.

  • 브랜딩 작업(이름, 로고 등)
  • 랜딩 페이지 구성
  • 타사 로그인 기능 설정
  • 가입 약관 설정
  • 폰트 변경
  • 블로그 연동
  • 번역 보완

Discourse 의 거의 모든 옵션들은 어드민 페이지에서 조정할 수 있어서 편리했어요. 초기 설치 이후에는 장애 상황이 아니라면 터미널을 사용할 필요가 없겠더라고요.

조금 아쉬웠던 점은 해외에서 만든 엔진이다 보니 한국어 번역이 아예 되지 않거나, 어색한 번역들이 많이 보였어요. 그래서 이를 발견하고 수정하는 작업이 꽤 걸렸어요. 나중에 가능하면 Discourse 소스에 번역을 보완하는 작업에 기여해보면 좋겠다는 생각해요.


완성!

이제 마무리가 좀 됐어요😄 아직 작성해야 할 글이 산더미지만 하나씩 채워나가다 보면 더 멋진 포럼이 될 거라 생각해요. 여기까지 진행하고 사용해보면서 제가 느낀 Discourse의 장점을 정리해보면 다음과 같아요.

  • 포럼 내의 자체 검색 기능이 뛰어나요.
  • 검색 엔진 최적화(SEO)가 잘 되어 있어요.
  • UI/UX 완성도가 뛰어나요.
  • 문서 작성을 위한 좋은 기능들이 많아요. (Markdown, HTML, Mermaid 등)
  • 타사 앱과의 연동성이 좋아요. (댓글 기능 임베딩, RSS 폴링 등)
  • 사이트 백업/복원이 쉽게 가능하도록 구성되어 있어요.
  • 타사 로그인 기능(OAuth) 연동이 쉬워요.

좋은 점만 있으면 좋겠지만 다음과 같이 몇가지 단점도 있었어요.

  • Discourse 는 게시판형이 아닌 쓰레드형 포럼을 지향해요. 그래서 국내 정서에는 조금 불편한 부분이 있을거라 예상해요.
  • 한국어 번역이 미흡한 곳이 많아요. 하지만 다행히도 대부분의 텍스트는 사이트 관리자가 수정할 수 있어요.
  • 마크다운 형태의 에디터만 가지고 있어요. 이는 위지위그 에디터가 편리한 국내 사용자에게는 맞지 않다고 생각해요. 최신 버전에서는 위지위그 에디터를 실험 기능으로 제공하는데 버그가 많았어요.

다른 것은 괜찮았지만 에디터 문제는 가장 아쉬웠어요. 비개발자 사용자가 글을 작성할 때 큰 장벽이 될 것 같았거든요. 그래서 최대한 빨리 위지위그 에디터가 정식 기능으로 포함되길 기대하고 있어요.


마치며

포럼은 제 꿈인 홈랩 유니버스(위키, 커뮤니티, 뉴스, 리뷰)에서 위키와 커뮤니티의 역할을 수행할 예정이에요. 제가 만든 포럼이 궁금하시다면 이 링크나 상단의 메뉴바에서 'Forum' 버튼을 누르면 이동하실 수 있어요. 궁금하시다면 한번 방문해보시길 바래요.