2024년 나는 일자리를 구하고 있었습니다. 저는 커뮤니티 컨설턴트로서 제 서비스를 제공하기로 결정했습니다. 하지만 대부분의 경우, 사람들은 자신의 Discourse 사이트를 수정하거나 업데이트하는 데 도움이 되는 기술적인 지원을 원했습니다. 잠재적 고객 중 한 명은 계정이 없는 사람들이 피드백을 보낼 수 있도록 연락처 양식을 추가할 수 있는지 물었습니다. 저는 주변을 둘러본 끝에 그것이 불가능하다는 결론을 내렸습니다. 하지만 저는 충분한 여가 시간이 있었기 때문에 플러그인 개발자 튜토리얼을 따라가며 제가 할 수 있는 일이 무엇인지 확인해 보았습니다. 결국 저는 연락처 양식 플러그인을 개발했고 그 고객을 확보했습니다.[1]
모두가 명확하게 이해할 수 있도록 말씀드립니다: 저는 프론트엔드 프로그래머가 아닙니다! 제가 어떤 종류의 전문 프로그래머로 활동했던 지 13년이 지났습니다. HTML 양식을 만드는 법을 아는 정도가 제 지식의 한계입니다. 그래서 저는 튜토리얼의 Ember와 Handlebars 섹션을 헤매며, 충분히 잘 작동하는 해킹 코드를 조립해 냈습니다. 다행히도 저는 이전 직장에서 템플릿 시스템을 사용해 본 경험이 있어 템플릿 시스템에 익숙했습니다.
저는 OpenSSL Foundation에서 일자리를 얻었고[2] 대부분의 고객들을 포기했습니다. 하지만 플러그인을 만들어 준 고객은 제 작업을 정말로 높이 평가해 저를 유지보수 계약에 남겼습니다. (저는 그에게 몇 가지 무관한 프로젝트도 수행했습니다.) 유지보수 계약금을 벌기 위해 저는 그의 Discourse 서버를 업그레이드하기로 결정했습니다. 제가 본 것은 다음과 같았습니다:
이것은 제 고객 사이트에서만 발생했습니다. 제가 멍청하게도 스테이징 사이트에 연락처 플러그인을 설치했지만 활성화하지 않았기 때문입니다. 그래서 저는 빠르게 안전 모드로 진입하여 플러그인을 비활성화했습니다. 지난 주말에 저는 무엇이 잘못되었고 고객을 위해 어떻게 수정할 수 있는지 파악하는 데 시간을 보냈습니다.
일부 검색 끝에, 저는 테마와 플러그인에서 .hbs 파일 확장자 비추천을 발견했습니다:
최신 버전의 Discourse에서 테마와 플러그인에
.hbs파일을 사용하는 것은 비추천(deprecated)되었습니다. 이 파일 형식에 대한 지원은 다음 ESR 릴리스 이후에 제거될 것입니다.
이것은 3월에 발표된 내용으로, 만약 제가 ESR 릴리스를 사용했다면 기본적으로 9월 말까지 수정할 시간이 있었을 것입니다. 하지만 제 Discourse 설정은 "tests-passed"[3]를 사용하고 있기 때문에, 저는 몇 개월 앞서서 그 오류를 받게 된 것 같습니다.
어쨌든 수정해야 하므로(또는 고객을 실망시켜야 하므로) 저는 설명서로 바로 뛰어들었습니다: 테마와 플러그인을 .gjs 파일 형식으로 자동 업데이트하기. 첫 번째 단계는 개발 환경 설치였습니다. 마지막으로 이 작업을 시도했던 때 이후로 노트북을 바꿨기 때문입니다.[4] 마침내 Discourse를 실행하고 제 플러그인이 로컬에서 깨져 있음을 확인한 후, 저는 린트 과정을 실행했습니다.[5]:
$ pnpm eslint --fix .
/Users/jericson/src/discourse-contact-plugin/assets/javascripts/discourse/components/contact-form.js
1:8 error Use Glimmer components(@glimmer/component) instead of classic components(@ember/component) ember/no-classic-components
3:16 error Native JS classes should be used instead of classic classes ember/no-classic-classes
3:16 error Please switch to a tagless component by setting `tagName: ''` or converting to a Glimmer component ember/require-tagless-components
20:3 error Use the @action decorator instead of declaring an actions hash ember/no-actions-hash
✖ 4 problems (4 errors, 0 warnings)
플러그인을 변경해야 한다는 점이 귀찮기는 하지만, 적어도 린트 과정이 제 코드를 정리하고 현대화하는 데 도움이 되었습니다. 하지만 자동화 스크립트는 .gjs로 변환하는 것을 시도하다가 실패했습니다. 그래서 저는 https://ask.discourse.com/ 을 사용해 보기로 했습니다.
거기에는 제 질문이 12개 있습니다. 저는 인간과 공유하지 않을 것입니다. 왜냐하면 그것은 점점 더 좌절된 프로그래머의 발버둥에 불과하기 때문입니다. 어느 시점에서 봇은 제 하위 문제 중 하나에 대해 "더 견고한 현대적 접근법"을 제안했는데, 그것은 . . . .js 파일과 .hbs 파일을 포함하고 있었습니다.
이것이 왜 일어나는지 저는 압니다. 이는 Meta Discourse 토론으로 학습되었기 때문이며, 여전히 Handlebars 코드가 포함된 게시물이 많이 있습니다. 여기에는 공식 플러그인 개발자 튜토리얼의 두 번째 부분도 포함됩니다. 그 내용들은 시간이 지나면서 업데이트될 것이지만, 공식적인 조언이 업그레이드 관련 도움을 받기 위해 Meta Discourse에서 질문하는 대신 채팅 봇에게 묻도록 권장하고 있기 때문에, 조금 더 시간이 걸릴 것 같아 우려됩니다.
불평하지 말아야 할 것 같습니다. 제 코드를 정리하는 데 도움이 되었고, 아마도 인간에게 묻는 것보다 더 적은 마찰로 이루어졌을 테니까요.
플랫폼 안정성
이제 저는 OpenSSL Foundation에서 일하고 있습니다. Heartbleed 때문에 OpenSSL에 대해 알고 계실 것입니다. 그것은 어디에나 사용됩니다. 가장 인기 있는 다운로드 버전은 2023년에 수명 종료(end-of-life)에 도달한 1.1.1입니다. 다음으로 인기 있는 것은 2021년에 출시되었지만 여전히 장기 지원(LTS) 릴리스로 지원되고 있는 3.0입니다. 다음은 우리의 최신 LTS인 3.5입니다. 이 세 가지 릴리스는 GitHub 다운로드의 거의 2/3를 차지합니다.
3.5에는 몇 가지 멋진 새로운 기능이 있지만, 이는 다소 실망스러운 부분입니다. 하지만 궁극적으로 사람들이 가장 중요하게 여기는 기능은 SSL/TLS와 암호화 원시 기능의 어떤 조합일 것입니다. 양자 내성 암호화 알고리즘에 열정을 느끼지 않는 한, 업그레이드의 고통을 가능한 한 오래 미루게 될 것입니다.
물론 OpenSSL은 Discourse보다 스택의 훨씬 아래에 위치합니다. 하지만 원리는 동일합니다. 새로운 기능이 없다면, 사람들은 깨지는 업그레이드(breaking upgrades)에 관심이 없습니다. 저는 _여러분_이 Discourse에 추가된 새로운 기능에 대해 설레는 것을 압니다. 나중에 몇 가지 최적화를 얻기 위해 API를 변경하고 싶은 마음을 이해합니다. 저는 단지 너무 빠르게 움직이는 것이 커뮤니티가 구축되는 플랫폼으로서의 Discourse에 해가 될까 봐 우려할 뿐입니다.
그것에 관해 말하자면, Alex Komoroske가 작성한 Gardening Platforms라는 매우 유용한 슬라이드 덱이 있습니다. 90번째 슬라이드에서 "Platform + Ecosystem"이라는 섹션이 시작되며, 플랫폼은 그 생태계와 공진화(coevolve)해야 한다는 것을 설명합니다. 이 경우, Discourse는 플러그인과 테마 디자이너, 호스팅 서비스, Meta Discourse 커뮤니티, 그리고 심지어 Discourse 위에 구축된 커뮤니티까지 포함하는 생태계를 지원하는 플랫폼입니다. 98번째 슬라이드의 발표자 노트에서 중요한 통찰:
하지만 그것들은 독립적이지 않습니다; 그것들은 상생적으로 관련되어 있습니다.
한쪽에서 일어나는 행동은 다른 쪽에 영향을 미치고, 그 반대도 마찬가지입니다. 그것들을 양방향으로 연결하는 피드백 루프라고 생각하십시오.
그것들은 강하게 묶여 있는 것이 아니라, 그것들을 연결하는 고무줄과 더 비슷합니다. 그것은 중력적 끌음입니다.
플랫폼과 생태계가 서로에 대해 너무 빠르게 움직이면, 그 유대는 재앙적인 효과로 끊어집니다. 저는 Discourse가 생태계에 정당한 대우를 할 것이라고 신뢰합니다. 단지 지난 주말 같은 주말들이 그 신뢰를 약화시킬 뿐입니다.
결과적으로 상당히 정적인 사이트가 되었지만, 제 작업에 대해 꽤 자부심을 가지고 있습니다. ↩︎
예고편! ↩︎
이것도 업데이트가 필요합니다 ↩︎
Redis와 Rails를 설치하는 것이 기억하는 것보다 더 어려웠습니다. ↩︎

