더 큰 Rails 앱의 일부로 Discourse를 사용하는 방법?

Discourse를 더 큰 Rails 애플리케이션의 한 구성 요소로 사용할 수 있을까요?

제 목표는 다음과 같습니다:

  • 데이터베이스 공유: Rails 애플리케이션이 Discourse와 동일한 데이터베이스를 사용하길 원합니다.
  • 로그인 공유: Discourse의 로그인 시스템을 사용하고, 세션 쿠키를 재사용하여 앱의 다른 부분에서도 사용자가 인증된 상태를 유지할 수 있으면 좋겠습니다.
  • 내 구성 요소에 새로운 라우트 여러 개를 추가하는 것.
  • 보너스: 로그인한 사용자를 해당 추가 구성 요소로 연결하도록 Discourse의 뷰 헬퍼를 커스터마이즈하는 것 (이것은 설정만으로 처리할 수 있는지도 모르겠지만, 사이트 전체의 정보를 커스터마이즈할 수 있는 오버라이드 가능한 Rails 헬퍼가 있는지 궁금합니다).

HAProxy를 사용하여 Discourse를 프록시 뒤에 두고 도메인의 경로로 라우팅하는 방법에 대한 게시글을 확인했습니다. 하지만 저는 Rails 프레임워크를 다른 앱에서 중복해서 사용하지 않으려고 하기 때문에 이것이 원하는 방식이 아닙니다 (또한 다른 앱에서 사용자 세션을 얼마나 쉽게 재사용할 수 있을지도 불확실합니다). Discourse를 더 큰 Rails 애플리케이션의 구성 요소로 사용할 수 있을까요?

이것이 가능한지조차 확신할 수 없지만, 가능하다 해도 반드시 권장되는 방식은 아닙니다.

  1. 설치 환경이 너무 커스터마이징되어 있어 우리 커뮤니티가 지원을 제공할 수 없게 됩니다.
  2. Discourse에 적용된 모든 변경 사항을 직접 병합(Merge)해야 합니다. 우리가 저장소에 커밋하는 속도를 고려하면, 변경 사항에 따라 상당한 양의 작업이 필요할 수 있습니다.

이미 SSO를 통해 이 정도는 가능합니다. 이러한 유형의 작업에는 SSO가 더 권장되는 접근 방식입니다.

좋습니다. 처음부터 이것이 권장되지 않는다는 걸 알게 되어 다행입니다. 시도해 보다가 처참하게 실패하는 수고를 덜 수 있네요!

네. 가장 좋은 방법은 리버스 프록시 뒤에 두 개의 Rails 앱(Discourse와 제 커스텀 앱)을 두는 것인 것 같습니다.

고려해 본 결과, 두 개의 데이터베이스를 유지하는 것이 제 앱이 Discourse의 의도와 다르게 데이터베이스를 업데이트하는 문제를 방지하는 데 더 나은 선택인 것 같습니다.

감사합니다.

음, 나는 좀 덜 비관적으로 봅니다. 이걸 아주 큰 플러그인이라고도 볼 수 있죠.

Custom Wizard 플러그인은 워낙 방대해서 사실상 별도의 앱에 가깝습니다(특히 프론트엔드에서).

Discourse에는 재사용할 수 있는 유용한 범용 기능이 많이 내장되어 있습니다. 예를 들어 사용자 계정 프레임워크와 기능, 배포 파이프라인 등이 있죠.

또한 프론트엔드에서 Discourse를 활용해 다양한 사용 사례를 구현할 수 있습니다. 토픽을 페이지로 사용할 수 있는 식이죠.

여기서는 디테일이 관건이라고 생각합니다.

제 개인적인 의견입니다.

맞아요 - "앱"을 통합하기 위해 큰 플러그인을 만들 수도 있습니다. 얼마나 깊이 파고들고 싶은지에 따라 다양한 가능성이 있습니다!

별도의 앱을 가지는 장점 - 여기서 더 나은 지원을 받을 수 있으며, Discourse에서 이루어지는 업데이트가 앱 쪽에 영향을 주지 않습니다.

사이트를 "대형 Discourse 플러그인"으로 만드는 장점 - Discourse에서 사용할 수 있는 모든 기능과 헬퍼(사용자 관리 관련 기능 포함)를 활용할 수 있으며, 이는 결코 과소평가할 수 없는 이점입니다.

무엇을 구축하느냐에 따라 달라지겠지만, @justin은 직접 Discourse 위에 스캐폴딩을 할 경우 발생할 수 있는 유지보수 부담에 대해 경고를 하고 싶어 하는 것 같습니다. Discourse에 직접 스캐폴딩을 구축하는 경우 완전히 지원할 수 있는 방법은 없으며, 내부 헬퍼와 스키마는 모두 변경될 수 있으므로(Subject To Change) 오히려 더 큰 문제가 될 수 있습니다. 물론 무엇을 구축하느냐에 따라 달라지겠지만, 그만큼 가치가 있을 수도 있고요 :wink:

네, 그 말씀이 아주 맞습니다. 코어 변경에 강인한 플러그인을 작성하려면 경험이 필요합니다. Discourse의 변경 사항에 맞춰 앱의 일부 요소를 발전시켜야 합니다. 하지만 충분히 가능합니다.

플러그인을 잠시 살펴봤습니다. 저는 Ember 대신 다른 JS 프레임워크를 사용하는 것을 선호합니다(저는 Svelte 팬입니다). 이 방식이 Discourse Rails 앱(제가 잘 모르는 부분)에 한 겹의 인터페이스를 추가해서 문제를 해결하는 데 더 복잡함을 더할까 봐 조금 우려됩니다. 그래서 이걸 독립적인 앱으로 유지하는 쪽으로 기울고 있습니다. 저는 Rails를 꽤 잘 알고 있고(또는 Rails 앱을 프록시하는 것도 잘하고) Discourse는 아직 잘 모르지만, 이 방향으로 가면 장애 요소가 적을 것 같습니다.