WordPress + Discourse 구조에서 Discourse 사이트만으로 전환하는 것이 가능할까요?

안녕하세요!

아래 내용을 읽기 전에 Moved from PluXml and phpBB to Wordpress and Discourse, my all-new experience 🎉 을 참고해 보셔도 되지만, 필수 사항은 아닙니다. 제가 요약해 드리겠습니다.

현재 상태

WP는 WP Discourse 플러그인을 통해 Discourse와 연결되어 있습니다. WP는 또한 DiscourseConnect 클라이언트 역할을 하며, WP 뉴스는 전용 카테고리에 자동으로 게시됩니다. 이 플러그인이 우리가 사용하는 기능은 이것뿐입니다.

  • WP 웹사이트는 주로 뉴스와 정적 정보 페이지에 초점을 맞추고 있습니다.

  • Discourse 포럼은 말 그대로 포럼입니다. 커뮤니티가 만나서 대화하고 때로는 행사를 조직하는 곳입니다.


질문

저는 스스로에게 이렇게 물었습니다. “웹사이트의 목적은 과연 무엇인가? 부가가치는 낮고, 사이트 기능의 상당수는 Discourse에서 구현할 수 있다. 그렇다면 왜 두 가지 플랫폼을 유지해야 하는가?”

아직 제 생각의 초기 단계에 있습니다. 하지만 우리 경우 WordPress를 없애는 것이 좋은 아이디어일 수 있다는 생각이 들기 시작했습니다.

그러면 웹사이트의 장점은 무엇일까요? 깔끔하고 뉴스에 초점을 맞춘 레이아웃이 있습니다. 보기에는 좋지만 아마도 쓸모없는 작은 기능들이 있습니다. 스포츠 연맹의 Facebook iframe. 잡지 버튼. 포럼의 최근 활동.
행사 캘린더(커스텀 솔루션).
그리고 유니사이클 관련 정보에 대한 수많은 정적 페이지들.

이 중 Discourse에서 할 수 없는 것은 거의 없습니다.

가장 큰 우려 사항은 뉴스를 포럼에서 어떻게 더 눈에 띄게 할 것인가입니다. 매주 새로운 정보가 있는 것은 아니지만, 프랑스 유니사이클 커뮤니티에서 중요한 내용이며 눈에 띄어야 합니다.

이 포럼/사이트에 관련된 두 사람과 이 문제에 대해 논의했습니다. 그들은 웹사이트가 우리에게 제공하는 중요한 것을 잃지 않는다면 WP를 없애는 것이 좋은 아이디어라고 생각합니다.

기술적인 사항

  • 커스텀 Discourse 헤더는 그대로 유지할 것입니다.

  • 뉴스는 News Plugin 📰 을 사용할 수 있습니다. 다만 메인 페이지로 사용하는 것은 아닙니다. “포럼” 버튼(예: Elektronauts)을 클릭해야만 포럼의 콘텐츠가 접근 가능해지기 때문이며, 온라인 커뮤니티 활동도 강조하고 싶기 때문입니다. 아직 뉴스 플러그인을 시도해 보지는 않았습니다.

  • 하지만 포럼의 홈 페이지에 일부 뉴스를 표시하고 싶습니다. 토픽 상단에 배너 형태로 몇 개의 게시글을 보여주는 플러그인이나 테마 컴포넌트를 본 기억이 나는데, 제 기억이 틀렸을 수도 있습니다. 이에 대한 기존 솔루션이 있나요? 우리에게는 홈 페이지 상단, 헤더 아래에 최근 3개의 뉴스에 섬네일과 발췌문을 보여주는 것이 가장 좋다고 생각합니다. 그리고 이미 해당 토픽을 읽었다면 배너를 접어서 방해가 되지 않도록 할 수 있으면 좋겠습니다.

  • 웹사이트의 정적 페이지는 토픽이나 게시된 페이지로 전환할 수 있습니다.

  • 위키는 Discourse의 위키 기능을 사용할 수 있습니다.

  • 뉴스레터는 필요하지 않습니다(Discourse의 다이제스트가 이를 대체할 것이며), 공동 관리자도 스포츠 연맹의 임베드된 Facebook 게시물 스트림 및 기타 몇 가지 기능에 실질적인 목적을 보지 못합니다.

  • 이벤트 카테고리 (커스텀 솔루션)가 있는데, 요즘은 다소 비어 있지만 유용한 부분이 있어 특정 기능을 가진 이러한 유형의 이벤트 카테고리를 유지하고 싶습니다.

