Discourse가 실효성 있는 댓글 플랫폼이 되기 위해 노력해야 할까요?

이 스레드에 이제야 합류했지만, 확실히 답은 ‘예’라고 생각합니다 :slight_smile:

저희 엔터프라이즈 커뮤니티가 (사용자 측면과 비즈니스 측면 모두에서) 큰 성공을 거두면서, 문서 팀이 연락을 와 documentation.sailpoint.com 전체에 대한 댓글 시스템을 구축할 수 있는지 물어보았습니다. 현재로선 우리가 최소한으로 이루고자 하는 것의 거의 모든 것을 수행할 수 있을 것 같습니다:

  • 댓글 임베딩 (임베딩 기능)
    • 또한 임베딩에 따라 다른 사용자로 게시하고, 다른 태그 집합을 적용하는 것도 사용하고 싶습니다. 이 기능은 곧 출시될 예정입니다:

이것을 제외하고, 문서 팀(그리고 제 팀)이 원했던 모든 것은 Discourse 내에 존재하여, 나머지 “일상적인” 포럼 사용과 이 경험을 효과적으로 분리하면서도 사람들이 댓글을 달고, 답장에 대한 알림을 받을 수 있는 기능을 제공할 수 있습니다.

  • 댓글을 달 수 있는/못 하는 사용자를 지정하는 기능
  • 관련 주제에 카테고리 관리자를 지정하는 기능
  • 메인 사이트에서 이 문서들의 수많은 카테고리를 숨기는 기능
    • 카테고리 검색 불가
    • 메인 카테고리 목록에서 숨기기 위해 테마 컴포넌트 사용
    • 다이제스트에서 제외
    • 기본 무음 카테고리에 추가
  • n일 후 댓글 삭제
  • 기타 몇 가지 설정…

그래도 여기서 언급된 많은 기능들이 구현되는 것을 확실히 보고 싶습니다!

3개의 좋아요

목표가 https://documentation.sailpoint.com/ 에서 사용자가 댓글을 생성할 수 있도록 하는 것인지, 아니면 문서 사이트에 댓글을 임베드하고 사용자가 글을 댓글 달기 위해 Discourse 사이트를 방문하도록 하는 방식이라면 괜찮은 건지 궁금합니다.

3개의 좋아요

전자는 제가 반갑게 맞이할 기능이며 가져보고 싶은 기능입니다(읽어보기: CDCK, 제발 만들어주세요). 후자는 적어도 우리의 최소 요건을 충족합니다.

사실 가까운 미래에 Discourse가 우리의 마크다운 문서를 제공하도록 하는 아이디어를 탐구할 예정입니다(아니, 토픽 안에서가 아니라 전통적인 마크다운 스타일의 문서로요). 이 경우 코멘트와 코멘트를 작성하기 위한 가입이 모두 포함될 것입니다. 하지만 그 탐구는 아직 시작되지 않았습니다.

3개의 좋아요

현재 제가 진행 중인 접근 방식으로는 Discourse 댓글을 MkDocs 페이지에서 직접 생성하는 것이 기술적으로 가능하지만, 이를 위해서는 MkDocs 페이지를 서빙하기 위해 서버 사이드 프레임워크(Remix, Rails 등)를 사용해야 합니다. 이렇게 하면 문서 사이트에서 사용자를 인증(DiscourseConnect를 통해)할 수 있고, 이전에 반환된 댓글을 캐싱하기 위해 인메모리 데이터베이스를 사용할 수도 있습니다.

(수정: 명확히 하기 위해 말씀드리자면, 저는 웹사이트를 Discourse의 인증 제공자(Identity Provider)로 사용하는 것이 아니라, Discourse를 웹사이트의 인증 제공자로 사용하는 것에 대해 이야기하고 있습니다. 후자의 방식은 작동하지만, 대부분의 사용 사례에는 너무 유연성이 부족합니다.)

그러나 팀이这么大的 변경을 감당해야 한다는 점에서 상당한 부담이 될 것입니다.

