중첩된 답변 기능 소개

의미 있는 대화가 이루어지려면 방 안의 모든 사람이 서로의 생각을 들어야 합니다. Discourse에서 이를 가능하게 하는 가장 좋은 방법은 언제나 평탄하고 선형적인 타임라인이었습니다. 하지만 평탄한 구조가 모든 커뮤니티에 적합하지는 않습니다. 크고 빠르게 움직이는 포럼에서는 단일 타임라인에 수천 개의 답변이 쌓여 아무도 따라가기 어렵습니다. 그래서 올해 우리는 완전히 중첩된 답변 뷰를 신중하게 실험해 왔으며, 평탄한 형식을 벗어난 커뮤니티에 매우 적합하다고 생각합니다.

실험용 플러그인으로 시작해 지금은 Discourse에 직접 포함되어 출시되는 프로젝트로 발전했습니다. 현재 중첩된 토픽이 어떻게 보이는지 미리 살펴볼 수 있습니다:

특정 게시글이 링크(공유 링크 또는 알림)로 연결될 때, 단일 스레드 뷰가 표시됩니다:

사이트에서 활성화하기

이 기능을 활성화하는 사이트 설정은 관리자 인터페이스에서 사용할 수 있습니다. “Nested Replies” 섹션으로 이동하여 기능 제어, 기본 정렬 모드, 최대 깊이 등을 설정할 수 있습니다.

로드맵

작성 시점 itibari로 중첩 답변은 아직 초기 단계입니다. 로드맵이 완전히 구체화되지 않았습니다. 우리가 반드시 할 것으로 알고 있는 몇 가지 사항은 다음과 같습니다:

  • 더 나은 모바일 경험

  • 중첩 뷰를 위한 토픽 타임라인 재설계. 현재 중첩 답변 모드에서는 토픽에 타임라인이 없습니다.

  • 토픽 목록의 "Hot"과 유사하게, 시간 경과에 따른 감쇠(age decay)를 적용한 게시글 정렬 모드 최소 1개 추가.

한계점

  • 카테고리에서 중첩 기능이 활성화된 경우, 기존 토픽은 평탄한 모드를 유지합니다. 각 토픽은 관리자 톱니바퀴 아이콘에서 개별적으로 전환할 수 있지만, 기존 카테고리를 중첩 모드로 변환하는 방법은 현재 없습니다.

여러분의 피드백을 환영합니다

이 기능의 개발 방향을 설정하는 데 도움이 될 여러분의 피드백과 사용 경험을 필요로 합니다. 이 기능이 여러분의 커뮤니티에 잘 맞을 것 같다면 사용해 보고, 여러분과 사용자들의 생각을 알려주세요!

54개의 좋아요

와, 최고야. 타이밍도 정말 완벽해. 오늘 밤 포럼을 2개 컨테이너를 사용하는 새 서버로 마이그레이션하는 중인데, 몇 주 후 정규 시즌과 스포츠 풀이 시작되면 이걸 새 서버로 전환할 생각에 벌써부터 설레. 이거 좋은 테스트 케이스가 될 것 같아.

평탄한 토론과 내장형 토론을 모두 선택할 수 있다는 점이 정말 멋질 거야 — @markvanlan 팀, 정말 고마워.

무엇이 깨질지도 지켜보는 재미가 있을 거야 :laughing:

17개의 좋아요

참고로, 트리의 여러 가지에 새 답글이 있을 때, 단일 스레드 보기에서는 한 번에 하나씩만 표시되는 것 같았습니다. 여러 번 다시 방문해야 했고, 읽지 않은 개수가 매번 하나씩 줄어드는 상황이었습니다.

1개의 좋아요

디스코urses를 업데이트했지만 이 기능을 활성화하는 옵션을 찾을 수 없습니다!

자체 호스팅을 사용 중인데, 이것이 원인일 수 있습니다 :sweat_smile:

Discourse 인스턴스를 업데이트한 다음, 모든 사이트 설정으로 가서 "nested"를 검색하세요.

새로운 토픽을 만들 때 토픽 관리자 렌치(도구)를 사용하여 이를 전환할 수 있습니다.