과거에 여러 이벤트/캘린더 플러그인을 보고 시도해 보았습니다:

몇 가지가 이해하거나 설정하기가 다소 어려웠고, 당시 제 필요와 조금 달랐기 때문에 다시 시도해 봐야 할 것 같습니다.

Discourse만 유지하는 것의 장단점

장점

  • WP, 그 수많은 확장/테마/어색한 커스텀 코드 [1] 및 게시글 게시 시 WP/Discourse 호환성 관련 잠재적 문제들이 더 이상 없습니다.
  • 고려하고 집중해야 할 플랫폼이 하나뿐입니다

  • 모든 데이터가 단일 데이터베이스에 정리되므로, 언젠가 모든 것을 이전해야 할 경우(Discourse도 영원하지는 않으니… 아니면 영원한 걸까요? :face_savoring_food:) 작업이 더 쉬워집니다

단점

  • WP에서 Discourse로 일부 콘텐츠를 "이동"하는 데 상당한 작업이 필요합니다

  • 일부 기능에 대해 적절한 솔루션을 찾아야 합니다

  • 301 리다이렉션을 설정해야 합니다

여러분의 의견, 생각, 조언

제가 무엇을 목표로 하는지 잘 설명했다고 생각합니다. WP+D에서 D로의 이러한 가능한 전환에 대한 제안, 조언 등 어떤 의견이든 환영합니다.


  1. 보지 마세요; 생각조차 하지 마세요, 저는 이미 부끄럽습니다 ↩︎

7개의 좋아요

결국 각 사이트가 얼마나 많은 트래픽을 발생시키는지, 그리고 예산이 얼마인지에 따라 달라질 것 같습니다.

Discourse는 위에서 언급한 모든 기능을 충분히 수행할 수 있지만, WordPress 사이트에서匿名用户에게 대량의 콘텐츠를 제공하고 있다면 페이지뷰당 비용이 훨씬 낮습니다.

정확하게 설정된 5달러짜리 VPS는 수백만 건의 읽기 전용 페이지뷰를 비교적 쉽게 처리할 수 있으며, 이것이 바로 WordPress의 강점입니다. 동일한 트래픽을 Discourse로 제공하려면 훨씬 더 많은 리소스가 필요합니다. SEO(검색 엔진 최적화)나 검색 엔진에 노출되는 콘텐츠 큐레이션에 관심이 있다면 WordPress는 여전히 매우 효과적인 도구입니다. 올바르게 설정하면 검색 엔진에 제공되는 콘텐츠를 큐레이션하는 데에도 상당히 우수합니다.

현재 한 고객은 두 서비스에 대해 DigitalOcean에 월 약 100달러를 지불하고 있습니다. 모든 것을 Discourse로 이전하는 방안을 검토해 봤을 때, 운영 비용은 한 자리 수 이상 더 커질 것이므로, 해당 작업은 결국 진행되지 않았습니다.

4개의 좋아요

좋은 지적이네요. 그 부분에 대한 정보를 언급했어야 했는데 말이에요.

이 사이트는 아주 니치한 성격이 있어서 본질적으로 트래픽이 적습니다. 대역폭이나 디스크 공간 등 어떤 비용도 들지 않아요. 두 사이트 모두 다른 웹 서비스들과 함께 제 VPS에서 부드럽게 돌아가고 있고, 이 모든 일은 자원봉사 차원에서 하고 있습니다. :slight_smile:

다만 SEO 측면은 연구해볼 가치가 있을 것 같아요. 그 부분은 고려하지 못했네요. :thinking:

3개의 좋아요

https://monerochan.news 는 현재 Strapi 헤드리스 CMS 백엔드 + Vercel에 호스팅된 Next.js 프론트엔드를 사용하고 있습니다.

또한 Discourse 포럼이 연결되어 있습니다:
https://forum.monerochan.news/
Strapi 백엔드를 완전히 폐기하고 Discourse를 헤드리스 CMS로만 사용하는 것도 고려하고 있습니다.

따라서 이 문제는 Vercel과 같은 서비스에서 “랜딩 페이지”/가장 많이 방문되는 페이지를 헤드리스 방식으로 호스팅하여 해결할 수 있을 것입니다.
현재 형태에서도 Discourse는 거의 헤드리스 CMS로 작동할 수 있습니다: 토픽 URL에 .json을 붙여 마크다운/원시 게시 데이터를 가져올 수 있습니다.

유일한 문제는 영구 링크, 큐레이션된 토픽 목록, 그리고 작가 및 편집자를 위한 게시 + 권한 시스템입니다. 일부는 그룹과 카테고리로 처리할 수 있지만, 단일 “기사”/“미리보기 기사” 카테고리가 있다면 좋겠습니다.

이를 위한 플러그인을 만들어 보는 건 어떨까요 :thinking:

@Canapin 토픽 올려주셔서 감사합니다! 좋은 글이었습니다 :grinning: :+1:

4개의 좋아요

그것은 반정적(semi-static) 콘텐츠를 서빙하는 것이 메인 페이지뿐이라는 전제를 하고 있습니다. 제가 위에서 드린 예시에서는 해당 사이트가 1만 개 이상의 게시물과 페이지를 가지고 있습니다.

1개의 좋아요
export const getStaticProps: GetStaticProps = async ({params}) => {
  // Run API calls in parallel
  const id = params?.id

  if (!id) {
    return {
      redirect: {
        destination: '/',
        permanent: false,
        // statusCode: 301
      },
    }
  }
  const qs = require('qs');
  const query = qs.stringify({
    populate: '*', 
  }, {
    encodeValuesOnly: true, // prettify URL
  });
  const article = await fetchAPI("/api/articles/" + params.id + "?"+ query)
  if (!article.data) {
    return {
      redirect: {
        destination: '/',
        permanent: false,
        // statusCode: 301
      },
    }
  }

  return {
    props: { article },
    revalidate: 1,
  }
}

저는 이 코드를 Next.js 프론트엔드에서 글을 가져오기 위해 사용합니다. 이렇게 하면 글을 1초간 캐시한 후 재검증(revalidate)하게 됩니다. 따라서 이 방식을 사용하면 Discourse 인스턴스는 초당 1개의 요청만 받게 됩니다.

이는 특정 사용자 그룹(저자 및 편집자)이 관리하는 특별한 카테고리에만 적용하는 것이 아니라, 모든 콘텐츠에 적용할 수도 있습니다. monerochan.news의 Strapi 백엔드도 Discourse와 마찬가지로 마크다운을 제공합니다. 따라서 동일한 코드를 사용하여 게시글 데이터를 가져올 수 있습니다(일반적인 토픽 URL에 .json만 붙이면 됩니다) 그리고 이를 표시할 수 있습니다.
물론 이 경우 Discourse의 인터랙티브 기능은 누락됩니다. 하지만 "댓글 달기!"라고 적힌 버튼을 두어 Discourse 페이지로 리다이렉트하는 방식으로 해결할 수 있습니다. Next.js 페이지는 매우 빠르게 로드되고 SEO에도 유리합니다.

따라서 두 가지 상황이 있을 것 같습니다. 1. 저자와 편집자가 큐레이션하는 특별한 카테고리를 가진 뉴스 사이트. 2. 사용자가 생성한 콘텐츠를 가진 일반적인 Discourse 포럼.
두 경우의 혼합 형태도 가능합니다.