당신의 관점에서는 이것이 Discourse 내부에서 완전히 이루어지는 것이 더 직관적일 것이라고 생각하시겠지만, Discourse를 콘텐츠 관리 시스템(CMS)으로 사용하는 것도 가능합니다. 이 경우 마크다운 문서는 일반적인 Discourse 토픽으로 생성됩니다. 그리고 Discourse 웹훅(webhooks)을 사용하여 외부 사이트에서 문서 페이지 생성을 트리거합니다. 실제로 제가 설정 중인 Discourse 댓글 데모 사이트의 기반이 바로 이 방식입니다.

5개의 좋아요

이 플랫폼이 내가 좋아하는 바로 그 점이에요. 이 두 가지(혹은 둘 다!)가 가능하도록 모든 기반을 갖추고 있거든요.

5개의 좋아요

이 주제가 오늘의 링크와 연결되었기 때문에, 이 아이디어에 대해 작업을 진행한 후 얻은 결론으로 업데이트해야겠다고 생각했습니다.

OP에서 설명한 이유에 따라, 여전히 Discourse가 좋은 댓글 플랫폼이 될 수 있다고 생각합니다.

구현 방법에 대해서는, 이 작업은 Discourse 측에서 수행되어야 한다고 생각합니다. 이상적으로는 Discourse 댓글 임베드 스크립트를 개선하는 방식으로 이루어져야 합니다. 이는 점진적으로 진행될 수 있습니다.

기술적으로는 Discourse 클라이언트(예: WP Discourse 플러그인)에서 모든 작업을 수행하여 Discourse를 댓글 플랫폼의 서버로 사용하는 것이 가능합니다. 그러나 클라이언트와 Discourse 사이의 상태를 관리하고 속도 제한 문제를 우회해야 하므로, 이는 복잡한 문제로 이어집니다. 이는 제가 유지보수를 책임지고 싶을 만큼 복잡한 것이 아닙니다.

이 주제에 있는 몇몇 게시물에서는 사람들이 블로그 사이트에서 사용자가 Discourse 댓글을 만들 수 있도록만 하는 것에 관심이 있다고 나타났습니다. 제 관점에서 이는 훌륭한 해결책은 아니지만, 현재 Discourse API를 통해 달성할 수 있습니다. 복잡한 부분은 사용자가 일반적인 주류 뉴스 사이트에서 댓글과 상호작용하길 기대하는 것과 유사한 방식으로 웹사이트에서 Discourse 댓글과 상호작용할 수 있는 완전한 댓글 시스템을 구축하려는 시도입니다.

8개의 좋아요

여기서 드루플(Drupal) 통합 모듈을 개발 중입니다. 이 모듈을 사용하면 API를 통해 드루플 측에서 디스커스(Discourse) 댓글을 작성할 수 있습니다.

4개의 좋아요

ActivityPub와 WP Discourse에 대한 제 경험을 바탕으로, 내장된 JavaScript를 통한 양방향 댓글 기능은 구현 가능하다고 생각합니다. 임베드 스크립트에는 다음 사항이 포함됩니다:

  1. 현재 JS 임베드와 유사한 방식으로 작동하는 미인증 “읽기” 기능(일부 최적화 포함).
  2. 원격 클라이언트(즉, 사용자의 브라우저)가 사용자 세션에 특화된 사용자 API 키 클라이언트를 등록하고, 관련 세부 정보를 브라우저의 로컬 스토리지에 저장합니다.
  3. 사용자에게 "댓글을 달려면 로그인하세요"라는 메시지가 표시됩니다.
  4. 사용자가 (Discourse를 통해) 인증하여 세션 사용자 API 키를 가져오며, 이는 브라우저의 로컬 스토리지에 저장됩니다.
  5. 각 활동(댓글, 좋아요 등)은 적절한 안전장치, 처리 및 작업 관리를 갖춘 전용 엔드포인트에 직접 게시됩니다.

적절한 예산이 있다면, 6~8개월 내에 v1 버전을 프로덕션 준비 상태로 만들어 discourse/discourse에 통합할 수 있다고 생각합니다. 초기 출시 후 다음과 같은 작업을 수행할 수 있습니다:

  1. Wordpress, Ghost 및 기타 선별된 플랫폼에 대한 명시적 지원을 추가합니다.
  2. 문서를 작성합니다.
  3. 지원을 제공합니다.

