디스코스를 코믹 리뷰/토론 플랫폼으로 활용하기

제가 Discourse가 적합한 플랫폼인지 확신이 서지 않는 다소 특수한 사용 사례가 있습니다.

약 5,000~7,000개의 만화를 중심으로 토론 플랫폼을 구축하고 싶습니다. 하지만 모든 토론을 단일 주제(topic) 아래에 두는 것은 같은 만화 내에서 서로 다른 토론 주제를 추적하기 어렵기 때문에 원치 않습니다. 그래서 각 만화마다 "카테고리(Category)"를 생성하고, 그 아래에 개별 주제들을 배치하는 것이 좋겠다고 생각했습니다. 또한 이렇게 하면 서버와 클라이언트 양쪽에 부하가 발생할 수 있다는 내용을 읽었습니다.

참고로 내비게이션은 문제가 되지 않습니다. 각 만화는 고유한 식별자를 가지고 있으며 커뮤니티 멤버들도 이를 알고 있기 때문에 카테고리를 둘러볼 필요가 없습니다. 사용자는 식별자를 입력하여 해당 카테고리를 찾을 것입니다.

비슷한 기능을 구현하는 더 나은 방법이 있을까요? 태그를 사용하면 도움이 될까요?

간단히 말하면: 네, 그게 맞습니다.

각 게시물에 태그 사용을 강제할 수 있을까요? 이상적으로는 포럼에 어떤 만화에 속하지 않는 내용이 포함되어서는 안 되니까요.

카테고리 - 태그 설정을 확인하세요:

태그를 프로그래밍 방식으로 채울 수 있을까요? 한 가지 아이디어로 각 태그마다 주제를 생성하는 방법을 생각해 보았지만(태그를 생성하는 유일한 방법인 것 같습니다) 주제를 절차적으로 생성하는 방법에 대한 정보를 거의 찾을 수 없었습니다.

저희 보드게임 커뮤니티에서 정확히 이렇게 하고 있습니다. 데이터베이스에 보드게임이 추가되거나 이름이 변경되면, 태그와 사용자 정의 토픽 두 개가 생성/업데이트됩니다.

기억이 정확하지는 않지만, 이 작업을 할 때 단일 태그를 생성하기 위한 특정 엔드포인트는 없었던 것 같습니다(다만 토픽을 생성할 때 새 태그를 추가할 수는 있었습니다). 대신 배치 태그 업로드 기능을 활용해서 처리했습니다.

아래와 같은 코드입니다:

const formData = new FormData();
formData.append("file", Buffer.from("the-tag-name,an-optional-tag-group"), {
  contentType: "text/csv",
  filename: "tags.csv",
});
const { data } = await axios.post(`${process.env.DISCOURSE_URL}/tags/upload.json`, formData, {
  headers: {
    ...formData.getHeaders(),
    "Api-Key": process.env.API_KEY,
  },
});

아, 그렇군요. tags.csv 파일의 내용을 볼 수 있을까요?

What CSV format is needed for importing tags? 를 참조하세요

유사한 미국 사례를 조사하던 중, 한 태그 그룹의 태그가 필수로 지정되어 사실상 최상위 구조(카테고리 대체)로 사용되고 있음을 발견했습니다.

현재 태그는 데이터 속성에 이름만 저장되어 있습니다. 태그 그룹도 속성에 함께 저장된다면 UX에서 태그 그룹을 구분할 수 있을 텐데, 그러면 좋겠습니다.

수정: 이 기능에 대한 요청을 게시했습니다: Add a data-tag-group attribute for tags

많은 질문을 드려 죄송하지만, 태그와 토픽과 관련된 또 다른 기능에 대해 궁금합니다.

특정 태그에 토픽을 "고정"할 수 있나요? 즉, 해당 태그를 선택했을 때 사용자가 토픽 목록에서 가장 먼저 볼 수 있는 항목이 고정된 토픽이 되도록 하는 것이 가능한가요?

기본 고정 모달에서 태그에 주제를 고정할 수 없습니다. 제가 아는 방법으로는 두 가지가 있습니다:

  • 태그에는 태그 배너 컴포넌트를 사용하여 표시할 수 있는 설명이 있습니다.
  • 저는 이전에 어떤 경로에서든 주제를 렌더링할 수 있게 해주는 컴포넌트를 만들었습니다. 시도해 볼 수 있습니다: Topic Banners component

두 번째 옵션이 내가 찾고 있는 정확한 해결책처럼 보입니다. API를 통해 각 태그에 대해 이 배너 주제를 프로그래밍 방식으로 설정할 수 있나요?

그 방법을 어떻게 해야 하는지 잘 모르겠어요. 한 가지 신경 써야 할 점은 렌더링이 다소 느려 보인다는 거예요. 개발자로서 왜 그런지 설명하거나 이해할 수준은 아니지만, 모든 페이지에서 사용하게 되면 포럼이 느려질 수 있어요.