두 경우 모두 헤드리스 프론트엔드를 구축하면 많은 이점이 있을 수 있습니다.

1개의 좋아요

위에서 언급한 작업 중 어떤 작업이든 뉴스 플러그인, 랜딩 페이지 플러그인 또는 이벤트 플러그인을 사용하여 수행하는 데 어려움이 있다면 언제든 알려주세요. 기꺼이 도와드리겠습니다.

이벤트 플러그인에 대해서는, 곧 출시될 v2 버전에 구현할 추가 사용 사례를 찾고 있으므로 피드백을 주시면 좋겠습니다. 아래 마법사를 작성해 주세요:

3개의 좋아요

제가 잘 이해했다면, 흥미로운 아이디어네요. 기본적으로 포럼은 그대로 유지하면서, 자체 제작한 웹사이트를 추가로 운영하여 콘텐츠는 Discourse API를 통해 포럼 데이터에서 가져오는 방식이죠? 맞나요?

@Stephen, WordPress의 주장도 일리가 있습니다.

특히 캐시 시스템을 사용할 경우 WordPress는 매우 빠르게 로드되는 반면, Discourse는 앱을 전체적으로 로드해야 하므로 열 때마다 항상 시간이 좀 걸립니다.

제 사이트 https://monocycle.info 는 빠르게 로드되며 페이지 간 이동도 거의 즉시 이루어집니다.

WordPress를 제거하려는 아이디어에는 제가 나열한 여러 이유가 있지만, 포럼을 더 눈에 띄고 명확하게 보이게 하고 싶다는 점을 빠뜨렸네요. 사람들이 사이트에 접속하는 즉시 활발한 커뮤니티가 있다는 것을 바로 알아채기를 바랍니다.

Discourse에서 가입하고 게시하는 경험은 데스크톱과 모바일 모두에서 즐겁고 불편함이 없습니다.

WP는 홈페이지에만(또는 그보다 약간 더 많은 부분에) 유지하고, 대부분의 콘텐츠를 Discourse의 주제/게시된 페이지로 이동할 수 있습니다.

좋네요! 마법사를 작성하기 전에 플러그인을 다시 한번 살펴봐야 할 것 같습니다. 어떤 기능을 제공하는지, 전체적으로 어떻게 작동하는지 정확히 알아야 하니까요. :+1:

1개의 좋아요

워드프레스 사이트에 커뮤니티 콘텐츠를 더 많이 올리는 건 어떨까요? 그렇게 하면 노출도를 높일 수 있습니다.

1개의 좋아요

더 구체적인 아이디어가 있으신가요? 홈페이지에 접속하면 “토론” 링크와 최근 생성된 주제 목록이 표시됩니다.

1개의 좋아요

네! 제가 말씀드린 바로 그겁니다! Discourse 쪽에서 해야 할 일도 많지 않아요. 어떤 주제 링크에든 .json을 붙이면 이미 API를 사용할 수 있습니다!
예를 들어, 우리가 현재 대화 중인 이 주제를 확인해 보세요:
https://meta.discourse.org/t/go-from-a-wordpress-discourse-structure-to-a-discourse-site-only/247273/8.json?include_raw=true

끝부분의 .json과 include_raw=true를 주목해 주세요. 이렇게 하면 “cooked” HTML 외에도 게시물의 마크다운 원문까지 가져올 수 있습니다.

Strapi도 마크다운 에디터를 사용하므로, 이전과 동일한 코드를 그대로 사용할 수 있습니다.

2개의 좋아요

그 말에 저는 정말 의자에서 벌떡 일어났습니다. 제 이해로는 .json와 include_raw=true를某种 자동화(n8n)와 함께 사용하면, 메타 태그와 마크다운을 직접 git 저장소에 푸시함으로써 모든 discourse를 Hugo로 기술적으로 재라우팅할 수 있다는 거였나요??

1개의 좋아요