cc @pmusaraj @mcwumbly

6개의 좋아요

비기술 사용자에게도 직관적으로 느껴지도록 구현하는 것이 좋습니다. Disqus나 Facebook 댓글과 같은 기존 플랫폼이 좋은 참고 예시가 될 수 있습니다.

추가 인증 옵션:

  • 클라이언트 사이트를 DiscourseConnect 클라이언트로 만드는 것입니다. 구현은 간단하지만, 클라이언트 사이트에 서버 측 코드를 추가해야 합니다.
  • 사용자가 클라이언트에서 인증하고, postMessage API를 통해 인증 상태를 iframe에 전달합니다: Window: postMessage() method - Web APIs | MDN
  • 사용자가 iframe을 통해 Discourse에 직접 로그인합니다.

이 기능을 순수하게 클라이언트 측에서만 개발하는 데 망설인 이유는 시스템이 어떤 규모의 트래픽에서도 정상적으로 작동할 수 있는지에 대한 문제 때문이었습니다. 기본적으로 API 요청을 큐에 넣고 큐화된 요청의 응답을 처리해야 했습니다. 이는 예를 들어 1,000명의 동시 접속 사용자를 처리하기에 충분히 견고하지 않다고 느꼈습니다. JavaScript 임베드 방식도 유사한 우려가 있지만, 그 이유는 다릅니다. 다만, 모든 것을 클라이언트에서 동기화하려 하는 것보다는 훨씬 쉽게 처리할 수 있을 것으로 예상됩니다.

3개의 좋아요

피드백 감사합니다 :slight_smile:

어제 이 주제가 다시 올라오면서(bump) 좀 더 깊이 생각해 보았습니다(그래서 여기에 게시글을 올린 것입니다). 저는 클라이언트 전용 솔루션(즉, JavaScript 임베드)이 여기에서 실제로 의미가 있는 유일한 방법이라고 생각합니다. 그렇지 않으면 결국 각자 고유한 문제를 가진 여러 플랫폼별 구현체들을 이야기하는 것이 됩니다.

동시성(concurrency)과 부하(load)가 문제가 된다는 지적이 맞습니다. ActivityPub의 경우 상당한 부하와 동시성 문제가 있습니다. 단일 ActivityPub 게시물이 Fediverse와의 수많은 수신 및 발신 요청을 유발할 수 있기 때문입니다. 이러한 맥락에서, 원격 클라이언트가 제어되는 상태이므로 오히려 약간 더 쉬울 수 있습니다. 또한 이 경우 동시성과 부하는 실제로 서버 측(즉, Discourse 측)에서만 문제가 되며, 이들은 문제가 되긴 하지만 백그라운드 작업, 캐싱, 뮤텍스(mutex)를 통해 해결할 수 있다고 생각합니다. 하지만 그렇다고 해도 고려해야 할 중요한 문제들입니다.

3개의 좋아요

솔직히 여기서 가장 우려되는 부분은 타이밍입니다.

Composer v2가 곧 나올 예정인데, 이 모험에 나서는 이상 새로운 composer를 활용하지 않는 것은 미친 짓이겠지만, 이를 경량 앱에서 사용 가능하게 하기 위해서는 사전에 막대한 작업이 필요합니다.

저는 여기서 올바른 접근은 2~3개월 정도 새로운 composer에 대한 동향을 지켜본 뒤, 이 문제를 다시 검토하는 것이라고 생각합니다.

7개의 좋아요

병렬로 처리할 수 있다고 생각합니다. discourse에 두 가지 변경 사항이 필요합니다.
“답장” 버튼은 비등록 사용자에게도 표시되어야 합니다.
reply

비등록 사용자가 이 버튼을 클릭하면 다음과 같은 화면이 표시되어야 합니다:
login
다음으로, 댓글 삽입 방법을 파악해야 합니다. 이는 대량의 작업이 아닌, 비교적 소규모의 코드 변경 사항일 가능성이 높습니다.

2개의 좋아요

Composer v2가 출시된 지금, 이 기능을 개발할 의사가 여전히 있는지 궁금합니다. 여전히 보고 싶고 사용하고 싶은 기능이라고 투표합니다.