특정 카테고리에서 이것이 기본값이 되希기를 원한다면 카테고리 설정 탭에서 활성화할 수 있습니다.

저도 셀프호스팅을 하고 있는데 완전히 정상적으로 작동합니다.

11개의 좋아요

신속한 처리에 감사합니다 :+1:

1개의 좋아요

Select Posts > Bulk Actions 옵션을 통해 기존 토픽을 일괄 변경/업데이트할 수 있나요?

아니면 기존 모든 토픽을 일괄 업데이트하기 위한 rails console 옵션이 있나요?

3개의 좋아요

네, 일괄 작업 옵션 중 하나로 토글이 가능합니다 :slight_smile:

3개의 좋아요

음, 수만 개의 주제를 가진 카테고리에서 일괄 토글 기능이 얼마나 실행 가능한지 확실하지 않네요. Rails의 일괄/배치 변환 작업이 대안이 될 수 있을까요? :thinking:

그리고 이 작업은 되돌릴 수 있나요? 스레드형 주제를 다시 평면형 주제로 변환할 수 있을까요?

3개의 좋아요

네, 동의합니다. 현재로서는 _한계_이며, 앞으로도 계속 고민해 보겠습니다.

활성화 시 카테고리 내 과거 토픽을 변환하지 않기로 한 큰 이유는 사용자가 다르게 상호작용할 가능성이 높기 때문입니다. 평면 모드에서는 다양한 답글 버튼이 그렇게 중요하지 않습니다. 게시글은 토픽 하단에 배치되므로, 사용자가 중첩 보기로 변환되는 "맞는 버튼"을 항상 의도적으로 누르는지 확신할 수 없습니다.

결국 관리자가 과거 토픽에 이 기능을 활성화하면 갑자기 대화가 읽을 수 없게 될까 봐 걱정됩니다. 계속 고민해 보겠습니다. 제가 떠올릴 수 있는 가장 쉬운 변경 사항은 카테고리 설정을 토글할 때 "기존 토픽에 이 설정을 적용하시겠습니까?"라는 모달 팝업을 표시하는 것입니다.

9개의 좋아요

놀랍네요! 이렇게 보니 정말 기쁩니다! :clap:

2개의 좋아요

저는 항상 “답글” 레이블이 더 구체적이면 좋겠다고 생각했습니다. 그래서 얼마 전 커스텀 CSS를 사용해 컨텍스트를 추가했습니다:

스크린샷

image

CSS
/* 원본 게시물(즉, 토픽)의 답글 버튼에 텍스트 추가 */
#post_1 nav.post-controls {
  .actions {
    button.reply {
      span.d-button-label:after {
        // 답글 뒤에 이 콘텐츠 추가
        content: " 이 토픽에";
      }
    }
  }
}

/* 이후 모든 게시물의 답글 버튼에 텍스트 추가(이것들을 댓글이라고 부름) */
nav.post-controls {
  .actions {
    button.reply {
      span.d-button-label:after {
        // 답글 뒤에 이 콘텐츠 추가
        content: " 이 댓글에";
      }
    }
  }
}

/* 페이지 하단에 표시되는 파란색 답글(토픽에) 버튼에 텍스트 추가 */
#topic-footer-buttons {
  .topic-footer-main-buttons {
    button.btn-primary.create {
      span.d-button-label:after {
        // 답글 뒤에 이 콘텐츠 추가
        content: " 메인 토픽에";
      }
    }
  }
}
4개의 좋아요

이 솔루션의 문제는 멤버들이 설정에서 영어 이외의 언어를 선택한 경우, UX가 해당 언어로 번역되지 않는다는 것입니다.

수정: 여기에 해결책이 있습니다:

3개의 좋아요

흥미롭네요…

이것이 기존 모든 주제를 변환하기 전에, 먼저 우리 커뮤니티에서 격리된 상태로 테스트해 봐야 한다는 것을 시사하는 건가요? :thinking:

수만 개의 주제를 지원하는 전제 하에서는 작동할 것 같습니다.

하지만 이 작업은 되돌릴 수 없다는 점을 매우 명확하게 해야 할 것입니다 :sweat_smile:


이 기능은 먼저 메타(meta)에서 구현될까요, 아니면 프로덕션 환경 밖에서 테스트할 수 있도록 https://try.discourse.org에서 구현될까요?

