@leighno5 님, 안녕하세요.
개인 경험을 바탕으로 말씀드리자면, Ruby와 Rails를 충분히 이해하여 Discourse 플러그인을 쉽게 작성하거나(또는 어떤 Rails 클래스든 수정할 수 있을 정도) 익숙해진다면, 님이 현재 포크에서 하려는 일을 Ruby 플러그인으로 하는 것이 훨씬 쉽습니다.
반대로, Rails와 Ruby를 Discourse 플러그인을 작성할 정도로 충분히 이해하지 못한다면, 제 경험상 Discourse를 포크하여 코어에 손을 대는 것은 "잘못된 방향"입니다.
비유하자면 이렇습니다(이 단순한 비유로 죄송합니다):
“누군가가 걷는 것이 어렵다고 판단하여, 대신 달리기 결정을 내린 경우입니다.”
설명해 드리겠습니다. 괜찮으시다면요:
Rails 애플리케이션 개발을 시작하기 전(Discourse와는 무관하게), 그리고 Discourse 플러그인을 작성하려 했을 때 저는 약간 길을 잃었고, 아마도 Discourse에 대해 조금 불만도 있었을 것입니다. 처음에 골프공을 치고자 할 때와 비슷합니다. 공이 직진하지 않고 페어웨이 중앙에 공을 두는 데 많은 노력이 듭니다. Discourse를 포크하는 것은, 짧은 아이언으로 칩샷과 퍼팅을 할 수 있을 때조차도 연습장에서 드라이버를 꺼내 드는 것과 같습니다!
저는 Discourse 해킹에서 한동안(수개월) 쉬면서, 실제로 여러 개의 Rails 애플리케이션을 처음부터 구축하는 작업을 했습니다. 그리고 나서(그리고 오직 그때) 비로소 Rails에 대한 몇 가지 “직관적인” 지식을 갖추기 시작했습니다. 그 후, Discourse를 수정하기로 결심했을 때(현재 저는 Discourse 프로덕션 환경에서 제가 작성한 6개의 커스텀 플러그인을 운영 중입니다), 모든 것이 직관적으로 느껴졌고 Ruby 코어를 수정하는 플러그인들은 너무 쉬워졌습니다.
Ruby는 매우 유연합니다. 어떤 클래스든, 어떤 객체든 오버라이드할 수 있습니다. Ruby의 모든 측면을 재정의할 수 있습니다. 몇 가지 경험을 쌓으면, "와, Ruby가 이렇게 유연하고(강력하고) 강렬하다는 건 몰랐네"라고 느끼기 시작하며, Ruby와 Rails로 슈퍼맨처럼 날아다니게 되어 "위험한 존재"가 되기 시작합니다. 그때 우리는 Ruby와 Rails 여정의 시작점에 있는 것이지, 끝점에 있는 것이 아닙니다!
2020년에 쌓은 Ruby와 Rails 지식을 바탕으로, 지금 제가 아는 것을 안다면, 님이 제안하듯 Discourse를 포크하여 Ruby와 Rails 코어에 변경 사항을 가하는 일은 절대 하지 않을 것입니다. Ruby 클래스의 기본 개념과 메타 프로그래밍의 기본을 이해한다면, 플러그인으로 Ruby 클래스를 오버라이드하고 수정하는 것은 너무도 쉽기 때문입니다.
솔직하게 말씀드리면 죄송하지만, 제 말은 이렇습니다. 누군가가 몇 가지 사소한 Ruby 변경 사항을 위해 Discourse 코어를 해킹해야 한다고 생각한다면, 그 사람은 Ruby와 Rails를 충분히 이해하지 못하고 있다는 뜻입니다. 만약 충분히 이해하고 있다면, 코어를 해킹하지 않고 클래스를 오버라이드하는 간단한 플러그인을 작성하고 몽키 패칭(monkey-patching)을 즐겼을 것이기 때문입니다.
반면, 만약 제가 Discourse의 EmberJS를 React와 Ant Design으로 교체하는 것과 같이 미친 짓을 하고 싶고 불행해지고 싶다면, 포크하는 것이 유일한 방법일 것입니다! 그러나 제 생각에는 "Discourse"는 "JavaScript 라이브러리"로 정의되는 것이 아닙니다. Discourse는 핵심 개발 팀(사람들)의 기술, 디테일에 대한 관심, 고객 서비스, 오픈 소스 코드 개발에 대한 팀 접근법, SPA 기능 파이프라인, 그리고 그들의 모든 노력으로 정의됩니다. Ember보다 Ant Design(React)이나 VueJS를 더 좋아할 수도 있다는 이유만으로 그 모든 지능을 버리는 것은 (제 생각에) 약간 미친 짓일 것입니다.
이것은 단순히 여기저기 Discourse 코어를 수정하려는 경우에도 더더욱 적용됩니다. 그렇게 하려고 포크하여 "사람들"을 버리는 것은 약간 "미친 짓"일 것입니다. 그 "사람들"이 바로 “진짜” Discourse(코드가 아닌)이기 때문입니다.
저는 2020년에 Ruby와 Rails를 배우며 겪은 개인적인 여정에 대해만 말씀드리고 있습니다. 이제 (기본적인 부분은) 쉬워지고 있고, 저는 "위험한 존재"가 되고 있습니다, LOL. 저는 “무엇이든 몽키 패칭으로 뚫고 나갈 수” 있지만, 이것이 항상 좋은 것은 아닙니다. 그리고 바로 이것이 Discourse 플러그인의 존재 이유입니다.
코어는 바위처럼 단단하게 유지하고, 플러그인으로 Discourse를 "몽키 패칭"하는 재미를 즐기세요.
이 글이 도움이 되길 바랍니다.
참고로, 이 답변을 작성하면서 님은 다음과 같이 작성하셨습니다:
이것은 제 주장을 어느 정도 증명하는 것 아닌가요?
Discourse에서 "플러그인"을 작성하는 것은 (한 차원에서는) "Ruby 코드"를 작성하는 것이며, 다른 사람들에게는 훨씬 더 깊은 곳(EmberJS)까지 영향을 미칩니다.
Discourse 플러그인 작성을 시작하기 전에, 님께는 가치가 없어 보일 수 있지만, 제 친절한 조언은 먼저 몇 가지 Ruby on Rails 앱을 개발해 보라는 것입니다. Ruby와 Rails를, 적어도 기본 개념을 익히면, 위에서 던진 질문에 대한 답을 스스로 찾을 수 있을 것입니다.
오늘 아침 저는 클라이언트와 3시간 동안 컨퍼런스 콜을 하며 Rails 앱, 검증, 모델 등을 논의했고, 그 후 통화에서 나온 액션 아이템 중 일부를 코딩하는 동안 휴식을 취하다가 님의 글을 읽었습니다.
제 생각에, Discourse 플러그인을 작성하기까지의 가장 짧은 경로는 먼저 Rails를 배우는 것입니다.
이 글이 도움이 되길 바랍니다!