이 개념 증명(Proof of Concept)을 Discourse Full App Embed Test 에 구축했습니다.

14개의 좋아요

‘답장’이나 ‘좋아요’ 버튼을 클릭할 때 CSP 오류(로 보이는 오류)가 발생합니다.

1개의 좋아요

개념 증명을 위해 https://discourse-on-a-pi5.falco.dev를 방문한 후 데모를 로드하기 전에 로그인해야 합니다.

7개의 좋아요

첫 번째 게시글을 숨겨서 이렇게 보이게 할 수 있을까요?

또한, iframe에 고정된 높이가 필요한가요? 아니면 현재 임베드처럼 댓글 수에 따라 높이가 자동으로 조절되게 할 수도 있나요?

한 가지 더 질문이 있습니다: GTM/Analytics 코드가 이 임베드 내에서 로드되거나 차단되나요? 이상적으로는 로드되지 않는 것이 좋겠습니다. 그렇지 않으면 통계가 중복되니까요(블로그와 디스코스가 동시에 두 번의 페이지뷰를 트리거함).

3개의 좋아요

그렇게 해주시면 좋겠습니다.

궁극적인 목표는 제목과 첫 번째 게시글(OP)을 숨겨 두 번째 게시글이 먼저 보이게 하는 것입니다.

부모 프레임으로 메시지를 전달하는 것은 불가능한 것은 아니지만, 아직 그 부분을 탐구해 보지 않았습니다.

이것도 추가하기가 쉬운 부분입니다.

7개의 좋아요

전체 페이지 임베드를 위한 실험적 작업을 병합했습니다. 관심이 있으시다면 테스트해 보실 수 있습니다.

아래 단계를 따라야 합니다:

  1. 최신 버전으로 업데이트
  2. 숨겨진 설정인 embed_full_app을 활성화
  3. 페이지에 임베드를 구성하는 JS 스니펫에 fullApp: true 추가

이미 로그인되어 있지 않은 사용자의 경우 로그인 흐름이 아직 매끄럽지 않지만, 이미 유효한 쿠키를 가진 커뮤니티에서는 매우 적합할 수 있습니다.

사용 후기를 알려주세요. 앞으로의 방향을 설정하는 데 도움이 됩니다.

10개의 좋아요

안녕하세요 @Falco 님!

수고 많으셨습니다 :slight_smile:

호스팅된 Discourse 인스턴스(Communiteq/discoursehosting.net를 통해)에서 fullApp 임베드를 사용하려고 시도하고 있는데 문제가 발생하고 있습니다.

다음과 같은 조치를 취했습니다:

  • Communiteq에 숨겨진 설정 embed_full_app을 활성화하도록 요청했습니다.
  • JS 스니펫에 fullApp: true를 추가했습니다.
  • 제 임베딩 호스트가 허용된 호스트 목록에 포함되어 있습니다.

다음과 같은 현상이 발생하고 있습니다:

discourseEmbedUrl 없이:

DiscourseEmbed = {
  discourseUrl: 'https://my-forum-url/',
  fullApp: true
};

→ “Error Embedding” 오류가 발생합니다.

discourseEmbedUrl 사용 시:

DiscourseEmbed = {
  discourseUrl: 'https://my-forum-url/',
  discourseEmbedUrl: 'https://my-platform-url/page-where-I-want-discourse-embedded',
  fullApp: true
};

→ 전체 포럼이 로드되지 않고, embedUrl을 크롤링한 후 리다이렉트됩니다(제 플랫폼은 로그인이 필요합니다). 그 결과 리다이렉트 URL을 제목으로 하는 불필요한 토픽이 생성됩니다.

fullApp: true를 완전히 무시하고 일반 댓글 임베드처럼 작동하고 있습니다.

fullApp 모드에서도 discourseEmbedUrl이 필수적인가요?

그렇다면 토픽 생성을 방지하고 대신 전체 포럼만 렌더링하는 방법이 있을까요?

가이드라인을 주시면 감사하겠습니다.

추가 정보를 제공하거나 테스트를 수행할 수 있습니다.

감사합니다!

2개의 좋아요