2개의 좋아요

제가 운영 중인 커뮤니티라면 먼저 격리된 상태로 테스트할 것입니다. 반면, 여러분이 전체 커뮤니티에서 활성화하면 더 가치 있는 피드백을 더 빨리 얻을 수 있을 것입니다 :wink: 장난 aside, 격리된 상태로 테스트하는 것이 현명할 것 같지만, 여기에는 파괴적인 데이터 마이그레이션이 없습니다. 안전하게 활성화하고 비활성화할 수 있습니다. 여기서 내리는 결정은 어느 쪽으로든 여러분을 묶어두지 않습니다.

아마도 이 부분은 제가 우연히 답해버린 것 같습니다! 중첩(nesting)을 활성화하면 DB의 각 주제에 대해 nested_topic 레코드를 생성하고, 계보 트리의 답장 수를 계산하기 위한 작업을 시작합니다. 중첩을 비활성화하면 해당 nested_topic 레코드가 삭제되고 평탄한 구조로 돌아가며, 아무런 문제가 없습니다.

이 카테고리에서 자유롭게 플레이해 보십시오:

3개의 좋아요

이 기능이 일반 사용자가 아닌 스태프만 토글할 수 있는 이유가 있나요? 메타에 도입된다는 소식을 접했을 때, 게시글 유형 메뉴에 추가될 줄 알았는데, 실제로는 스태프용 렌치 아이콘 뒤에 숨겨져 있었습니다.

구체적인 사용 사례가 있는지는 모르겠지만, 게시글 투표 기능이 구현된 방식과 동일하게 적용될 것이라고 생각했습니다.

4개의 좋아요

이것이 사용자의 결정이나 선호에 따라 달라지는 것은 원치 않습니다. 사이트가 어떻게 기능해야 하는지는 관리자(Administer)가 결정할 문제입니다. 두 패러다임은 매우 다르며, 동일한 콘텐츠에 대해 사용자가 이렇게 다른 방식으로 상호작용해서는 안 됩니다. 적어도 현재 우리의 생각은 그렇습니다.

10개의 좋아요

광고 블록은 이 구조에서 잘 작동하지 않으며, 토픽 변환 시 화면의 항목이 사라지고 제목만 편집할 수 있는 버그가 발생하는 경우가 많습니다.

좋은 기능입니다! 다만 :thinking: 중첩 레이아웃 자체보다는 Top / New / Old 정렬 방식에 더 관심이 있습니다. 제 모바일 앱(Discourse 클라이언트)에서 유사한 정렬 컨트롤을 구현한 적이 있는데, 아래에서 보여드릴 현재 방식도 작동은 하지만, 이 기능을 네이티브로 지원할 수 있다면 좋겠습니다.

소스 코드를 살펴보니 GET /n/{slug}/{topic_id}.json?sort={top|new|old}&page={n}이 선택한 모드에 따라 정렬된 중첩 뷰의 토픽을 반환하는 것을 확인할 수 있습니다. 제 질문은 다음과 같습니다. 기존 /t/{slug}/{topic_id}.json 엔드포인트를 통해 정렬 기능만(예: ?sort=top) 노출할 의향이 있나요? 그렇게 되면 플랫 뷰를 사용하는 클라이언트도 혜택을 볼 수 있을 것입니다.

만약 플랫 뷰에서도 정렬이 가능하다면, 서드파티 클라이언트는 중첩 뷰 렌더링 모델을 채택하지 않고도 이 기능을 선택적으로 사용할 수 있습니다.

서버 측 정렬이 가능하게 만드는 것은 중첩 뷰의 데이터 구조(루트 게시물 + 지연 로드되는 자식 요소)라는 점과, 플랫 뷰는 페이지네이션 방식이 다르다는 점을 잘 알고 있습니다. 성능 문제로 인해 완전한 플랫 정렬이 현실적이지 않다면, 선택적인 ?sort=top&limit=N 파라미터만 지원해도 “하이라이트” 뷰를 구현하는 데 충분할 것입니다.

1개의 좋아요

Chris Pratt Shocked Happy Reaction

1개의 좋아요